5

私はおもちゃのプログラミング言語を書くという趣味を探しています。一部は他の言語に対する小さな煩わしさから、一部はそれがどのようなものかを理解できるようにするためですが、ほとんどはただふざけているだけです。

それが本当に便利になる可能性が低い場合は、別のプログラミング言語の実行時に、その言語で書かれたプログラムを実行することに依存したくありません。つまり、インタープリター/コンパイラー自体を、ターゲット OS にネイティブにコンパイルされたプログラムにする必要があります (言語自体がインタープリター/ランタイムを提供する場合があります)。

C以外にこれを行う代替手段はありますか? いくつかの利点/欠点、またはそれぞれの使用方法は何ですか?

明確化 1: カーネル、ファイルシステム、デバイス ドライバー、ブート ローダーを作成するのに十分な低レベルになるつもりはありません。しかし、私は自分の記憶を管理できるようにしたいと考えています。

明確化 2: 用語の誤り/誤解が原因で、さまざまな OS で実行されている C ランタイムに慣れていたので、C にはランタイムがないと言いました / または、ランタイムには興味がありません。私が本当に望んでいることは、ブートストラップ言語から追加のソフトウェアをインストールする必要なく、私のプログラムがターゲット (デスクトップ) OS にネイティブにコンパイルされることです。

2.1: Python でコンパイラ/インタープリタを作成する場合、出力される実行可能ファイルを Python プログラムに依存させたくありません。

2.2: たとえば、perl を使用してプログラムをコンパイルするためにコンパイル手順を使用する場合、発行された実行可能ファイルが libperl.dll/so に依存することは望ましくありません。

2.3: 多くのコア OS ツールが C ランタイムに依存しているため、通常、ほとんどすべてのデスクトップ OS に C ランタイムがインストールされているため、例外は C ランタイムです。

4

6 に答える 6

4

依存関係のないネイティブ コードを発行する既存のコンパイラを持つ任意の言語を使用できます。C と C++ は、ランタイムがほぼどこでも利用できるため (C ではなおさらです)、かなり良い賭けです。

言語を構築する際に試してみる価値のある 1 つのアプローチは、コンパイラの出力を C (または C++) にすることです。次に、これらの言語とそのランタイム (リンカー、オブジェクト ダンパー、デバッガーなど) に関する既存のエコシステムをすべて使用し、既存のコードとの統合を計画することもできます。

これらのツールは、あなたの言語のユーザーにとっても、おもちゃの言語を実験している自分自身にとっても、明らかに役に立ちます。

あなたの言語が「自己ホスト型」 (つまり、コンパイラが独自の言語で書かれている) になると、C 部分全体を廃止してネイティブ コード コンパイラを作成することを考え始めることができます。そのランタイムで。

幸運を :-)

また、必ずLLVMを見てください。それは「コンパイラインフラストラクチャ」です。最近では、新しい言語を実装するのに最適な場所です。ドキュメンテーションは非常に優れており、チュートリアルにはおもちゃの言語の構築が含まれています。

于 2011-04-18T11:46:50.793 に答える
2

Cにはランタイムがあります... C++にはCよりもわずかに大きな最小ランタイムがあります.Adaの一部の実装には、ランタイムの使用を義務付けるいくつかの機能が使用されていないことを確認できるプラグマがあります(後で標準化されましたが、私は 90 年代後半に Ada の標準化に従うのをやめました)、おそらく C と同じ複雑さの最小限の実行時間を持っています.

于 2011-04-18T11:42:05.417 に答える
1

PyPyは RPython を使用して Python 言語を実装します。これはうまくいきますか?

于 2011-04-18T11:57:47.250 に答える
-1

Haxe は OCaml で書かれており、これは他の言語を書くのに非常に適した言語だと思います。

http://haxe.org/

http://caml.inria.fr/

于 2011-04-18T19:32:14.927 に答える
-2

ブートローダとカーネルを作成する場合は C 言語を使用します。それ以外の場合は、言語の開発にどの言語を使用してもかまいません。ホスト言語にランタイムがあるからといって、自動的にターゲット言語にもランタイムが必要になるわけではありません。

しかしもちろん、おもちゃの言語には、JVM/LLVM/.NET CLR などのランタイムが必要です。または通訳。これらの選択をしないと、ABI に準拠するマシン コードを生成する必要があり、非常に苦痛です。

ターゲットllvmを見て、そこからマシンコードを生成することをお勧めします.dalvikもニーズに合うかもしれません(非常に軽量であるため)。

于 2011-04-18T11:47:58.457 に答える
-2

Python が最適だと思います。Python は、より迅速に作業し、システムをより効果的に統合できるプログラミング言語です。Python の使い方を学ぶと、すぐに生産性が向上し、メンテナンス コストが削減されます。

最近、Python が Java および .NET 仮想マシンに移植されました。

最も重要なのは、Python が無料であることです。

于 2011-04-18T19:25:34.190 に答える