C#とECMAScriptの仕様の間に読みやすさに大きな違いがあるのはなぜですか?

StackOverflow https://stackoverflow.com/questions/2748757

  •  02-10-2019
  •  | 
  •  

質問

私はECMAScriptの仕様を研究してきましたが、読んで理解するのが非常に難しいことがわかりました。私は常に概念を頭の中に保つためにバックトラックする必要があります。 C#仕様を読むとき、ドキュメントを常に動き回ることなく、言語のコンポーネントを研究することができます。

ECMAScript仕様

C#仕様

役に立ちましたか?

解決

私は定期的に投稿しているのは、C#言語設計委員会とECMAScript技術委員会の両方のメンバーであるSOに投稿しているので、おそらくいくつかの洞察を提供できるでしょう。

まず、C#仕様についての親切な言葉に感謝します。私たちはそれを読みやすくするために一生懸命働いてきました、そして、私たちが成功したことを知っているのは良いことです。

第二に、C#仕様は必ずしもそうではないことに注意してください。 C#2.0仕様は、 補遺 C#1.0仕様へ。ジェネリック、イテレーターブロック、匿名のメソッドは、仕様の多くのセクションに広範囲に影響を与えました。 2.0スペックを読んで、実際の過負荷解像度アルゴリズムを理解するために2つの章の間を飛び回る必要があるのは本当に痛いことでした。 Madsは、C#3.0で膨大な量の編集作業を行い、最初にすべてのC#2.0の変更をスペック内の妥当な場所に統合し、あちこちにジャンプする必要がないようにしました。

第三に、あなたが説明していることの大部分は、2つの仕様の主要な建築家の目標とスタイルの両方の違いの結果です。主にギリシャの手紙で書かれた正式な正しさに関する論文を含む「技術性」のスペクトルを想像してください。 C#仕様を設計して、そのスペクトル上の特定の場所に落ちます。初心者向けプログラマーのチュートリアルになりたくありませんが、初心者C#プログラマーが相談するための合理的なドキュメントになりたいと考えています。アンダースは、彼が「仕様のより高い数学」と呼ぶものを避けたいと具体的に望んでいました。

これは、SPECのターゲットオーディエンスを考えると、C#を学びたいと思っているプロのプログラマーであり、何かが正確に何かの仕組みを調べたいと考えていることを考えると、合理的な目標のセットです。スペックには、これらの2つの選挙区にサービスを提供するために、曖昧なチュートリアルの側面と正確なセマンティック説明の側面があります。

ECMAScript 3 Specの主要な著者であるWaldemar Horwatは、E3 Specの目標がかなり異なり、目標が悪いのではなく、異なる目標を持っていました。 E3仕様の目標は、 数学的に正確です スペクトルの終わり。仕様のすべてのセクションが、各操作の効果がシステムにどのようなものであるかを正確に記述する本質的に擬似コードアルゴリズムで構成されていることに注意してください。

たとえば、E3仕様は、「数学」数とそのバイナリ表現の違いについて説明していることに気付くでしょう。 E4仕様の1つのドラフトは、タイプが値である場合、値のセットとして「タイプ」の素朴な定義にセット理論的な問題があることに注意することさえありました。この種のことは、C#Specで完全に場違いになります。その正確性を確保するために、強力な理論的数学的基盤を持つことを求めていません。 C#Specは「タイプ」を定義することさえありません。読者が(1)実際の目的のためにどのようなタイプがわかっているかを知っているプロデヴァーであるという仮定で書かれています。理論またはカテゴリ理論を設定したことは、「タイプ」の定義の数学的な明確さについて言わなければなりません。

ECMAScriptプロセスの目標は、非常に類似した言語の複数のベンダーが集まって、これらすべての実装の中で共通の基盤にあったものの正確な説明に同意することでした。 E3仕様は、あらゆる種類のチュートリアルになることを意図したものではなく、主に言語とツールを対象としています 実装者, 、言語ではなく ユーザー.

WaldemarのE4仕様はさらに進みました。私が正しく思い出せば、彼は非常に正確でシンプルな「スペック言語」を明確なセマンティクスで指定することから始めました。その後、彼は共通のLISPでその言語の通訳を書きました。それから彼は彼のスペック言語でE4仕様を書きました。その結果、彼ができることです 仕様自体を作業ECMAScriptインタープリターにコンパイルします. 。それはまさに、C#仕様で避けようとしている「より高い数学」のようなものです。これは、あなたが信じられないほど正確で正確になりたい場合、仕様に対する素晴らしいアプローチですが、それはドキュメントを書くためのひどい方法です 言語ユーザー そこから学ぶことができます。

それはあなたの質問に答えますか?

他のヒント

おそらく、2つの言語の仕様の読みやすさは、さまざまな人々のグループによって書かれているため、異なるオブジェクトパラダイムを使用する言語について議論するため、おそらくあなたはおそらくあなたはおそらく違いを経験しています。

