タグ付けされた質問 「virtual-machine」

仮想マシンは、プログラムとOS間のエミュレーションレイヤーであり、OSが提供するraw環境ではなく、アプリケーションで実行するための特殊な環境をアプリケーションに提供します。

6
Pythonバイトコードにコンパイルする他のプログラミング言語がないのはなぜですか?
Javaには、JavaバイトコードにコンパイルしてJVMで実行できる複数の言語があります。Clojure、Groovy、およびScalaは、私の頭の中で覚えている主要な言語です。 ただし、PythonはPythonインタープリターによって実行される前にバイトコード(.pycファイル)に変わります。私はただ無知かもしれませんが、Pythonバイトコードにコンパイルする他のプログラミング言語がないのはなぜですか? 誰も邪魔しないからか、そうするのを難しくする固有の制限や障壁があるのでしょうか?

25
仮想マシンを使用した開発に関する考え方[終了]
私はスタートアップの開発リーダーとして働き、開発にVMを使用することを提案しました。各開発者がテスト/開発用のVMを備えたデスクトップを持っているということではなく、すべてのVMが管理され、ローカルまたはリモートからでもマイクロPC(ChromeOSの誰か)で開発者が作業するサーバーラックがあることを意味しますコンピューター。 私にとっての利点は、非常にスケーラブルで、長期的には安価で、管理しやすく、ハードウェアを最大限に活用できることです。短所については、セットアップをセットアップ/メンテナンスする人が必要になる以外、特定のショートッパーについて考えることはできません。 私はあなたの何人かがあなたの職場で同様の設定をして、あなたの意見に重みをつけることができることを望んでいました。ありがとう。

3
型システムとは何ですか?
バックグラウンド 私はサイドプロジェクトとして言語を設計しています。動作するアセンブラー、静的アナライザー、それに仮想マシンがあります。構築したインフラストラクチャを使用して、重要なプログラムを既にコンパイルおよび実行できるため、大学でプレゼンテーションを行うことを考えました。 私の話の中で、私はVMが型システムを提供することについて言及しました、「あなたの型システムは何のためにあるのですか?」答えた後、私は質問をする人に笑われました。 したがって、この質問をすることで評判を失うことはほぼ確実ですが、プログラマーに頼ります。 私の理解 私が理解しているように、型システムはプログラム内のエンティティに関する追加情報の層を提供するために使用されるため、ランタイム、コンパイラー、またはその他の機械は、操作対象のビット文字列をどう処理するかを認識します。また、コントラクトの維持にも役立ちます。コンパイラ(またはコードアナライザー、ランタイム、またはその他のプログラム)は、プログラマーが期待する値でプログラムが動作することをいつでも検証できます。 タイプは、それらの人間のプログラマーに情報を提供するためにも使用できます。たとえば、次の宣言を見つけます。 function sqrt(double n) -> double; これよりも便利 sqrt(n) 前者は多くの情報を提供します:sqrt識別子は関数であり、double入力として単一のものを取り、double出力として別のものを生成します。後者は、おそらく単一のパラメーターを取る関数であることを示しています。 私の答え それで、「あなたのタイプシステムは何のためですか?」私は次のように答えました: 型システムは動的です(型は値を保持する変数ではなく値に割り当てられます)が、意外な強制ルールがなければ強力です(互換性のない型を表すため、文字列を整数に追加できませんが、浮動小数点数に整数を追加できます) 。 タイプシステムは、命令のオペランドが有効であることを確認するためにVMによって使用されます。また、プログラマーは、関数に渡されたパラメーターが有効(つまり、正しい型)であることを確認するために使用できます。 型システムは、サブタイピングと多重継承をサポートしています(プログラマーは両方の機能を使用できます)。オブジェクトのメソッドの動的ディスパッチが使用される場合、型は考慮されます。 次の質問は、「タイプは値にどのように割り当てられますか?」でした。そこで、すべての値がボックス化され、タイプの名前、応答するメッセージ、および継承するタイプに関する情報を提供するタイプ定義構造を指すポインターがあることを説明しました。 その後、私は笑われ、「それは本当のタイプシステムではない」というコメントで私の答えは却下されました。 だから-私が説明したものが「実際のタイプシステム」として適格でない場合、どうなりますか?その人は、私が提供するものを型システムと見なすことができないということは正しいのですか?

