Warum gibt es einen großen Unterschied in der Lesbarkeit zwischen den C # und ECMAScript-Spezifikationen?

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

  •  02-10-2019
  •  | 
  •  

Frage

Ich habe das Studium der ECMAScript-Spezifikation und haben festgestellt, dass es extrem schwierig ist, zu lesen und zu verstehen. Ich habe ständig zurückverfolgen in meinem Kopf zu halten Konzepte. Wenn die C # Spezifikation Liest Ich bin in der Lage Komponenten der Sprache zu studieren, ohne um das Dokument ständig in Bewegung.

ECMAScript-Spezifikation

C # Spezifikation

War es hilfreich?

Lösung

Als ich die einzige Person bin regelmäßig auf SO Entsendung, die sowohl Mitglied der Sprache C # Design Ausschuss und dem ECMAScript Fachausschuss war, kann ich wahrscheinlich bieten einige Einblicke.

Zunächst einmal vielen Dank für Ihre freundlichen Worte über die C # Spezifikation. Wir haben sehr hart gearbeitet, um es zu halten lesbar und es ist gut zu wissen, dass wir erfolgreich sind.

Zweitens stelle ich fest, dass die C # Spezifikation war nicht immer so. Die C # 2.0-Spezifikation wurde geschrieben als Nachtrag in dem C # 1.0-Spezifikation. Generics, Iterator Blöcke und anonyme Methoden hatten weit verbreitete Auswirkungen auf viele Bereiche der Spezifikation. Es war ein echten Schmerzen Lesen der 2.0-Spezifikation ist und zwischen zwei Kapiteln zu springen um die reale Überladungsauflösung Algorithmus zu verstehen. Mads hat eine riesige Menge an Bearbeitung Arbeit in C # 3.0 zuerst alle die C # 2.0 Änderungen in einen angemessenen Platz in der Spezifikation zu integrieren, so dass Sie sich ganz über den Platz nicht herumspringen müssen.

Drittens, ein großer Teil von dem, was Sie beschreiben, ist ein Ergebnis der Unterschiede sowohl in Ziel und Stil der wichtigsten Architekten der beiden Spezifikationen. Stellen Sie sich ein Spektrum von „technisch-ness“ mit Papieren über formale Korrektheit an einem Ende weitgehend in griechischen Buchstaben geschrieben, und Zeitschriftenartikel für Anfänger auf der anderen Seite. Wir gestalten die C # Spezifikation an einer bestimmten Stelle auf diesem Spektrum fallen. Wir wollen es nicht ein Anfänger-Programmierer Tutorial sein, aber nicht wollen, dass es ein vernünftiges Dokument für Programmierer Anfänger C # sein, zu konsultieren. Anders gesagt wollte vermeiden, was er „die höhere Mathematik der Spezifikation“.

Dies ist eine vernünftige Reihe von Zielen unserer Zielgruppe für die Spezifikation gegeben: professionelle Programmierer, wollen von denen einige C # lernen, und einige von ihnen wollen genau sehen, wie etwas funktioniert. Die Spezifikation hat vage Tutorial Aspekte und präzise semantische Beschreibung Aspekte, um diese beiden Wahlkreise zu dienen.

Waldemar Horwat, der Hauptautor des ECMAScript 3 spec, hatte ganz andere Ziele für die E3-Spezifikation - nicht schlechte Ziele, aber unterschiedliche Ziele. Das Ziel der E3-Spezifikation war weit mehr in Richtung des mathematisch präzise Ende des Spektrums zu sein. Sie werden feststellen, wie praktisch jeder Abschnitt der Beschreibung im wesentlichen aus Pseudo-Code-Algorithmen bestehen, die gerade in eher Mathe-schwere Prosa beschreiben, was die Wirkung der einzelnen Maßnahmen auf dem System ist.