JavaScriptの仕様は、数年後に言語が有機的に進化した後、委員会によって書かれました。 C#仕様は、言語が制御された方法で成長している間に、企業エンジニアの小さなグループによって作成されました。

C#はクラス中心のOOPであり、JavaScriptはプロトタイプ中心です。あなたが他方と同じように一方に精通していない場合、特に実装の詳細に入るとき、最初は理解するのが難しいかもしれません。それは必ずしも仕様の明確さと読みやすさの問題を示しているわけではありません。

従来の言語と比較して、JavaScriptは非常に奇妙です。実際、JavaScriptのような人気のある言語はプロトタイプベースではありません。 JavaScriptは完全にオブジェクトベースであり、すべてのオブジェクトは本質的に関連するアレイであり、関数もファーストクラスオブジェクトです。これは通常、言語から見ることを期待するものではありませんが、Ajaxとブラウザサイドのプログラミングの人気を備えたJavaScriptがWebの言語になりました。これらの奇妙な仕様は避けることができたかもしれませんが、JavaScriptは興味深い創造的なコーディングにつながる可能性があると思います。たとえば、閉鎖は、ほとんどの新しい開発者が理解するのに苦労しているものですが、私の経験では非常に有用です。 JavaScriptはCのフレーバーだと思うことがあるという言語のセマンティックは、時々愚か者の開発者ですが、すぐにこれが真実ではないことに気付きます。

私にとってC#は、プログラミング言語の頂点です。それは正しいことであり、学問的な期待と一致しています。 MSがこの言語の主要なドライバーであることは残念です。私のように、None WindowsベースのシステムでC#をサポートするプラットフォームの適切な実装を享受する他の多くの人がいると確信しています(Monoは正しい方向への動きです)。

JavaScriptフレームワークではなくJavaScriptを学びたい場合は、JavaScriptについて直接議論する本に固執することをお勧めします。しかし、あなたが始めようとしていて、javascript @bwawokの本の提案の内と外部についてあまり気にしない場合は、正しい方法です。

さて、あなたはECMAドキュメントに基づいて言語を学ぼうとすることを知っている最初の人です。とにかく、違いは主にスペックを書いている人々のスキルによるものだと思います。 C#は明らかに指定が少し簡単になります(ダイナミック性が低いため - すでに指摘されているように)が、最後に... ... IIRC JavaScriptは委員会(スペックにも書いている多くの人)が委員会ごとに設計されていますが、C#マイクロソフトは最後に1人によって行われましたが、おそらく1-2の著者といくつかのヘルパーがありましたが、最後にはAnders Hejlsbergです(私はその正しさを綴ったことを願っています)。委員会による設計と物事に投票しなければならないことは、文書の最適な「設計」につながる場合があります。

ですから、最後に、それは、一方が他方よりも読むのが難しいさまざまな仕様を書く人々のスキルについてだと思います。

その理由の一部は、リンクする標準が実際にECMAScriptであるためです。 JavaScript、JScript、およびActionScriptはすべてECMAScriptの実装であり、ECMAScriptはそれぞれの共通の部分を含むように書かれています。対照的に、C#は、Microsoftの3人(ECMA-334 Standardによる)によって主に設計されました。

それ以外は、 委員会 それはECMAScriptの基準を書きました。

簡単に言えば、それはおそらく彼らが別の著者によって書かれたからでしょう。 C#仕様はMicrosoftによって書かれました。Microsoftは、それを良好にすることに興味がある(受け入れられるように)書かれていましたが、ECMAScript仕様は言語がすでに使用されていた後に委員会によって書かれました。

まあ最良の部分は、C#があるコンピューターから別のコンピューターに同じように実行されることです(はい、.NETバージョンではわずかな違いがありますが、通常は動作します)。 JavaScriptは、Internet Explorer vs Firefox vs Chrome間で非常に異なります。

たとえば、要素のあるWebページがあります

<input type="text" name="fred" />

そして、あなたはJavaScriptを実行します

document.getElementById("fred")

Internet Explorerはあなたに要素を手に入れます(これは間違った動作ですが、FredのIDには要素はありません)が、Firefoxはあなたにヌルを与えます。

おそらく、これは言語がどのように成長したかのためです。 C#は1社によって作成され、開発者は標準に従うことを余儀なくされました。そうしないと、コードが機能しませんでした。 JavaScriptはさまざまな方法でさまざまなブラウザで実装され、人々はフィットしたように機能を追加または削除または変更することができました。

要約すると、JavaScriptは歴史のために他の言語よりも多くの作業を学ぶ必要があります。 jQueryのような良いライブラリを調べて、ブラウザの違いを抽象化すると、十分に早くそれを手に入れる必要があります。ドキュメントから学ぶことは、言語を学ぶことのほんの一部です...コーディングを行い、それがどのように機能するかを学ぶと、それは理にかなっています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top