問題タブ [interpreter]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
design-patterns - なぜインタープリターパターンはダメなのですか?
Steve Yegge による Design Patterns のレビューで、彼は Interpreter Pattern を「冗談」と呼んでいます。彼は続けて、コンパイラの認識がどのように変化したかについて話しますが、インタープリター言語はまだどのように使用されているかについても話していますが、これがどのようにパターンに結びついているかはわかりません。
この無知な学生を啓発したい人はいますか?
c - インタプリタ ループを展開 (コンパイル) するにはどうすればよいですか?
一部の言語は、「インタープリター ループを展開する」ことによって、インタープリターからコンパイルに移行すると聞きました。
次の ast ツリー用の疑似 C コード インタープリターがあるとします。
このループを展開してコンパイル済みプログラムを作成するにはどうすればよいですか?
私が何について話しているのかわからないように、皆さんがこれに反対票を投じているのを見ますが、これはウィキペディアからの引用であり、私が説明していることを正確に述べています.
「Factor はもともと解釈されるだけでしたが、現在は完全にコンパイルされています (非最適化コンパイラは基本的にインタプリタ ループを展開します」
javascript - GPL、JavaScript、オンライン ゲーム
私は、80 年代のシエラ アドベンチャー ゲームの javascript でゲーム インタープリターに取り組んでいます。GPL ライセンスの Sarien と呼ばれる既存のリバース エンジニアリングされた C インタープリターの一部を移植しました。私の作品もGPLにしています。ここまでは順調ですね。
しかし、私の目標は、マルチプレイヤー サポートを追加して、人々がこれらのゲームをオンラインでプレイできる Web サイトを作成することです。マルチプレイヤーにはクライアント + サーバー コードが必要で、マルチプレイヤー部分は独自のクローズド (商用) コードです。それもGPLである必要がありますか?
他の人がここで GPL に関する質問をしたことは知っていますが、通常は埋め込みやリンクなどが含まれており、理解しやすくなっています。私の設定は JavaScript ベースです。コア インタープリター コードを GPL として配布し、(マルチプレイヤーを可能にするために) IO 部分にフックする別の JavaScript レイヤーを追加し、その部分を GPL にしないことはできますか?
私はすべての作業を GPL として貢献したいと思っていますが、マルチプレイヤー エンジンの一部については、私が決定することはできません。もし GPL が私にすべてを GPL にすることを強制するなら、それは私がマルチプレイヤーを追加することを禁止し、したがって何かクールなものを作ることを妨げます :-(
アップデート:
元のインタープリター コード (GPL ライセンス) は、その後 ScummVM にマージされました。インタープリター ファイルは、GPL バージョン 2 以降がエンド ユーザーの判断に応じて適用されることをヘッダーに表示するようになりました。これで何か変わりますか?補足として; この方法でライセンスを変更することは許可されていますか?
vim - バイトコード対。解釈された
ある教授が、解釈されたコードはコンパイルされたコードよりも約 10 倍遅いと言っていたのを覚えています。インタープリターとバイトコードの速度の違いは? (バイトコードが JIT コンパイルされていないと仮定します)
vim スクリプトをバイトコードにコンパイルするというアイデアを蹴散らしている人がいるからです。私は、それによってどのようなパフォーマンスが向上するのか疑問に思っています。
c - Cのインタプリタはありますか?
C 用のインタープリターのようなものがあるのではないかと思っていました。つまり、Linux 端末で「python」と入力して、そのインタープリターでコーディングできます。(通訳者の正しい言葉がわかりません)。これは、さまざまなことをテストするのに非常に役立ちます.Cにも同様のものが存在するかどうか興味があります.私はそれを疑っています. 私が考えることができる唯一のことは、Cシェルです...
c# - JIT をオフにし、MSIL (独自の VM) でコードフローを制御する
私は C# で独自のスクリプト言語を作成しており、いくつかの機能を気に入っています。MSIL を出力のバイトコードとして使用することにしました (Reflection.Emit は非常に便利で、別のバイトコードを考える必要はありません)。それは機能し、実行可能ファイルを発行します。これは実行可能で (Reflector で逆コンパイルすることもできます:))、非常に高速です。
しかし - 1 つのプロセス + 1 つのスレッドで複数の「プロセス」を実行し、割り当てられた CPU 時間を手動で制御したい (.NET フレームワークによって提供されるより堅牢な IPC も実装する) JIT を完全に無効にして独自のプロセスを作成する方法はありますかVM、.NET フレームワーク (およびメモリ使用量の制御など) を使用した命令ごとのステップ実行、自分で何かを記述する必要なし、またはこれを達成するには、MSIL 解釈全体を記述する必要がありますか?
編集 1): IL の解釈は、宇宙で最速のものではないことを知っています :)
編集2):明確にするために-VMをある種の「オペレーティングシステム」にしたい-CPU時間を取得し、プロセス間で分割し、それらのメモリ割り当てを制御します。高速である必要も効果的である必要もありませんが、私の実験の概念実証にすぎません。すべての命令を処理するレベルでそれを実装する必要はありません。これを .NET で実行する必要がある場合は、気にしません。言いたいのは、1 つの命令をステップ実行し、次のステップを指示するまで待つことです。
編集 3): 私は、ICorDebug がおそらく私のニーズを達成できることに気付きました。今、Mono のランタイムの実装を調べています。
python - PyPy は、CPython、Jython、および IronPython に対して何を提供する必要がありますか?
私がブログで見たり読んだりしたことによると、PyPy は非常に野心的なプロジェクトです。兄弟 (CPython、Jython、および IronPython) よりも優れている点は何ですか? 速度、クロスプラットフォームの互換性 (モバイル プラットフォームを含む)、GIL なしで c-extensions を使用する機能ですか、それとも何ができるかについての技術的な演習ですか?
compiler-construction - インタプリタは実際にメモリ内でプリコンパイルされますか?
さて、私は古いCSのメモを取り、コンパイラ理論をもう少し調べてみようと思いました。私の人生では、これらすべてがどのように機能するかを思い出せないと言わざるを得ませんが、大学時代の素晴らしいサンプルアプリケーションがあり、いくつかのことを理解するのに役立ちます。
このサンプルアプリケーションは、作成された言語を取得し、言語のような中間アセンブリコードにコンパイルします。次に、この中間言語を使用してステートメントを実行する単純なVM実装があります。
私が頭を悩ませることができないのは、これが真っ直ぐなインタプリタであり、コンパイラではない場合でも、最後に実行されるこれらの中間コマンドをメモリに構築しているということです。または、インタプリタは実際にコードチャンクの控えめなセクションを一度に「実行」しますか?