2010-11-27 10 views
1

大学では、私はコンパイラ理論と文法を専攻していましたので、この分野では(長い間前ですが)良い背景を持ち、コンパイラの作成は少なくともC++のような言語にとっては非常に大きな事業です。人々はどのようにして独自のプログラミング言語を作成しますか?

私は、企業で働いている大勢のグループとは対照的に、個人によって作成されたようなプログラミング言語の数が多いと混乱しています。例えば、RubyはWikipediaによると、一人で作成されたものです。言語はわかりませんが、信じられないほどシンプルですが、私の主張はそこに自作言語のバケツロードがあることです。

個人としては自分の言語を作成する(それはあまりにも単純ではないほど単純ではありません)。

(コンパイラや一般的な仕様ではない)この件に関する良い本はありますか?

+0

この質問は[Programmers.SE](http://programmers.stackexchange.com/)のように聞こえるように聞こえます。 –

+2

*自己作成言語を有効にするために*生涯はかかりません* – SingleNegationElimination

答えて

1

私は自分の言語を作成する道を少し手抜きしました。私は、コードコンパイラではなく、要件、分析、および設計構造を表すためにこれをやり始めました。この目的のために、非常に単純な言語でさえ有用である可能性があります。私は、主に英語のテンプレート文の非常に拘束されたバージョンでそのような構造を読み書きできることが価値があることを発見しました。その後、言語マシンを読みやすくすることができたので、LexとYaccを使ってレクサーとパーサーが言語を読むように構成しました。私が行ったように、私は言語とそのパーサーを拡張して拡張を処理しました。

これは、C++のような広範な言語用の堅牢なコンパイラの非常に長い方法ですが、このルートを下ろす動機を示しています。私は、単純な言語についてのあなたの見解はかなり役に立たないと主張しています。非常に限定された言語であっても、実質的に使用することができます。私は基本的に自分の言語を作るの経験がないものの

0

は、私は新しいものを学習経験の良い量を持っていないので、私はこれを提案することができ -

プログラミング業界では、言語の市場です。言語は、学習と使用のシンプルさ、商業的および法的制約の欠如、現実の状況への適用性、柔軟性、および力に基づいて人気が高まり、衰退する。あなたの言語が一日人気になるようにしたい場合は、これらを試してみてください。

あなた自身のために(多くのコンピュータ科学者がやっているように)おもちゃの言語を設計しているなら、それは興味深い理論的演習であり、それでもかなり有効ですが、かなり広範囲になるとは思わないかもしれません。

3

(ただし、ずいぶん前ですが)コンパイラの作成は、少なくともC++などの言語にとっては非常に大きな仕事です。

多くのことは、物事を容易にするために共謀しています

  1. コンピュータは、より多くのRAMとスピードを持っています。初期のコンパイラを書くことの挑戦の多くは、最小限のメモリで効率的に行うことができました。そのため、Cは1回のパスでコンパイルすることができます。その時点では、ソースファイル全体に収まるだけのメモリが不足している可能性があります。以前は、コンパイラ作成の魔法の多くが、シンボルテーブルの表現と物理的に可能な限り速い構文解析を最適化していたところで、もっと簡単で簡単にできるようになりました。

  2. ベース技術が向上しました。ほとんどの言語には使いやすいパーサライブラリ、高レベルのデータ構造(シンボルテーブルは素敵なハッシュテーブルの実装があれば簡単です)や、コンパイラやインタプリタを簡単に稼働させるためのツールがあります。

  3. GCは遍在しています。今日作成されているほとんどの新しい言語はガベージコレクションされています。これにより、言語の設計が容易になります(詳細なメモリセマンティクスを指定する必要はありません)。同時に、CLRやJVMのようないくつかの既存のGCプラットフォームをターゲットにすることができますので、言語作成者は自分でGCを書く必要はありません。実際には、CLRまたはJVMをターゲットにすると、コンパイラライターとしての仕事がはるかに簡単になります。上位レベルのプラットフォームでは、バイトコードが途中で満たされます。

  4. ほとんどの新しい言語は動的に型指定されています。作成される新しい言語の大部分は動的に型指定されます。それらは多くは設計と実装が容易です。私は、言語設計における課題の大部分が型システムを設計していることを発見しました。同様に、静的言語をコンパイルまたは解釈することは、より困難です。すべてが財産バッグだけであるダイナミックな言語は、驚くほど簡単に起動することができます。

  5. また、コンピュータのRAMとスピードは非常に高くなります。あなたの言語が成功する可能性がある場合は、効率的なマシンコードにコンパイルし、メモリを効率的に使用し、高速に実行する必要がありました。さもなければ、それは非常に遅いでしょう。コンピュータが非常に高速になった今、Rubyのような遅い言語でさえ、多くの実際の使用にはまだ十分に速いです。コンパイラライターとしては、従来どおりの最適化スキルは必要ありません。

それはは、C++、これらの日のような複雑な新しい言語を作っていることは注目にも価値があります。 C++は実際には言語の複雑さの最上位にあります。

関連する問題