8

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

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

  • JVM
  • オウム
  • OSA

多くの言語が JVM を使用していますが、Java っぽい言語を作成しない限り、stdlib が提供するすべての機能は見苦しく感じられます。動的なものもあまり得意ではありません。

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

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

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

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

[編集]
今のところ Python を受け入れましたが、OSA と Parrot についてもっと知りたいです。

4

4 に答える 4

5

私が試した 1 つのアプローチは、Python astモジュールを使用して、実行するコードを表す抽象構文ツリーを構築することです。Pythoncompile関数は、AST を Python バイトコードにコンパイルしてexec実行できます。これは、バイトコードを直接生成するよりも少し高いレベルですが、Python 言語のいくつかの癖 (ステートメントと式の根本的な違いなど) に対処する必要があります。

これを行う際に、デバッグのためだけに、AST を同等の Python ソース コードに変換しようとする「deparse」モジュールも作成しました。興味がある場合は、 psilリポジトリでコードを見つけることができます。

于 2010-01-30T11:26:47.830 に答える
4

LLVMを見てください。それ自体は純粋な VM ではなく、高レベルの VM を構築できる独自の IR を備えたフレームワークです。静的コード分析や JIT サポートなどの優れた機能があります

于 2010-01-30T10:57:03.183 に答える
2
  • Lua には小さくてよくできた高速な VM があります
  • Python VM - 必要に応じて新しい言語を実際に接続できます。または、Python VM の小さくてシンプルな実装である tinypy のようなものを書きます (使用しますか?)。

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

とはいえ、オウムが捨てられた/趣味であることに同意しません。それはかなり成熟しており、非常に強力な開発者が取り組んでいます。さらに、これは特に複数の動的言語のターゲットになるように設計された VM です。したがって、柔軟性を考慮して設計されています。

于 2010-01-30T10:55:17.050 に答える
1

Pypyを検討しましたか?私が読んだことから、Python JITコンパイラであることに加えて、他の言語を処理する機能もあります。たとえば、Pypyを使用してBrainfuckJITコンパイラを作成する方法を説明するチュートリアルがあります。

于 2012-06-10T00:37:20.780 に答える