4

Wikipidea によると、Perl にはその仕様のリファレンスとして使用される支配的な実装があり、C 言語は標準の ANSI ISO によって指定されています。

標準を一行も読まずに C 言語を学んだのですが、それは普通ですか?

標準 (つまり自然言語文書) がどのように支配的な実装を参照することなくプログラミング言語を記述できるかを知りたいです。

4

4 に答える 4

7

仕様からプログラミング言語を学ぶ人を見つけることは非常にまれです。この仕様は主に、コンパイラの作成者(正確さを保証するために一言一句それを遵守する必要がある)と、その言語で合法であるものの最終的な決定者を対象としています。ほとんどの言語仕様は非常に緻密で技術的であり、言語でのプログラミングを学ぶのに良い方法ではありません。多くの場合、言語の非常に上級のユーザーだけが実際に仕様を読みます。

また、リファレンス実装に関して定義されている言語はごくわずかです。ほとんどの言語は、いくつかの抽象的な実行環境に関連して定義されています。たとえば、C++仕様では次のように述べられています。

この国際規格のセマンティック記述は、パラメーター化された非決定論的抽象マシンを定義します。この国際規格は、適合実装の構造に要件を課していません。特に、抽象マシンの構造をコピーしたりエミュレートしたりする必要はありません。むしろ、以下で説明するように、抽象マシンの観察可能な動作を(のみ)エミュレートするには、準拠する実装が必要です。

言い換えると、C ++仕様は、C++プログラムが純粋に理論的な意味でどのように動作する必要があるかを記述しています。これにより、仕様の作成者は言語をどのように定義するかについて大きな余裕ができます。たとえば、実際にどのように実装する必要があるかは言わずに、「オブジェクト」や「ポインタ」について話すことができます。C ++がどのように動作するかを言う必要はありません。マシンを自由に動作するように定義し、実際のコンパイラ作成者に任せて、その抽象マシンを物理マシンに変換できるからです。

一部の言語は仮想マシンに関して定義されています(この良い例はJavaです)。彼らは、Javaプログラムが仮想マシンとどのように相互作用するかを言うことによって、その仮想マシンに関するJavaプログラムの動作について話し、VM実装の詳細をVM実装者に任せることができます。

MLなどの他の言語には、純粋に数学的な定義があります。言語のセマンティクスは、状態間の抽象的な数学的変換として記述されます。つまり、言語が参照コンパイラに対して定義されている場合、簡単に表示できないMLのプロパティを証明することができます。

要約すると、言語仕様は複雑なドキュメントであり、実際に読むプログラマーはほとんどいません。これらは主にコンパイラの作成者向けであり、通常、マシンを考慮しない抽象的な用語でプログラムを定義します。このように、正式な説明をマシン操作に変換するだけで、任意のマシンで準拠した実装を行うことができるため、言語を移植可能な方法で定義できます。

お役に立てれば!

于 2011-03-05T11:29:15.223 に答える
5

ほとんどのプログラミング言語は、標準または言語リファレンス/設計ドキュメント (存在する場合) を読まずに学習します。

標準は形式的に指定できます。つまり、チューリング完全であることが数学的に証明できる非常に厳密な方法で指定できます。

于 2011-03-05T11:21:12.663 に答える
3

標準を読まずにC(およびC ++などの同様に定義された言語)を学習することは完全に正常です。

標準ドキュメントの言語は、プログラマーではなくコンパイラーの作成者を対象とし、アクセス可能ではなく信頼できるように設計された、意図的な衒学的なものとして説明されることがよくあります。

プログラマー向けの本など、ワンステップで削除されたソースから言語を学ぶ方がはるかに簡単です。もちろん、作者は自分が説明していることが標準に従って正しいことを確認する必要があります。

いくつかの質問を解決するために利用可能な標準があると便利であると主張する人もいます。私はそれを試していませんが、通常は正式な標準化システムを通過していない、無料で入手できる「言語レポート」ドキュメントのいくつかを超えています(したがって、おそらくもう少しアクセスしやすく、少し衒学的ではありません)。

ほとんどの場合、標準関連の質問がある場合は、ここで回答を検索することをお勧めします(それが失敗した場合は、質問してください)。

于 2011-03-05T11:28:32.787 に答える
1

標準(つまり自然言語ドキュメント)が、主要な実装を参照せずにプログラミング言語をどのように記述できるかを知りたいです。

これが私がSQLを学んだ方法です。私は標準的なものを学びました。悪い面は、別のDBMSを使用するときはいつでも、そのSQLフレーバーの違いを学習する必要があることです。幸いなことに、SQLの最も一般的な部分はどこでも同じようです。

標準(つまり自然言語ドキュメント)が、主要な実装を参照せずにプログラミング言語をどのように記述できるかを知りたいです。

良い基準は、実際には単なる別の自然言語文書ではなく、かなり正式な文書です。法律は単なる自然言語の文書だと思いますか?

標準の1行を読まずにC言語を学びましたが、それは正常ですか...?

はい。ええと...はい、実際に何かをコーディングしたいのなら。

于 2011-03-05T11:29:15.223 に答える