7

私は現在、プログラミング言語で遊んでいます。私は、高水準言語 (特に Haxe) でパーサーとインタープリターを作成することに時間を費やしてきました。

いくつかの結果が得られましたが、実際には非常に優れていると思いますが、今はそれらを高速化したいと考えています。

私のアイデアは、入力言語を C に翻訳することでした。
私の C の知識は、大学で学んだことだけです。いくつかの演習を除いて、実際の C プログラムを書いたことはありません。しかし、私はそれを機能させることができると確信しています。

もちろん、LLVM のフロントエンドを作成したり、MSIL または JVM バイトコードを生成したりすることもできます。しかし、私は今それを学ぶには多すぎると感じており、実際にはあまり利益が見られません.
また、C は完全に人間が読める言語なので、失敗したとしても、その理由を理解するのはずっと簡単です。そしてCはやはりハイレベル。頭を悩ませることなく、入力言語から概念を実際に翻訳できます。合理的な時間内に何かを稼働させて実行し、適切と思われるように最適化する必要があります。

では、C を使用することの欠点はありますか? 代替案をお勧めできますか?
あなたの洞察をありがとう:)


編集:いくつかの明確化

  • 私がずっと下に行きたい理由は、OOPをサポートする言語を書いていて、非常に具体的なことを念頭に置いているので、実際に手でディスパッチするメソッドを実装したいからです。
  • 主な使用分野は HTTP サービスの作成ですが、GUI ライブラリ (wxWidgets など) へのバインディングの追加なども想像できます。
4

4 に答える 4

6

C は、あなたがしようとしていることに適した、非常に人気のある選択肢です。

それでも、LLVM の中間言語 (IR) を見てみましょう。これは非常に読みやすく、C よりもクリーンで生成と解析が容易だと思います。LLVM には、LLVM を操作するための非常に多くのツールが付属しています。さまざまなプラットフォーム (C と同様ですが、出力をわずかに制御できます) または仮想マシン用のネイティブ コードを生成できます。JIT コンパイルの可能性もプラスです。

LLVM アプローチの概要と IR の一部の抜粋については、The Architecture of Open Source Applications の Chapter 11を参照してください。


ターゲット環境は何ですか? これにより、より適切な回答が得られる場合があります。

于 2011-06-14T18:04:59.783 に答える
2

C は実際には、小規模または実験的なコンパイラのターゲット言語として非常に適しています。C は多くのプラットフォームで広く利用できるため、コンパイラは多くの環境ですぐに役立ちます。主な欠点は、C で十分にサポートされていないもの、または C 仕様で十分に定義されていないものを処理することです。たとえば、動的コード生成 (JIT コンパイル) を行う場合、C は問題があります。スタックの巻き戻しやリフレクションのようなことは、C で行うにはトリッキーです (ただし、setjmp/longjmp と、レイアウト記述を生成する構造体を慎重に使用することで、多くのことができます)。ワード サイズ、ビッグ エンディアンまたはリトル エンディアンのレイアウト、算術精度などは C コンパイラによって異なるため、注意が必要ですが、とにかく複数のターゲット マシンをサポートする場合は、これらに対処する必要があります。

他の言語も同様に使用できます。C の主な利点は、どこにでもあることです。

于 2011-06-14T17:54:56.043 に答える
0

Cは良い選択です、IMHO。多くの言語とは異なり、C は一般に、32 個のキーワードしかなく、トークンと演算子の非常に単純で一貫性のあるコレクションを備えた非常に基本的な構造 (シーケンス、選択、反復) しかないという点で「エレガント」と見なされます。

C 内では構文が非常に一貫しているため (大括弧と中括弧、ブロックとステートメント、式の使用)、無限の言語拡張の世界に足を踏み入れることはありません。C は成熟した言語であり、時代をうまく乗り切っており、現在では「既知の量」です (他の多くの言語については、「成熟した」言語であっても、これを言うのは非常に困難です)。

于 2011-06-15T17:32:47.353 に答える