Einer meiner Professoren sagt, "die Syntax ist die Benutzeroberfläche einer Programmiersprache", Sprachen wie Ruby sind gut lesbar und werden immer besser, aber wir sehen viele Programmierer, die mit C \ C ++ produktiv sind, da es für Programmierer wirklich wichtig ist, dass die Syntax stimmt sollte akzeptabel sein?
Ich würde gerne Ihre Meinung dazu erfahren.
Haftungsausschluss: Ich versuche nicht, ein Argument zu beginnen. Ich dachte, das ist ein gutes Diskussionsthema.
Update: Dies stellt sich als gutes Thema heraus. Ich bin froh, dass Sie alle daran teilnehmen.
programming-languages
syntax
Saif al Harthi
quelle
quelle
Antworten:
Ja tut es. Wenn Sie Zweifel haben, nehmen Sie APL oder J oder Brainfuck oder sogar schlicht und einfach Lisp oder Forth und versuchen Sie, jedes nicht ganz triviale Programm zu verstehen. Dann vergleiche zB mit Python.
Vergleichen Sie dann dasselbe Python (oder Ruby oder sogar C #) mit Dingen wie Cobol oder VB6.
Ich versuche nicht zu sagen, dass haarige Syntax schlecht und natürlichsprachliche Syntax unter allen Umständen gut ist. Aber obvoiusly Syntax macht einen großen Unterschied. Alles in allem können Sie alles in der schönsten Programmiersprache schreiben, die Sie auch als Turing-Maschinenprogramm schreiben können - aber normalerweise wollen Sie das nicht, oder?
quelle
In der Praxis denke ich, dass es wichtig ist. Die Lesbarkeit wurde bereits oben erörtert. Ein weiteres Problem könnte sein, wie viele Tastenanschläge erforderlich sind, um eine Idee / einen Algorithmus auszudrücken. Ein weiteres Problem ist, wie einfach es ist, dass einfache Tippfehler für das menschliche Auge schwer zu fassen sind und wie viel Unheil sie anrichten können.
Ich habe es auch in einigen Zusammenhängen als nützlich empfunden, Codefragmente über ein anderes Computerprogramm zu analysieren und / oder zu generieren. Die Schwierigkeit, die Sprache zu analysieren und / oder richtigen Code zu generieren, wirkt sich direkt darauf aus, wie viel Aufwand erforderlich ist, um solche Tools zu erstellen / zu warten.
quelle
Ich glaube, Ihr Professor bezieht sich auf synthetischen Zucker .
Was also Ihr Professor andeutet, ist, dass jeder Code / jede Syntax, die in einer Programmiersprache geschrieben ist, in anderen Sprachen genauso oder sogar in derselben Sprache ausgedrückt werden kann.
Robert Martin, der sich am Strukturierten Programmiersatz orientiert , hat in seiner Keynote auf der RailsConf 2010 erläutert , was Programmierer grundsätzlich mit Programmiersprachen tun : Robert Martin (youTube-Video, siehe nach 14 Minuten, obwohl ich das Ganze empfehle):
Das ist alles, was Programmierer von einer Programmiersprache zur nächsten tun, nur in einer anderen Syntax oder Benutzeroberfläche. Ich vermute, Ihr Professor hat das verstanden, wenn er / sie abstrakt über Programmiersprachen spricht.
Im Wesentlichen spielt die Syntax also keine Rolle . Wenn Sie jedoch spezifisch sein möchten, sind offensichtlich bestimmte Sprachen und Syntax besser für bestimmte Aufgaben geeignet als andere, wobei Sie argumentieren könnten, dass Syntax von Bedeutung ist.
quelle
Ja und nein.
Die Syntax hat verschiedene Aspekte.
Die Lesbarkeit wurde bereits erwähnt.
Expressivität ist ein interessanter Fall. Ich werde Funktionsübergabe als Beispiel verwenden, weil es eine Art Wendepunkt von semantischem / syntaktischem Schmerz ist.
Nehmen wir zum Beispiel C ++. Ich kann eine Funktion erster Ordnung folgendermaßen erstellen:
Diese besondere Redewendung wird häufig in Stepanovs Elements of Programming verwendet .
Auf der anderen Seite kann ich es in Common Lisp mit so etwas wie imitieren diese :
Oder in Perl -
Oder in Python -
Diese haben im Wesentlichen den gleichen semantischen Inhalt, obwohl das C ++ - Beispiel einige Typmetadaten enthält. Welche Sprache drückt die Idee aus, eine Funktion höherer Ordnung am besten zu übergeben? Common Lisp macht kaum eine syntaktische Variation. In C ++ muss eine Klasse erstellt werden, um die Funktion auszuführen. Perl ist ziemlich unkompliziert, wenn es darum geht, ein gewisses Maß an Differenzierung vorzunehmen. Python auch.
Welcher Ansatz passt am besten zur Problemdomäne? Welcher Ansatz kann die Gedanken in Ihrem Kopf am besten mit der geringsten Impedanzinkongruenz ausdrücken?
Parsability ist - in meinen Augen - eine große Sache. Insbesondere beziehe ich mich auf die Fähigkeit der IDE, die Sprache zu analysieren und zu zerlegen, ohne Fehler zu machen. Neuformatierung ist nützlich. Durch Token getrennte Sprachen lassen sich in der Regel gut analysieren - Ruby / C / Pascal usw.
Bedenken Sie jedoch, dass große Systeme aller Art mit jeder ernsthaften Sprache erstellt wurden, um Probleme der realen Welt zu lösen. Obwohl Syntax ein Hindernis darstellt, um einige Dinge auszudrücken, handelt es sich um ein Umgehungsproblem. Turing Äquivalenz und das alles.
quelle
Syntax ist auf jeden Fall wichtig, obwohl Sie es eher bemerken, wenn es nicht intuitiv ist und Fehler fördert. Zum Beispiel der berüchtigte Witz "Der letzte Käfer der Welt":
quelle
if(RED = AlertCode)
niemals kompilieren, da RED konstant ist (oder sein sollte!)LaunchNukes
Prozedur abgerufen und nie aufgerufen. Krise abgewendet!RED
ist. Wenn es 0 ist, wirdLaunchNukes()
es niemals aufgerufen.Die Syntax spielt eine Rolle, und ich kann Ihnen zwei unterstützende Beispiele nennen: Dylan, ein Lisp mit einer konventionelleren Syntax, und Liskell, ein Haskell mit einer Lisp-ähnlichen Syntax. In jedem Fall wurde eine Variante der Sprache vorgeschlagen, die genau dieselbe Semantik, jedoch eine völlig andere Syntax aufwies.
Im Fall von Dylan glaubte man, dass der Wegfall von s-Ausdrücken zugunsten von etwas Konventionellerem dazu beitragen würde, ein breiteres Spektrum von Programmierern anzulocken. Es stellte sich heraus, dass die Syntax nicht das einzige war, was Programmierer daran hinderte, Lisp zu verwenden.
Im Fall von Liskell wurde angenommen, dass die Verwendung von s-Ausdrücken die Verwendung von Makros erleichtern würde. Es stellte sich heraus, dass Makros in Haskell nicht unbedingt erforderlich sind, sodass auch dieses Experiment nicht funktioniert hat.
Hier ist die Sache: Wenn die Syntax für niemanden von Bedeutung wäre, wäre kein Experiment ausprobiert worden.
quelle
Die Antwort könnte darin bestehen, das, was "wichtig" ist, in Computerfaktoren und menschliche Faktoren zu trennen . Es gibt viele menschliche Faktoren in der Syntax:
Was den Computer betrifft, ist die einzige Frage der Syntax, ob es Unklarheiten gibt, die gelöst werden müssen, und wie lange es dauert, den Code beim Kompilieren / Interpretieren zu token / parsen - und das nur in diesem Fall von letzterem, wo der Aufwand für das Parsen ein bedeutendes Problem ist.
Das könnte der Grund sein, warum Sie auf diese Frage immer eine "Ja und Nein" -Antwort bekommen - weil es zwei Aspekte gibt.
quelle
Ohne Syntax hätten wir keine gemeinsame "Vorlage" , mit der wir auf menschlicher Ebene die Absicht eines Codeblocks kommunizieren könnten. Die Syntax bietet ein gemeinsames Framework, mit dem Compiler standardisiert werden können. Methoden können geteilt werden; Wartung kann vereinfacht werden.
quelle
Ich denke, was wirklich wichtig ist, ist der API-Zugriff und die Verfügbarkeit von Low-Level-Funktionen (wie Speichersteuerung und Sperren) bei Bedarf. Die meisten anderen Sprachen sind mit diesen Funktionen ausgestattet. Das Problem ist, wenn Sie zusätzliche Funktionen benötigen, müssen Sie häufig eine Sprache wie C verwenden, um diese zu implementieren. Und es ist umständlich, C mit der von Ihnen verwendeten Sprache zu verbinden.
Für alles außer Webentwicklung (und Mathematik) habe ich festgestellt, dass C / C ++ immer noch DIE Sprache eines Betriebssystems und einer Anwendung ist. Es wird die meiste Zeit für echte plattformübergreifende Anwendungsentwicklung mit mehreren Threads und Preforming unterstützt. Und die Syntax von C ist in Ordnung. Einfach sehr einfach und relativ ausführlich. Amazing Syntax spielt eigentlich keine Rolle. Leistung und API-Verfügbarkeit müssen wir alle mit dem Code anderer Leute (der meistens in C oder seinen Derivaten geschrieben ist) kommunizieren.
quelle
Syntax ist auf jeden Fall wichtig. Es ist äußerst hilfreich, wenn die Sprachsyntax so flexibel ist, dass Sie eine bequeme und lesbare domänenspezifische Sprache für Ihre Anwendung erstellen können. Wenn Sie dies bezweifeln, stellen Sie sich vor, Algebra-Probleme in prosaischem Latein zu machen, wie es vor dem 18. Jahrhundert gemacht wurde, oder stellen Sie sich vor, Sie machen Kalkül ohne die jetzt bekannte Leibniz-Notation. Sicher, ein Kalkültext ist für einen Anfänger nicht lesbar, aber mit der Übung können wir Kalkül und die Leibniz-Notation verwenden, um schnell eine Klasse von Problemen zu lösen, die Seiten der Mathematik mit klassischen Methoden erforderten. Das Programmieren ist nur ein weiteres Stück Mathematik. Eine praktische Schreibweise in der Nähe der Problemdomäne kann einen enormen Unterschied in der Produktivität bewirken.
quelle
Hier ist ein Programm, das die Fakultät von 6 berechnet:
Die Syntax ist minimal:
Es scheint eine verbreitete Überzeugung zu sein, dass die Syntax eine Sprache schwierig macht. Wie so oft bei weit verbreiteten Überzeugungen ist genau das Gegenteil der Fall.
Beachten Sie, dass die LISP-Syntax (wenn überhaupt) nur lesbar ist, da sie viel mehr Syntax als die oben genannten enthält. Also, wenn LISP-Fans Ihnen sagen, dass "Syntax keine Rolle spielt", bitten Sie sie, konsequent zu sein und SKI-Kalkül zu versuchen. Sie müssen zugeben, dass eine Bit-Syntax gar nicht so schlecht ist.
quelle
Ich denke nicht, dass es über persönliche Vorlieben hinaus wichtig ist. Wenn alle Dinge (Leistung, Fähigkeiten usw.) gleich sind, kann ich sehen, warum man einer Sprachsyntax mehr Gewicht beimisst, sich aber dafür entscheidet, die Leistung von Sprachen wie c / c ++ oder einer anderen Sprache, die für den Job besser geeignet ist, zu übertreffen Syntax scheint eine schlechte Idee zu sein.
quelle
Ja, Syntax ist wichtig, allerdings nur für die Lesbarkeit. Vergleichen Sie:
(Ja das ist Python) mit
(Ja, das ist eine Sprache, die ich gerade erfunden habe.) Beide würden genau dasselbe tun, aber die Syntax ist anders und Python ist leichter zu lesen. Also ja, die Syntax ist definitiv wichtig. Auch "syntaktischer Zucker" zählt.
Ist leichter zu lesen als
quelle
Ja, sicher.
Wenn Sie eine große Flamme auslösen möchten, fragen Sie die Leute, wo sie die öffnende Klammer in C-ähnlichen Sprachen ablegen. ich meine
VS
oder sogar VS
Und das ist genau die gleiche Sprache! Fragen Sie sie auch nach Leerzeichen, wo sie sie platzieren (Funktionsname und Klammer, Operatoren usw.).
1000 Antworten sind garantiert!
quelle
Syntax spielt eine Rolle. In der heutigen Zeit würde ich jedoch sagen, dass es fast ausschließlich auf die Lesbarkeit und nicht wirklich auf die Anzahl der erforderlichen Tastenanschläge ankommt. Warum?
Das heißt, wenn es zu ausführlich ist, kann es an den Punkt gelangen, an dem es die Lesbarkeit beeinträchtigt. Ich würde lieber etwas sehen wie:
Zu:
... jeden Tag!
quelle
Die Syntax ist für diejenigen, die sie lernen, von Bedeutung. Je niedriger die Eintrittsbarriere, desto populärer könnte die Sprache anfangs sein. Aber wenn die Sprache schwierig oder unmöglich ist, sich selbst reich und prägnant auszudrücken, wird sie zunehmend an Popularität verlieren.
Sehr knapp und undurchsichtig (Perl) ist genauso schlecht wie zu wortreich und wortreich (AppleScript).
Es muss ein Gleichgewicht, eine niedrigere Eintrittsbarriere, eine hohe Produktivität und eine einfache Wartung geben.
quelle
Zu berücksichtigen ist auch, dass Programmiersprachen mit besserer Syntax einfacher zu analysieren sind, wodurch der Compiler einfacher zu schreiben, schneller und weniger fehleranfällig ist.
quelle
parse.y
in Ruby sind anderer Meinung. Es gibt einen Grund, warum jede einzelne der 7 produktionsbereiten Ruby-Implementierungen, die aktuell oder in Kürze verfügbar sind, denselben Parser verwendet, und jede einzelne Ruby-Implementierung, die jemals versucht hat, einen eigenen Parser zu entwickeln, ist fehlgeschlagen.Einfach ausgedrückt: Die Syntax als solche spielt keine Rolle. Die Semantik, die Sie damit ausdrücken können, spielt eine Rolle.
quelle