0

大学ではコンパイラ理論と文法を専攻していたので、この分野のバックグラウンドは十分にあり (かなり前のことですが)、少なくとも C++ などの言語の場合、コンパイラの作成は非常に重要な作業であることを知っています。

そのため、会社で働く大勢の人々ではなく、個人によって作成されたように見えるプログラミング言語の数が多いことについて、私は混乱しています。たとえば Ruby は、ウィキペディアによると 1 人の人物によって作成されたものです。その言語はおそらく信じられないほど単純なのでわかりませんが、自分で作成した言語がたくさんあるということです。

では、自分の言語 (単純すぎて役に立たないほどではない) を個人として作成し、そのために一生を費やすのではなく、どのようにすればよいのでしょうか?

このテーマに関する優れた本はありますか (コンパイラや一般的な仕様に関するものではありません)。

4

3 に答える 3

3

(かなり前のことですが) 少なくとも C++ などの言語の場合、コンパイラの作成は非常に重要な作業であることを知っています。

物事を簡単にするために、多くのことが共謀しています。

  1. コンピュータには、より多くの RAM と速度があります。初期のコンパイラを作成する上での課題の多くは、最小限のメモリで効率的に実行できるようにすることでした。そのため、C は 1 回のパスでコンパイルできます。その時点では、ソース ファイル全体を収めるのに十分なメモリがなかった可能性があります。以前は、コンパイラー作成の魔法の多くは、シンボル テーブルの表現を最適化し、物理的に可能な限り高速に解析することでしたが、今では、物事をはるかに単純かつ簡単に行うことができます。

  2. 基礎技術が向上しました。ほとんどの言語には、使いやすいパーサー ライブラリ、高レベルのデータ構造 (既に優れたハッシュテーブルの実装がある場合は、シンボル テーブルは簡単です!)、およびコンパイラーまたはインタープリターの起動と実行をはるかに容易にするその他のツールがあります。

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

  4. ほとんどの新しい言語は動的型付けです。作成される新しい言語の大部分は、動的に型付けされます。これらは、設計と実装がはるかに簡単です。言語設計における課題の大部分は、型システムの設計であることがわかりました。同様に、静的言語のコンパイルまたは解釈は、より困難です。すべてが単なるプロパティ バッグである動的言語は、驚くほど簡単に起動して実行できます。

  5. 繰り返しますが、コンピューターはより多くの RAM と速度を備えています。昔は、言語が成功する可能性があるとすれば、効率的なマシン コードにコンパイルし、メモリを効率的に使用し、高速に実行する必要がありました。そうしないと、使用できないほど遅くなります。コンピューターが非常に高速になった今、Ruby のような遅い言語でさえ、多くの実際の用途には十分に高速です。コンパイラの作成者として、以前ほど最適化のスキルは必要ありません。

また、最近では誰もC++ ほど複雑な新しい言語を作成していないことも注目に値します。C++ は、言語の複雑さの頂点に近いところにあります。

于 2010-11-27T19:54:17.057 に答える
1

私は自分自身の言語を作成する道を少し下ってきました。これは、コード コンパイラではなく、要件、分析、および設計構造を表すために始めました。この目的のためには、非常に単純な言語でも役に立ちます。そのような構文を非常に制限されたバージョンの英語 (主に定型文) で読み書きできることは価値があると思いました。その後、言語を機械で読み取れるようにすることが便利になったので、Lex と Yacc を使用して言語を読み取るためのレクサーとパーサーを作成しました。これまで行ってきたように、拡張に対処するために言語とそのパーサーを拡張しました。

これは、C++ のような広範な言語の堅牢なコンパイラにはほど遠いことを認識していますが、この道をたどる動機の 1 つを示しています。単純な言語をまったく役に立たないというあなたの見方は誇張されていると思います。非常に限定された言語でさえ、実質的に役立つ場合があります。

于 2010-11-27T02:24:20.643 に答える
0

私は基本的に自分の言語を作った経験はありませんが、新しい言語を学ぶのに十分な経験があるので、これを提案することができます-

プログラミング業界は言語の市場です。言語は、習得と使用の単純さ、商業的および法的な制限の欠如、現実の状況への適用性、柔軟性、および力に基づいて人気が上下します。いつかあなたの言語を普及させたいのなら、これらを試してみてください。

(多くのコンピューター科学者が行うように)それ自体のためにおもちゃの言語を設計している場合、それは興味深い理論的演習であり、それでも非常に有効ですが、それほど普及するとは思わないかもしれません。

于 2010-11-27T02:58:11.700 に答える