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


16

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

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


1
Martin Fowlerのドメイン固有言語をまだ読んだことがありますか?amazon.com/...
ゲイリー・ロウ

@Gary Rowe:ありません。おそらく私が探しているものではないかもしれませんが、それはまともな読書のようです。
ジョンパーディ

参照実装に対する標準の利点は、他の実装が実装の動作から逸脱する可能性がある場所を定義できることです。
バートヴァンインゲンシェナウ

回答:


3

Java言語の仕様は正式で読みやすいものであることがわかりましたが、それは理にかなった構造を持っていると思います。W3C仕様の一部も同様に良い例です。

正式な仕事をすることは、言語の複雑さを抑え、角のケースを見るのに役立ちます。

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


提案のリストは非常に役立ちます。私がやろうとしているのは、同様のリストをブレインストーミングし、チュートリアルのような形式でソートし、EBNF文法などのいくつかの正式な補遺とともに簡単な非公式の仕様を書くことだと思います。また、あなたがアイデアのために言及した仕様をもう一度見ていきます。
ジョンパーディ

7

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

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

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

  1. 彼はあなたが言語を設計する理由について多くの実用的な深さに入ります
  2. 方法の詳細があります(パーサー、字句解析プログラム、言語ワークベンチなど)
  3. クロージャ、注釈、リテラルリスト、動的受信などの概念を処理するために選択した構文をどのように作成できるかについての詳細な実装手順があります。

仕様の作成方法については、対象ユーザーについて考えてください。明らかに、あなたの言語を設計するためにキーボードに指を置く前に、あなたはそれが何を意図しているかについて慎重に考えているでしょう。

JavaScriptに代わる新しいインタープリター言語である場合は、限られたアテンションスパンと即時の結果を求めてWeb開発者に連絡するために、または可能な限り迅速に、非常に自由自在なアプローチが必要になります。

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

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

要するに、それをシンプルに保ち、より多くの人々がそれを使うでしょう。


これをありがとう。私は言語の開発に多くの経験があり、言語をかなり徹底的に文書化することさえありますが、それは一貫して私を得る標準のアイデアです。推奨される読み物を取り上げて、少し実験する必要があるかもしれません。
ジョンパーディ

@Jon Purdy質問に含めることができるオンライン言語の例はありますか?
ゲイリーロウ

現在のプロジェクトの例はまだありません。私は(!私が実際に使用しないもの)作った言語のだけは本当に完全な公共の例は、であるvision-language.sourceforge.net/cgi-bin/Home
ジョン・パーディ

@Jon Purdy Visionはおもしろそう-Velocityのようなものです。余談ですが、インストール方法を示すYouTubeのスクリーンキャストを検討し、小さなWebサイトの例(地元の配管工など)を書くことをお勧めします。これにより、学習曲線が実際に動作し、すぐに利益を得ることができるため、学習曲線がはるかに簡単になります。JSP、Velocity、ASP.Net、Freemarkerなどと比較した場合の利点について話すことができます
ゲイリーロウ

良い考えです; 私は、私は間違いなくフィット1と思うので、私は、(3週目の周り)に多く、最近YouTubeの動画を作ってきました。
ジョン・パーディを

3

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


2

Common LispとHaskellには言語標準があります。RubyとPythonには実装とドキュメントがあります。したがって、言語標準は必要ではないと言いますが、設計している言語の実装が複数あると予想される場合に役立つかもしれません。一方、言語定義の大幅な変更が予想される場合、標準は時期尚早です。


実際、Rubyには、「仕様」と見なすことができる2つのものがあります。現在、最終ドラフト状態にあり、言語仕様(ANSI Common LispおよびISO C ++で作業したことがある)の経験がある一部の人々によって作成されているISO Ruby仕様があります。また、RubySpecプロジェクトがあります。これは、RSpecスタイルの実行可能サンプルのセットであり、人間が読み取れる仕様と、その仕様のマシン実行可能な適合性テストスイートの両方を形成します。
ヨルグWミットタグ

1

仕様は簡潔で、時の試練に耐えられるものでなければなりません

これが、多くの言語標準に使用されているBNFのような抽象化を見る理由です...その簡潔さは、現在のツールの多くが取り残された後もまだ理解されています。

もちろん、単なる文法以上のものがあります。他の人がやったことを見てください... perl6、スキーム、C ...彼らは実装者も気にしている問題に取り組んでいます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.