4
VMが「スタックマシン」または「レジスタマシン」などである必要があるのはなぜですか?
(これは非常に初心者向けの質問です)。 私は仮想マシンについて少し勉強しています。 それらの多くは、物理的または理論的なコンピューターと非常によく似た設計になっています。 たとえば、JVMは「スタックマシン」であると読みました。それが意味することは(そして、私が間違っている場合は私を修正します)、すべての「一時メモリ」をスタックに保存し、そのすべてのオペコードに対してこのスタックで操作を行うことです。 たとえば、ソースコード2 + 3は次のようなバイトコードに変換されます。 push 2 push 3 add 私の質問はこれです: JVMはおそらくC / C ++などを使用して記述されています。もしそうなら、なぜJVMは次のCコードを実行しません:2 + 3..?つまり、なぜスタックが必要なのか、または物理コンピューターのように他のVMの「レジスタ」に必要なのでしょうか? 基礎となる物理CPUがこれらすべてを処理します。VMライターが、VMがプログラミングされている言語の「通常の」命令で、解釈されたバイトコードを単に実行しないのはなぜですか? 実際のハードウェアが既にこれを行っているのに、なぜVMがハードウェアをエミュレートする必要があるのですか? 繰り返しますが、初心者向けの質問です。ご協力いただきありがとうございます

11
仮想マシンとして提供されるソフトウェアを受け入れない理由はありますか?
これは物流に関する質問であり、技術的な質問ではありません。 私の会社はいくつかの組み込みソフトウェアの仕事を外部委託しています。具体的には、社内で十分な知識を持っていないため、組み込みシステムを開発するために請負業者に支払いました(デスクトップアプリケーション開発者しかいない)。 そのため、請負業者はソフトウェアを完成させ、仮想マシンで提供するかどうかを尋ねました。VMは、ソースコードがCodeWarriorプロジェクトとして事前設定されたCodeWarrior IDEを含むWindows 8マシンです。これにより、このプロジェクトをさらに開発するためにすでに構成されているVM内でコードを変更できるようになります。 プロジェクトにコード変更を加えるために独自の開発マシンを構成する方法を説明してもらうのではなく、これを行うことには欠点がありますか?予見できる唯一の問題は、VMの実行が遅いことです。コードを変更すると、プロジェクトの再構築に時間がかかります。しかし、一方で、事前に構成された組み込みシステム開発環境を取得するというアイデアが好きなので、デスクトップアプリケーションの開発マシンに別のIDEを追加する必要はありません。 VMの成果物を受け入れない理由を考えることはできませんが、不足しているものがある場合に備えて、このコミュニティで実行したかっただけです。

8
Object.finalize()のオーバーライドは本当に悪いですか?
オーバーライドに対する主な2つの引数Object.finalize()は次のとおりです。 いつ呼び出されるかを決めることはできません。 まったく呼び出されない場合があります。 私がこれを正しく理解していれば、Object.finalize()それがそんなに嫌いな十分な理由だとは思いません。 オブジェクトの割り当てを解除する適切なタイミングは開発者ではなく、VM実装とGCが決定します。いつObject.finalize()呼び出されるかを決めることが重要なのはなぜですか? 通常、私が間違っている場合は修正Object.finalize()しますが、GCが実行される前にアプリケーションが終了したときのみ呼び出されません。ただし、アプリケーションのプロセスが終了すると、オブジェクトは解放されます。だから、Object.finalize()それが呼び出される必要はなかったので、呼び出されませんでした。開発者が気にするのはなぜですか? 手動で閉じる必要のあるオブジェクト(ファイルハンドルや接続など)を使用するたびに、非常にイライラします。オブジェクトにの実装があるかどうかを常に確認する必要がありclose()、過去のある時点でいくつかの呼び出しを逃したと確信しています。close()実装を入れることでこれらのオブジェクトを破棄するためにVMとGCに任せる方が単純で安全ではないのはなぜObject.finalize()ですか?

7
純粋なJavaで書かれたJava IDE?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 6年前に閉鎖されました。 Javaで書かれたJava IDEはありますか? 今日、学校で9年生のDETラップトップを手に入れたばかりで、あらゆる種類の制限が設定されています。やや面倒なことに、システムに既にインストールされている実行可能ファイル以外の実行可能ファイルは実行できません(何らかの理由で、コマンドプロンプト、PowerShell、または奇妙なことにregedit の使用を無効にしていません)。Javaの実行可能ファイルを実行できるので、学校で私のくだらないラップトップでプログラムできるようにするための唯一の方法だと思いました(すべての作業を自然に終えたとき):D 編集: Javaで記述されているということは、プログラムの実行に使用される実行可能ファイルのファイル拡張子が「.jar」であるため、JVMで実行されることも意味します。 編集2: DrJava IDE を試してみましたが、うまくいきました、ありがとう(プログラムをコンパイルして実行できます)!コマンド「java -jar "C:/ Users ... / org.eclipse ..."」を使用してコマンドラインからEclipseを実行することについて。これにより、ファイルを言うログを生成するエラーが発生します。主なエラーは次のとおりです。 メッセージバンドルorg.eclipse.ui.workbenchを自動的にアクティブ化しているときにエラーが発生しました(182)。 このエラーを修正するにはどうすればよいですか(他のIDEよりもEclipseで作業するほうがはるかに適切です)。 編集3: 私の最後の編集に関しては、無視してください:D。Eclipseの最新バージョンをダウンロードして問題を修正しました。

