Ich höre dieses Wort oft in Sätzen wie "Javascript ist eine sehr ausdrucksstarke Sprache". Bedeutet das nur, dass es nicht viele Regeln gibt, oder hat "expressiv" eine spezifischere Bedeutung?
Ich höre dieses Wort oft in Sätzen wie "Javascript ist eine sehr ausdrucksstarke Sprache". Bedeutet das nur, dass es nicht viele Regeln gibt, oder hat "expressiv" eine spezifischere Bedeutung?
Antworten:
'Expressiv' bedeutet, dass es einfach ist, Code zu schreiben, der sowohl für den Compiler als auch für einen menschlichen Leser leicht zu verstehen ist.
Zwei Faktoren, die für Ausdruckskraft sorgen:
Vergleichen Sie diesen ausdrucksstarken Groovy mit dem weniger ausdrucksstarken Java-Äquivalent:
3.times {
println 'Hip hip hooray'
}
vs.
for(int i=0; i<3; i++) {
System.out.println("Hip hip hooray");
}
Manchmal tauschen Sie Präzision gegen Ausdruckskraft - das Groovy-Beispiel funktioniert, weil es Dinge voraussetzt, die Java explizit angeben lässt.
intSchleifenvariablen in Java ist ein Artefakt von Java. Sie ist im Wesentlichen bedeutungslos und nicht "präziser" als die von Groovy. Das 3.timesist es also nicht.)
expressiveness. Obwohl ich im Allgemeinen auf die Idee gekommen bin, die sehr intuitiv ist, bin ich wunderbar, ob es eine "formale Definition" der Ausdruckskraft der Sprache gibt, und wenn ja, welche "quantitativen Metriken" zur Messung der Ausdruckskraft?
Ich verstehe es so, dass es in der Lage ist , Ideen / Algorithmen / Aufgaben auf einfach zu lesende und prägnante Weise auszudrücken .
Normalerweise verbinde ich eine ausdrucksstarke Sprache mit syntaktischem Zucker, obwohl dies nicht immer der Fall ist. Beispiele in C # für Ausdruck sind:
foreach (anstatt die Iteration explizit zu schreiben)usingAnweisung (anstatt explizit den try / finally zu schreiben)Ein anderes Beispiel wären Generika: Bevor C # Generika erhielt, konnte man die Idee eines " ArrayListnur Zeichenfolgen enthaltenden" im Code nicht ausdrücken . (Sie können es natürlich dokumentieren oder Ihren eigenen StringListTyp schreiben , aber das ist nicht ganz dasselbe.)
Neal Grafter hat einen Blog mit einem guten Zitat zu diesem Thema ...
In meinen Augen ist ein Sprachkonstrukt ausdrucksstark, wenn es Ihnen ermöglicht, eine API zu schreiben (und zu verwenden), die ohne das Konstrukt nicht geschrieben (und verwendet) werden kann.
Ich würde sagen, dass es bedeutet, dass Sie Ihre Gedanken natürlicher im Code ausdrücken können.
Das ist eine schwierige Frage.
Für mich hat es mit der Leichtigkeit zu tun, mit der Sie Ihre Absicht zum Ausdruck bringen können. Dies ist in verschiedenen Sprachen unterschiedlich und hängt auch stark davon ab, was Sie tun möchten. In diesem Bereich sind also Verallgemeinerungen üblich. Es ist natürlich auch subjektiv und persönlich.
Es ist leicht zu denken, dass eine höhere Sprache immer ausdrucksvoller ist, aber ich denke nicht, dass das wahr ist. Dies hängt davon ab, was Sie ausdrücken möchten, dh von der Problemdomäne.
Wenn Sie die Gleitkommazahl mit dem Binärmuster drucken möchten 0xdeadbeef, ist dies in C weitaus einfacher als beispielsweise in Bash. Dennoch ist Bash im Vergleich zu C eine Sprache auf höchstem Niveau. Wenn Sie dagegen ein Programm ausführen und seine Ausgabe in einer Textdatei sammeln möchten, ist dies so einfach, dass es in Bash fast unsichtbar ist, in C jedoch mindestens eine Code-Seite erforderlich ist (unter der Annahme einer POSIX-Umgebung).
Hier ein sehr kontroverser Vergleich:
http://redmonk.com/dberkholz/2013/03/25/programming-languages-ranked-by-expressiveness/
Also, was sind die besten Sprachen nach diesen Metriken?
Wenn Sie die Top 10 basierend auf der Rangfolge nach Median und IQR auswählen, nehmen Sie den Schnittpunkt von ihnen. Der Median und der IQR werden unmittelbar nach den Namen aufgelistet:
Augeas (48, 28): Eine domänenspezifische Sprache für Konfigurationsdateien
Puppet (52, 65): Ein weiteres DSL für die Konfiguration REBOL (57, 47): Eine Sprache für verteiltes Rechnen
eC (75, 75): Ecere C, ein C-Derivat mit Objektorientierung
CoffeeScript (100, 23): Eine übergeordnete Sprache, die zu JavaScript transkompiliert wird
Clojure (101,51): Ein Lisp-Dialekt für funktionale, gleichzeitige Programmierung
Vala (123, 61): Eine objektorientierte Sprache, die von GNOME verwendet wird
Haskell (127, 71): Eine rein funktionale, kompilierte Sprache mit starker statischer Typisierung
Vielleicht kann Ihnen diese Website http://gafter.blogspot.com/2007/03/on-expressive-power-of-programming.html helfen
Kurz gesagt, sagt er : In meinen Augen ist ein Sprachkonstrukt ausdrucksstark, wenn es Ihnen ermöglicht, eine API zu schreiben (und zu verwenden), die ohne das Konstrukt nicht geschrieben (und verwendet) werden kann. Im Zusammenhang mit der von Closures for Java vorgeschlagenen Spracherweiterung scheinen Kontrollabstraktions-APIs von den konkurrierenden Vorschlägen nicht unterstützt zu werden.