質問

私は自分自身の小さな言語を書こうと考えています。

いくつかのオプションを見つけましたが、さらに提案してください。

  • JVM
  • オウム
  • OSA

多くの言語が JVM を使用していますが、Java 風の言語を作成しない限り、stdlib が提供するすべての機能は醜く感じられるでしょう。ダイナミックなものもあまり得意ではありません。

Parrot は言語開発に適した VM のように見えますが、放棄された/未完成/趣味のプロジェクトの匂いが少しあります。

OSA は Applescript を動かすもので、特に有名な VM ではありませんが、私は Mac を使用しており、優れたシステム統合を提供します。

CLR+Mac は良い組み合わせではないようです...

私の言語は、強力な型付けと Python と Lisp 構文の混合を備えたオブジェクト指向の関数型同時データフロー言語になる予定です。いいですね。

[編集]
とりあえずPythonは受け入れましたが、OSAとParrotについて詳しく聞きたいです。

役に立ちましたか?

解決

私がプレイした一つのアプローチは、Python AST のモジュールを使用することです実行するためのコードを表す抽象構文木を構築します。 Pythonの compile の機能は、 exec には、実行することができます。これは、直接バイトコードを生成するよりも少し高いレベルですが、(例えば、文と式の基本的な違い)Python言語のいくつかの癖に対処する必要があります。

私も「逆パース」モジュールを書いてこれを行うには、そのちょうどデバッグするために、同等のPythonのソースコードへのASTの背中を変換しようとします。あなたは psil のリポジトリあなたの場合だ興味を持ってます。

のコードを見つけることができます

他のヒント

LLVM のを見てください。それはあなたがハイレベルの仮想マシンを構築することができ、それ自身のIRを持つように、複数のフレームワークとして純粋なVMではありません。静的コード解析とJITのサポート

のような素敵なものを持っています
  • Lua には、小さく、よく書かれた、高速な VM があります
  • Python VM - 必要に応じて、実際に新しい言語をアタッチできます。または、Python VM の小さくてシンプルな実装である tinypy のようなものを作成 (使用?) します。

上記の両方のオプションは、作業を節約する便利な標準ライブラリにアクセスでき、比較的クリーンでモジュール化された C でコード化されているため、接続は難しくありません。

そうは言っても、私はオウムが放棄された/趣味であるという意見には同意しません。これはかなり成熟しており、非常に強力な開発者が取り組んでいます。さらに、これは特に複数の動的言語の対象となるように設計された VM です。したがって、柔軟性を念頭に置いて設計されています。

あなたはPypyと考えていますか?私が何を読んでからは、PythonのJITコンパイラであることに加えて、それはまた、他の言語を処理する能力を持っています。たとえば Aチュートリアルの方法を説明しているがありますPypyを使用してBrainfuck JITコンパイラを作成します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top