13

私は ECMAScript 仕様を研究してきましたが、非常に読みにくく理解しにくいことがわかりました。概念を頭の中で維持するために、常に後戻りする必要があります。C# の仕様を読んでいると、常にドキュメントを移動しなくても、言語のコンポーネントを学ぶことができます。

ECMAScript 仕様

C# 仕様

4

7 に答える 7

61

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

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

次に、C#仕様が常にそのようになっているとは限らないことに注意してください。C#2.0仕様は、C#1.0仕様の補遺として作成されました。ジェネリックス、イテレータブロック、および匿名メソッドは、仕様の多くのセクションに広範な影響を及ぼしました。2.0仕様を読み、実際の過負荷解決アルゴリズムを理解するために2つの章の間を飛び回らなければならないのは本当に苦痛でした。Madsは、C#3.0で膨大な量の編集作業を行い、最初にすべてのC#2.0の変更を仕様の妥当な場所に統合して、あちこちを飛び回る必要がないようにしました。

第三に、あなたが説明していることの大部分は、2つの仕様の主要なアーキテクトの目標とスタイルの両方の違いの結果です。片方の端にギリシャ文字で主に書かれた形式的な正しさに関する論文と、もう片方の初心者向けの雑誌記事で、さまざまな「技術性」を想像してみてください。C#仕様は、そのスペクトルの特定の場所に該当するように設計されています。初心者プログラマーのチュートリアルではありませんが、初心者のC#プログラマーが参照できる妥当なドキュメントである必要があります。アンダースは、彼が「仕様のより高い数学」と呼ぶものを避けたいと特に望んでいました。

これは、仕様の対象読者を考えると、合理的な一連の目標です。プロのプログラマー、C#を学びたい人、何かがどのように機能するかを正確に調べたい人もいます。仕様には、これら2つの構成要素にサービスを提供するために、あいまいなチュートリアルの側面と正確なセマンティック記述の側面があります。

ECMAScript3仕様の主な作成者であるWaldemarHorwatは、E3仕様に対してかなり異なる目標を持っていました。つまり、より悪い目標ではなく、異なる目標でした。E3仕様の目標は、数学的に正確なスペクトルの終わりにはるかに近づくことでした。仕様のすべてのセクションが、基本的に疑似コードアルゴリズムで構成されており、各操作がシステムにどのような影響を与えるかを、かなり数学的な散文で正確に記述していることに気付くでしょう。

たとえば、E3仕様では、「数学的な」数値とその2進表現の違いについて説明していることに気付くでしょう。E4仕様のドラフトの1つは、型も値である場合、値のセットとしての「型」の素朴な定義には集合論的な問題があることにさえ言及しています。この種のことは、C#仕様では完全に場違いになります。それは、その正確さを保証するための強力な理論的数学的基盤を持つことを求めていません。C#仕様では、「タイプ」さえ定義されていないことに注意してください。読者は、(1)実用的なタイプが何であるかをすでに知っており、(2)知らない、または気にしないプロの開発者であるという前提で書かれています。集合論または圏論は、「」の定義の数学的根拠について何を言おうとしているのか

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

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

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

于 2010-05-01T15:36:15.363 に答える
3

おそらく、2 つの言語の仕様の読みやすさの違いを経験しているでしょう。なぜなら、それらは異なるグループの人々によって書かれ、異なるオブジェクト パラダイムを採用する言語について話し合うからです。

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

C# はクラス中心の OOP であり、JavaScript はプロトタイプ中心です。どちらか一方に慣れていない場合、特に実装の詳細に入るときに、最初は理解しにくい資料がある可能性があります。これは、必ずしも仕様の明確さと読みやすさに問題があることを示しているわけではありません。

于 2010-05-01T04:04:19.350 に答える
1

簡単に言えば、異なる作者が書いたからでしょう。C# 仕様は (受け入れられるように) 良いものにすることに既得権を持っていた Microsoft によって書かれましたが、ECMAScript 仕様は言語が既に使用された後に委員会によって書かれました。

于 2010-05-01T08:10:34.160 に答える
1

ECMA 文書に基づいて言語を学ぼうとしたのは、あなたが初めてです。とにかく、違いは主に仕様を書いている人のスキルによるものだと思います。C# は明らかに指定するのが少し簡単ですが (動的な性質が少ないため - 既に指摘したように)、最後に... ...IIRC JavaScript は委員会によって設計されています (多くの人が仕様にも書いています)、一方 C# は最後に 1 人、おそらく途中で 1 人から 2 人の著者と何人かのヘルパーによって Microsoft によって行われましたが、最後は Anders Hejlsberg です (綴りが正しかったことを願っています)。委員会による設計と、物事に投票しなければならないことは、ドキュメントの「設計」が最適ではないことにつながる場合があります。

ですから、最終的に、一方が他方よりも読みにくいというのは、さまざまな仕様を書いている人々のスキルだと思います。

于 2010-05-01T04:08:53.377 に答える
1

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

それ以外の場合は、ECMAScript 標準を作成した委員会で取り上げる必要があります。

于 2010-05-01T04:19:50.607 に答える
1

従来の言語に比べて、JavaScript は非常に奇妙です。実際、JavaScript のようにプロトタイプ ベースの人気のある言語はそれほど多くありません。JavaScript は完全にオブジェクト ベースであり、すべてのオブジェクトは基本的に連想配列であり、関数もファーストクラス オブジェクトです。これは通常、言語に期待するものではありませんが、Ajax とブラウザー側プログラミングの人気により、JavaScript は Web の言語になりました。これらの奇妙な仕様は回避できたかもしれませんが、JavaScript は興味深いクリエイティブなコーディングにつながると信じています。たとえば、クロージャは、ほとんどの新しい開発者が理解するのに苦労しているものですが、私の経験では非常に便利です。言語のセマンティックは、JavaScript が C のフレーバーであると開発者を騙すことがありますが、すぐにそうではないことに気付きます。

私にとって C# はプログラミング言語の頂点です。それは正しく、学術的な期待に沿っています。MS がこの言語の主要な原動力であることは残念です。私のように、Windows ベース以外のシステムで C# をサポートするプラットフォームの適切な実装を楽しむ人が他にもたくさんいると確信しています (Mono は正しい方向への動きです)。

JavaScript フレームワークではなく JavaScript を学びたいのであれば、JavaScript について直接説明している本を読み続けることを強くお勧めします。ただし、JavaScript を始めようとしていて、JavaScript の詳細についてはあまり気にしない場合は、@bwawok さんからの書籍の提案が正しい方法です。

于 2010-05-01T03:50:17.483 に答える
-4

最良の部分は、C# が 1 つのコンピューターから別のコンピューターに同じように実行されることです (はい、.net バージョンの小さな違いかもしれませんが、一般的には動作します)。Javascript は、Internet Explorer と firefox と chrome の間で非常に異なる動作をします。

たとえば、要素を持つWebページがあります

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

そして、JavaScript を実行します。

document.getElementById("fred")

Internet Explorer は要素を取得しますが (これは間違った動作ですが、ID が fred の要素はありません)、firefox は null を返します。

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

要約すると、JavaScript は歴史があるため、他の言語よりも習得に時間がかかります。JQuery のような優れたライブラリーを調べて、ブラウザーの違いを抽象化してください。すぐにコツをつかめるはずです。ドキュメントから学ぶことは、言語学習のほんの一部にすぎません...コーディングを行って、その仕組みを学ぶと、それは理にかなっています。

于 2010-05-01T03:31:09.940 に答える