Ausdruckskraft wird von Wikipedia definiert als:
Lassen Sie uns diese Seite noch einmal lesen. Eines der ersten Dinge, die zu beachten sind, ist, dass dort "Sprache" und nicht "Programmiersprache" steht und die meisten Beispiele keine Programmiersprachen sind. Das erste Beispiel ist ein Vergleich von OWL2 EL und OWL2 RL, die beide Ontologie sind Sprachen.
Man kann das Konzept auf Programmiersprachen anwenden, aber auch auf Pattern-Matching-Sprachen, Markup-Sprachen, Abfragesprachen, visuelle Stylesheet-Sprachen, reguläre Ausdrücke (und alle regulären Sprachen, auf die sie sich beziehen) und so weiter. Man kann sogar auf die Ausdruckskraft natürlicher Sprachen wie Englisch verweisen, was oft sehr informell, aber mit größerem Ernst bei der Betrachtung der Probleme im Zusammenhang mit der Verarbeitung natürlicher Sprachen geschieht.
Beziehen sich "Ideen" auf die Dinge (Operationen, Strukturen, Algorithmen usw.), die wir mit der Maschine kommunizieren können? Oder bezieht es sich auf die "menschlichen" Konzepte, die erfasst und mit der Sprache an andere Menschen kommuniziert werden können?
Es bezieht sich auf das, was in dieser Sprache ausgedrückt werden kann und als eine Sache für sich betrachtet wird.
Beispiel: (In meinen Beispielen verwende ich JavaScript, da Ihre Frage darauf hinweist, dass es eine der Sprachen ist, die Sie kennen.) Beachten Sie die Javascript-Anweisung:
var x = 3 + 4;
Dies bedeutet, dass die Wertsumme von 3 und 4 berechnet wird und der Wert einer Beschriftung x
in einem bestimmten Namespace-Bereich zugeordnet wird.
Wenn wir alle Computer der Welt zerstören und diesen Code auf ein Stück Papier schreiben würden, würde es bleiben, dass es in Javascript immer noch dieselbe Bedeutung hat. Wir wären nicht in der Lage, solchen Code für irgendetwas auszuführen, aber die abstrakte Definition der Sprache ist immer noch etwas, worüber wir sprechen könnten.
Das mag pedantisch erscheinen, aber es ist eigentlich ziemlich wichtig, dass Sprachen Dinge sind, über die abstrakt argumentiert werden kann, ohne die realen Computer zu berücksichtigen. Zum einen sind die Leute, die über theoretische Aspekte von Computersprachen nachdenken, die in der Praxis noch nicht realisierbar waren, einer der Faktoren, die uns dahin gebracht haben, wo wir heute sind. Computer brauchen Informatik, aber Informatik braucht keine Computer, nur die Idee einer Berechnung.
Natürlich benutzen wir Computer in der realen Welt, und heutzutage verwenden viele Leute sie in der Praxis, anstatt einige Spezialisten, die sie theoretisch diskutieren. Auf der Seite, auf die Sie verlinkt haben, heißt es:
Der Ausdruck Ausdruckskraft kann mit einer Reihe von Bedeutungen verwendet werden. Es kann ein Maß für die Ideen bedeuten, die in dieser Sprache ausgedrückt werden können:
Der erste Sinn dominiert in Bereichen der Mathematik und Logik, die sich mit der formalen Beschreibung von Sprachen und ihrer Bedeutung befassen, wie der formalen Sprachtheorie, der mathematischen Logik und der Prozessalgebra.
In informellen Diskussionen bezieht sich der Begriff oft auf den zweiten Sinn oder auf beides. Dies ist häufig bei der Diskussion von Programmiersprachen der Fall. Es wurden Anstrengungen unternommen, um diese informellen Verwendungen des Begriffs zu formalisieren
Von diesen beiden Verwendungszwecken bezieht sich der praktische Einfluss des ersten Begriffs ausschließlich auf das, was an den Computer übermittelt werden kann.
Die zweite bezieht sich mehr auf das menschliche Verständnis sowohl beim Lesen als auch beim Schreiben, obwohl der Grad, in dem es dies tut, zwischen den Verwendungen sehr unterschiedlich ist, da sie informell sind und als solche nicht genau definiert sind.
Wenn wir zum Beispiel eine Sprache wie JavaScript verwenden und den Variablennamen eine seltsame Einschränkung auferlegen, zum Beispiel, dass Variable eine 8-stellige Zahl sein muss, der ein Unterstrich vorangestellt wird /^_[0-9]{8}$/
, verlieren wir die Ausdruckskraft?
Durch die formale Definition haben wir keine Ausdruckskraft verloren: Wir sind auf 100.000.000 Variablen beschränkt, aber wenn es wirklich nötig wäre, könnten wir dies umgehen, indem wir Objekte erstellen, die mehr Variablen im neu erstellten Namespace enthalten. Als solches könnte jedes Programm, das heute in Javascript geschrieben ist, in dieser neuen Form umgeschrieben werden, so dass sie gleichermaßen aussagekräftig sind.
Nach der informellen Definition haben wir einiges verloren, aber wie viel davon abhängt, wie informell wir sind, was sich ändern wird, da man wiederum nicht sagen kann, was "die Regel" für eine informelle Verwendung ist. Wir könnten sagen, wir haben ein kleines Stück verloren, weil Programme mit mehr als 100.000.000 Variablen im selben Namespace über eine einfache Substitution hinaus neu geschrieben werden müssen. Eine noch informellere Verwendung würde sich wiederum auf die mentale Auswirkung derartiger unbeholfen variabler Namen auf die Gesamtheit der Menschen beziehen.
Es ist auch erwähnenswert, dass die Leute informell Dinge betrachten, die überhaupt nicht Teil der Sprache sind. Betrachten Sie die Änderungen in Javascript von der Erstellung bis heute.
Die formalste Definition besagt, dass die Ausdruckskraft ziemlich unverändert geblieben ist. Immerhin war Turing am Anfang komplett.
Durch eine informellere Definition ist es in bestimmten Dingen wie der Array-Manipulation, der Ausnahmebehandlung und (vielleicht am allermeisten) der Einbeziehung regulärer Ausdrücke erheblich ausdrucksvoller geworden. Diese führen nichts aus, was zuvor mit Javascript nicht möglich war, obwohl sie oft in wenigen Zeilen und einer Ausführungszeit von weniger als einer Sekunde ausgeführt werden können, die kilobyte Code zum Schreiben in Javascript1.0 und eine lange Zeit zum Ausführen benötigt.
Durch eine viel informellere Definition wieder die Änderung von Javascript's erstem Gebrauch in Browsern (in der Lage, die Werte von Formulareingaben zu ändern, document.write
während die Seite zuerst analysiert wird und an einen neuen Ort verschoben wird oder in der Geschichte vorwärts oder rückwärts geht, aber hübsch Vieles andere) dazu ist heute (in der Lage, fast alles auf der Seite zu ändern, einschließlich der Daten von Serveraufrufen) absolut immens, obwohl sich das meiste nicht auf Javascript bezieht, sondern auf die erstellten Objektmodelle und APIs verfügbar, anstatt die Sprache (z. B. VBScript im IE profitiert von diesen Änderungen gleichermaßen).
Meiner Meinung nach ist diese letzte Verwendung so informell, dass sie nicht wirklich korrekt ist, aber das ist das Problem bei informellen Definitionen.
Durch die formale Definition ist es wirklich überhaupt nicht ausdrucksvoller geworden.