Sie werden beispielsweise feststellen, dass die E3-Spezifikation spricht über den Unterschied zwischen „mathematischen“ Zahlen und ihren binären Darstellungen. Ein Entwurf der E4-spec ging sogar so weit, zu beachten, dass es mengentheoretische Probleme mit einer naiven Definition von „Art“ als eine Reihe von Werten, wenn Typen auch Werte sind. Dergleichen wäre fehl am Platz in der C # spec vollständig sein; es versucht nicht, eine starke theoretische mathematische Untermauerung zu haben, um seine Richtigkeit zu gewährleisten. Sie werden bemerken, dass die C # spec nirgends auch „type“ definiert - mit der Annahme geschrieben wurde, dass die Leser sein wird pro Devs, die (1) bereits wissen, welche Arten für praktische Zwecke sind, und (2) weder kennen noch Pflege was Mengenlehre oder Kategorie Theorie hat über die mathematische Fundiert jeder Definition von „Art“ zu sagen.

Das Ziel des ECMAScript Prozess war für mehrere Anbieter von hoch ähnlichen Sprachen, zusammen zu kommen und auf eine genaue Beschreibung von einigen, was unter allen diesen Ausführungen in der gemeinsamen Erde war. Die E3-Spezifikation wurde nie ein Tutorial von jeder Art sein sollte, und ist in erster Linie auf der Sprache und Werkzeug richtet Implementierer , anstatt Sprache Benutzer .

Waldemars E4 spec ging sogar noch weiter. Wenn ich mich richtig erinnere, begann er durch eine sehr präzise, ??einfach „spec Sprache“ mit klarer Semantik angeben. Dann schrieb er einen Dolmetscher für diese Sprache in Common Lisp. Dann schrieb er die E4-Spezifikation in seiner spec Sprache. Das Ergebnis war, dass er nur konnte kompiliert die Spezifikation selbst in ein Arbeits ECMAScript-Interpreter . Das ist genau die Art von „höherer Mathematik“, dass wir in der C # Spezifikation versuchen zu vermeiden. Dies ist eine wunderbare Annäherung an Spezifikation, wenn Sie unglaublich präzise und genau sein wollen, aber es ist eine schreckliche Art und Weise, ein Dokument zu schreiben, dass Sprache Benutzer kann aus lernen.

Heißt das, Ihre Frage zu beantworten?

Andere Tipps

Sie sind wahrscheinlich eine Differenz zwischen der Lesbarkeit der Spezifikationen der beiden Sprachen zu erleben, weil sie von verschiedenen Gruppen von Menschen geschrieben wurden, und diskutieren Sprachen, die verschiedene Objekt Paradigmen verwenden.

Die JavaScript-Spezifikation wurde von einem Ausschuß geschrieben, nachdem die Sprache organisch nach mehreren Jahren entwickelt hatte. Die C # Spezifikation, die von einer kleinen Gruppe von Corporate Ingenieuren geschrieben wurde, während die Sprache in einer kontrollierten Art und Weise wurde wachsen.

C # ist die Klasse-centric OOP und JavaScript ist Prototyp-centric. Es ist möglich, dass, wenn Sie nicht so vertraut sind mit einem, wie Sie mit den anderen sind, dann etwas Material schwierig sein kann, zunächst zu verstehen, vor allem wenn es in Details der Implementierung wird. Dass nicht unbedingt auf ein Problem mit der Klarheit und Lesbarkeit einer Spezifikation.

Im Vergleich zu herkömmlichen Sprachen JavaScript ist sehr seltsam. In der Tat gibt es nicht allzu viele gängige Sprachen, wie JavaScript sind Prototyp basiert. JavaScript ist vollständig objektbasiert und alle Objekte sind im Wesentlichen assoziativer Arrays mit Funktionen zu First-Class-Objekt zu sein. Dies ist normalerweise nicht, was man erwarten würde von einer Sprache zu sehen, aber mit Popularität von Ajax und Browser-Seite Programmierung JavaScript, um die Sprache des Web worden ist. Während diese seltsamen Spezifikationen hätte vermieden werden können, glaube ich, JavaScript zu einigen interessanten und kreativen Codierung führen kann. Verschlüsse sind zum Beispiel der Sache, die die meisten neuen Entwickler kämpfen, um zu verstehen, aber in meiner Erfahrung sind sie sehr nützlich. Die Semantik der Sprache manchmal Narren Entwickler zu denken JavaScript ein Aroma von C ist, aber bald das sie erkennen, nicht wahr zu sein.

Für mich C # ist die Spitze Sprachen zu programmieren. Es ist richtig, und inline mit akademischen Erwartungen. Es ist eine Schande, dass MS die primären Treiber dieser Sprache ist. Wie ich ich bin sicher, es gibt viele andere, die eine ordnungsgemäße Durchführung eine Plattform mit Unterstützung für C # genießen würden auf keinem Windows-basiertes System (Mono ist ein Schritt in der richtigen Richtung).