3
関数呼び出しのセマンティクスを表すためにスタックを使用する代替策はどれですか?
通常、関数呼び出しは通常スタックを使用して実装されることを知っています。フレーム、リターンアドレス、パラメータ、ロットがあります。 ただし、スタックは実装の詳細です:呼び出し規則は異なることを行う場合があります(x86 fastcallは(一部の)レジスタを使用し、MIPSとフォロワーはレジスタウィンドウを使用するなど)、最適化は他のこと(インライン化、フレームポインターの省略、テールコール最適化..)。 確かに、多くのマシン(JVMやCLRのようなVMだけでなく、PUSH / POPなどを備えたx86のような実際のマシン)に便利なスタック命令が存在するため、関数呼び出しに使用すると便利ですが、場合によっては可能ですコールスタックが不要な方法でプログラムする(ここでContinuation Passing Style、またはメッセージパッシングシステムのアクターについて考えています) だから、私は疑問に思い始めていました:スタックなしで関数呼び出しセマンティクスを実装することは可能ですか、それとも異なるデータ構造(キュー、おそらく、または連想マップ)を使用して良いですか? もちろん、スタックは非常に便利な(ユビキタスである理由があります)が、最近私は不思議に思う実装にぶつかりました。 言語/マシン/仮想マシンで行われたことがあるかどうか、知っている人はいますか?その場合、顕著な違いと欠点はどれですか? 編集:私の直感は、異なるサブ計算アプローチが異なるデータ構造を使用できるということです。たとえば、ラムダ計算はスタックベースではありません(関数の適用の考え方は簡約によってキャプチャされます)が、実際の言語/マシン/例を見ていました。それが私が尋ねている理由です...

3
仮想マシンのCPUコアが増えるとコンパイル時間が遅くなるのはなぜですか?
[編集#2] VMWareの誰かがVMWare Fusionのコピーを見つけたら、VirtualBoxとVMWareの比較と同じようにできるとうれしいです。どういうわけか、VMWareハイパーバイザーはハイパースレッディング用に調整されると思う(私の回答も参照) 私は何か奇妙なものを見ています。Windows 7 x64仮想マシンのコア数を増やすと、全体的なコンパイル時間が減少する代わりに増加します。コンパイルは通常、並列処理に非常に適しています(中間部分(依存関係のマッピング後)で、各.c / .cpp / .cs / whateverファイルでコンパイラインスタンスを呼び出して、リンカーが取得する部分オブジェクトを構築することができます)以上。ですから、実際には、コアの数でコンパイルが非常にうまくいくと想像していました。 しかし、私が見ているのは: 8コア:1.89秒 4コア:1.33秒 2コア:1.24秒 1コア:1.15秒 これは、単に特定のベンダーのハイパーバイザー実装(私の場合はtype2:virtualbox)による設計成果物なのか、ハイパーバイザー実装をより単純にするためにより多くのVMに広がるものなのでしょうか?非常に多くの要因があるので、私はこの振る舞いについて賛否両論を立てることができるようです-だから誰かが私よりもこのことを知っているなら、あなたの答えを読んでみたいです。 どうもありがとう [ 編集:コメントのアドレス指定 ] @MartinBeckett:コールドコンパイルは破棄されました。 @MonsterTruck:直接コンパイルできるオープンソースプロジェクトが見つかりませんでした。素晴らしいと思いますが、今は私の開発環境を台無しにすることはできません。 @Mr Lister、@ philosodad:VirtualBoxを使用して8つのハードウェアスレッドがあるため、エミュレーションなしの1:1マッピングである必要があります @Thorbjorn:VM用に6.5GBと小さなVS2012プロジェクトがあります-ページファイルをゴミ箱に入れたり出したりすることはほとんどありません。 @All:誰かがオープンソースのVS2010 / VS2012プロジェクトを指すことができれば、それは私の(独自の)VS2012プロジェクトよりも良いコミュニティリファレンスかもしれません。OrchardとDNNは、VS2012でコンパイルするために環境を調整する必要があるようです。VMWare Fusionを使用している人にもこれが表示されるかどうかを確認したい(VMWareとVirtualBoxの区分化の場合) テストの詳細: ハードウェア:Macbook Pro Retina CPU:コアi7 @ 2.3Ghz(クアッドコア、ハイパースレッディング= Windowsタスクマネージャーで8コア) メモリー:16 GB ディスク:256GB SSD ホストOS:Mac OS X 10.8 VMタイプ:VirtualBox 4.1.18(タイプ2ハイパーバイザー) …

1
メタサーキュラーインタープリター、仮想マシン、パフォーマンスの向上の関係は何ですか?
私はWeb上のメタ循環インタープリター(SICPを含む)について読み、いくつかの実装(PyPyやNarcissusなど)のコードを調べました。 私は、メタサーキュラー評価を大いに活用した2つの言語、LispとSmalltalkについてかなり読みました。私の知る限り、Lispは最初のセルフホスティングコンパイラであり、Smalltalkは最初の「真の」JIT実装を備えていました。 私が完全に理解していないことの1つは、これらのインタープリター/コンパイラーがどのように非常に優れたパフォーマンスを達成できるか、言い換えれば、PyPyがCPythonよりも速いのはなぜですか?それは反射のためですか? また、Smalltalkの研究により、JIT、仮想マシン、リフレクションの間に関係があると信じるようになりました。JVMやCLRなどの仮想マシンは、大量の型内観を許可し、Just-in-Time(およびAOT、私はそうですか?)コンパイルでそれを大いに活用すると信じています。しかし、私の知る限り、仮想マシンは基本的な命令セットを持っているという点で、CPUのようなものです。仮想マシンには、言語に依存しないリフレクションを可能にするタイプおよび参照情報が含まれているため、効率的ですか? インタプリタ言語とコンパイル言語の両方がバイトコードをターゲット(LLVM、Parrot、YARV、CPython)として使用しており、JVMやCLRなどの従来のVMのパフォーマンスが信じられないほど向上したためです。私はそれがJITについてだと言われましたが、私が知る限り、JITはJavaの前にSmalltalkとSunのSelfがそれを行っていたので、新しいものではありません。過去にVMのパフォーマンスが特に良くなかったことを覚えていません。JVMや.NET以外に学術的なものは多くなく、それらのパフォーマンスは間違いなく今ほど良くありませんでした個人的な経験から話してください)。 その後、突然、2000年代後半に何かが変わり、確立された言語でさえ多くのVMがポップアップし始め、非常に優れたパフォーマンスを発揮しました。ほとんどすべての最新のVMのパフォーマンスが飛躍的に向上したJIT実装について何か発見されましたか?紙か本か?

