web-dev-qa-db-ja.com

プログラミング言語の仕様を作成するにはどうすればよいですか?

私はプログラミング言語の設計をとても楽しんでいます。私の言語プロジェクトとその潜在的なユーザーは、包括的な標準ドキュメントの恩恵を受けると思うことがあります。私は非常に正式な(C++)からかなり非公式な(ECMAScript)までの多くの言語標準を見てきましたが、そのようなドキュメントを分解して整理する方法を実際に理解することはできません。私はテクニカルライティング全般が得意だと思います。

長いチュートリアルのように書くべきでしょうか、それとも正式な数学の論文のように書くべきでしょうか?リファレンス実装と一緒に開発している場合、どうすれば最新の状態に保つことができますか?私はあきらめて、実装とドキュメントを事実上の標準として扱うべきですか?さらに、標準を持つことには本当に大きなメリットがありますか? 必要標準は、言語が不必要に複雑であることを意味しますか?

16
Jon Purdy

私はJava言語仕様が形式的で読みやすいものであることがわかりました、そしてそれは賢明な構造を持っていると思います。W3C仕様のいくつかも同様に良い例であるかもしれません。

正式な作業を行うことで、言語の複雑さを抑え、コーナーケースを確認できます。

見出しのブレインダンプ:ソースエンコーディング、字句解析、基本型、リテラル、演算子、式、単純なステートメント、条件、ループ、関数(定義と呼び出し)、型宣言、モジュール、コンパイル単位、変数スコープ、さまざまな種類の名前解決(例インポート、メソッド)、メモリモデル、副作用、タイピング、同時実行…

3
Tobu

たくさん読んでそれをシンプルに保つ

新しい言語を設計するのは難しいです。とても大変。しかし、それが人気になり、人々がエレガントな方法で経験している問題を本当に解決するならば、最終的に非常に満足します。

コメントで述べたように、以下の理由で Martin Fowlerによるドメイン固有の言語 を読むことをお勧めします。

  1. 彼は、なぜ言語を設計する必要があるのか​​について、多くの実践的な深さを調べます
  2. それを行う方法の詳細があります(パーサー、字句解析器、言語ワークベンチなど)
  3. クロージャー、アノテーション、リテラルリスト、動的受信などの概念を処理するために選択した構文をどのように作成できるかについての詳細な実装手順があります。

仕様の書き方については、聴衆について考えてください。明らかに、キーボードに指を置いて言語を設計する前に、それが何をするのかを慎重に検討します。

JavaScriptに代わる新しいインタープリター型言語である場合、限られた注目のスパンと即時の結果を望み、または可能であればより迅速にWeb開発者に到達するために、非常に自由放任なアプローチが必要になります。

タイタンへの次のミッションで使用する場合、各コンポーネントの動作の正確な正式な証明を示す非常に詳細な仕様が最小のエントリーレベルになります。

したがって、それは簡単なことではありません。仕様に近づくには、言語を作成し、実際にそれらを日常的に使用している人々と協力して、多くの経験を積む方がよいでしょう。あなたが喜んで犠牲者を抱えているなら...えーと...開発者、あなたの言語を学ぶのに時間をかけることができる職場で、彼らは彼らにそれを使用させるために必要なものについてフィードバックを与えることができます。

簡単に言えば、それをシンプルにして、より多くの人々がそれを使うようになるでしょう。

7
Gary Rowe

ワースは多くのプログラミング言語を設計および実装しました。これらのうち、 Oberon および Oberon2 言語の仕様は、完全性、簡潔性、読みやすさで注目に値します。

3
grrussel

一般的なLISPとHaskellには言語標準があります。 RubyとPythonには実装とドキュメントがあります。そのため、言語標準は必要ありませんが、さらに多くの一方で、設計している言語の1つの実装よりも、言語定義の大幅な変更が予想される場合、標準は時期尚早です。

2
Larry Coleman

仕様は簡潔で、時の試練に耐えることができなければなりません

これが [〜#〜] bnf [〜#〜] のような抽象化が多くの言語標準に使用されている理由です...その簡潔さは、現在の多くのツールが使用された後でも理解されます置き去りにした。

もちろん、文法だけではありません。他の人が何をしたかを見てください... Perl6、scheme、C ...彼らは実装者も気にする問題に対処します。

1
Brad Clawsie