Wenn Sie daran interessiert sind JavaScript zu lernen und kein JavaScript-Framework, dann schlage ich wirklich Stick mit Büchern, die direkt JavaScript diskutieren. Allerdings, wenn Sie und nicht viel über die Ins und Outs von JavaScript @bwawok Vorschlag der Bücher beginnen beabsichtigen, zu kümmern ist der richtige Weg zu gehen.

Nun, du bist der erste Mensch, den ich kenne versuchen, eine Sprache auf den ECMA Dokumente, zu lernen. Wie auch immer, ich würde sagen, dass der Unterschied vor allem aufgrund der Fähigkeit ist, der Menschen, die Spezifikationen zu schreiben. C # ist offensichtlich ein wenig leichter zu spezifizieren (aufgrund der weniger dynamischen Natur - wie bereits erwähnt), aber am Ende ... ... IIRC JavaScript ist Design von Ausschuss (viele Menschen auch auf dem spec Schreiben), während C # von Microsoft von einer Person am Ende, vielleicht mit 1-2 Autoren auf dem Weg und einige Helfern fertig war, aber am Ende ist es ist Anders Hejlsberg (hoffe ich, dass richtig geschrieben). Entwerfen von Ausschuss und mit zur Abstimmung über die Dinge manchmal zu weniger optimalen „Design“ eines Dokuments führen.

Also, am Ende denke ich, es über die Fähigkeit der Menschen ist es, die unterschiedlichen Spezifikationen zu schreiben, dass man härter ist als das andere zu lesen.

Ein Teil des Grundes ist, dass der Standard Sie verknüpfen ECMAScript ist eigentlich. JavaScript, JScript und Actionscript sind alle Implementierungen von ECMAScript und ECMAScript geschrieben wurde, um die gemeinsamen Teile jedes zu umfassen. Im Gegensatz dazu wurde von drei Personen in erster Linie C # entwickelt (nach dem ECMA-334-Standard) bei Microsoft.

Other than that, würden Sie es nehmen müssen, um sich mit der Ausschuss , die ECMAScript-Standards geschrieben.

Einfach gesagt, es ist wahrscheinlich, weil sie von verschiedenen Autoren geschrieben wurden. Der C # spec wurde von Microsoft geschrieben, die es gut bei der Herstellung ein begründetes Interesse hatten während der ECMAScript-Spezifikation wurde von einem Ausschuß geschrieben (so dass sie angenommen werden würden), nachdem die Sprache bereits in Gebrauch war.

Nun, der beste Teil ist, wird C # von einem Computer zum anderen laufen die gleichen (ja vielleicht kleine Unterschiede in .net-Versionen, aber Sachen verhalten sich im Allgemeinen). Javascript wird sehr unterschiedlich zwischen dem Internet Explorer vs Firefox vs Chrom ausgeführt werden.

Zum Beispiel haben Sie eine Webseite mit einem Element

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

Und Sie laufen JavaScript

document.getElementById("fred")

Internet Explorer finden Sie das Element erhalten (auch wenn dies falsch Verhalten, gibt es kein Element mit einer ID von fred), aber firefox geben Ihnen einen null.

Wahrscheinlicher als nicht, ist dies, weil, wie die Sprachen wuchsen. C # wurde von 1 Unternehmen und Entwickler gemacht wurden gezwungen, die Standards zu folgen, oder ihr Code nicht funktionieren würde. JavaScript wurde in vielen verschiedenen Browsern auf unterschiedliche Weise umgesetzt werden, und die Menschen waren frei hinzuzufügen oder zu entfernen oder zu ändern Funktionen, wie sie es sahen.

Insgesamt nimmt JavaScript mehr Arbeit als andere Sprachen zu lernen, weil es Geschichte. Blick in eine gute Bibliothek wie JQuery zu abstrahieren den Browser-Unterschiede, und Sie sollten den Dreh raus zu schnell genug bekommen. aus einem Dokument zu lernen, ist nur ein kleiner Teil eine Sprache zu lernen ... Sie einige Codierung und lernen, wie es funktioniert, und es wird Sinn machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top