1
アレイに基づかないコンピュータアーキテクチャ[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 関数型プログラミングのモナドに関するWadlerの最初の論文(Haskell)、と彼は言う 長い歴史を持つもう1つの問題は、プログラムを配列の更新に基づくことが望ましいかどうかです。配列に基づくアルゴリズムとアーキテクチャの開発には多大な労力が費やされているため、この議論を回避し、答えが「はい」であると想定します。 他の可能なアーキテクチャへの引用やヒントはありません。Lispに適したアーキテクチャについて何か聞いたことがあります。誰かが私にこのトピックの/どこから始められるかについての説明とガイダンスを教えてくれますか?異なるアーキテクチャについて簡単に説明していただければ幸いです。

2
Modern.IE VMライセンス
Microsoftはテスト目的でいくつかのVMを提供しており(Stack Overflowで宣伝されています)、ライセンス条項を理解しようとしています。よくわからないのは 1.b. ソフトウェアはテスト目的でのみ使用できます。ソフトウェアを商用目的で使用することはできません。 私の考え: いくつかの異なる仮想マシン上のいくつかのブラウザーでWebサイトをテストすることは、かなり専門的なアプローチのようです。多くの民間の開発者がそれをするだろうとは私はほとんど信じていない。もちろんそうすべきですが、そうする時間のあるプライベート開発者は誰ですか? それが本当にプライベート開発者だけが利用できる場合、同じことをしている企業へのオファーは何ですか?有料サービスの広告がありません。 企業によるテストは商業目的と見なされていますか?会社内のVMをテストに使用できますか?

2
「ハイパーバイザー」という用語はどのようにして使用されたのですか?
ハードウェア仮想化における「ハイパーバイザー」について読みました。VMは私の領域ではないため、用語の由来がよくわかりません。 Wikipediaの記事の「複数のオペレーティングシステムが別の仮想マシンのコンテキストで同時に実行することができ、ハードウェアの監視プログラム状態も同様に仮想化された、」方法について協議 これは、スーパーバイザープロセスが仮想化されたことを意味します。これは本当ですか?

2
基本的なスタック操作操作はどれですか?
私はスタック指向の仮想マシンを作成しているので、それがどのように機能するかについての一般的な理解のためにForthを学び始めました。次に、仮想マシンに実装する必要のある重要なスタック操作操作をリストしました。 drop ( a -- ) dup ( a -- a a ) swap ( a b -- b a ) rot ( a b c -- b c a ) 次の4つのスタック操作操作を使用して、他のスタック操作操作をシミュレートできると思います。例えば: nip ( a b -- b ) swap drop -rot ( a b c -- c a b …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.