Ich denke, wenn Sprachen als die gleichen wie kommerzielle Software betrachtet werden, besteht immer die Notwendigkeit, neue Funktionen hinzuzufügen, um neue Versionen zu rechtfertigen.
Kann es Sprachen geben oder gibt es Sprachen, in denen Version 1.0 die endgültige Version ist? Natürlich sind Fehlerkorrekturen davon ausgenommen, aber der Funktionsumfang bleibt immer gleich?
Auf diese Weise passt jedes Feature in der Sprache gut zusammen und sieht nicht so aus, als wären sie aufgrund der Abwärtskompatibilität nachträglich mit veralteten Features verschraubt.
Ich nehme an, einige akademische Sprachen sind so? Aber gibt es kommerziell erfolgreiche Sprachen, die dieser Idee folgen? Die dazugehörige Bibliothek ist ebenfalls frei, um neue Funktionen zu erhalten, aber die Sprache bleibt immer konstant.
Ein Beispiel, das ich geben kann, ist eine meiner Lieblingssprachen C #, die ich ziemlich oft verwende. Mit jeder Veröffentlichung werden immer mehr Funktionen hinzugefügt. Um diese Vorteile zu nutzen, muss ich die eigentlichen Aufgaben in die Hand nehmen und viel Zeit damit verbringen, sie zu lernen, anstatt in der Lage zu sein, triviale Konzepte aufzunehmen und diese selbst zu kombinieren, um komplexere Probleme mühelos zu lösen.
Ich bin also auf der Suche nach einem minimalistischen Ansatz, bei dem alles konsistent, sinnvoll und so orthogonal wie möglich ist.
Antworten:
Lisp, Smalltalk. Zufälligerweise sind das auch die besten Sprachen im ganzen Haufen.
Sowohl Lisp als auch Smalltalk sind Sprachen, die auf einer starken Metapher basieren. Lisps Metapher ist "alles ist eine Liste; diese Liste repräsentiert sowohl Daten als auch Code (als Funktionen)". Die Metapher von Smalltalk lautet: "Alles ist ein Objekt. Die einzige Möglichkeit, ein Verhalten aufzurufen, besteht darin, eine Nachricht an ein Objekt zu übergeben." Diese Metaphern ermöglichen es, dass die Sprachen stabil, minimal und leistungsfähig sind. Der Rest ist in der Bibliothek.
Dinge, die in allen nicht-minimalen (ich wollte "aufgeblähten") Sprachen "Kontrollstrukturen" genannt werden, sind hier Teile der Bibliothek (als Beispiel:
cond
Funktion in lisp;ifTrue:
/ifFalse:
Familie von Nachrichten in Smalltalk implementieren beide eine bedingte, wo andere Sprachenif
Schlüsselwort haben).Es ist zu sehen, dass Lisp / Smalltalk fast minimale Verkörperungen ihres Paradigmas sind und nichts weiter (Lisp: funktionale Programmierung; Smalltalk: objektorientierte Programmierung).
quelle
Das Schriftsatzsystem TeX ist seit Version 3 sehr stabil.
Ich werde nicht behaupten, dass es Ihren Anforderungen entspricht. "Ich suche also nach einem minimalistischen Ansatz, bei dem alles konsistent, sinnvoll und so orthogonal wie möglich ist." Aussage, aber es erfüllt die meisten Ihrer anderen Kriterien.
quelle
C und Fortran sind Sprachen, die einem in den Sinn kommen. Sie sind sehr stabil und ihre Syntax ist leicht im Kopf zu behalten. Abgesehen davon, dass Sie schlechten Code selbst schreiben, gibt es bei der Verwendung dieser Sprachen nur sehr wenige Überraschungen. Aber ich würde sie nicht als großartige Sprachen für eine schnelle Anwendungsentwicklung auffassen.
Ich bevorzuge die schnelle Weiterentwicklung von Sprachen mit Funktionen, die mir nach kurzer Zeit die Arbeit erheblich erleichtern und den Code weniger komplex machen, während die Ausdruckskraft erhalten bleibt.
quelle
Behavior
und in denCollection
Hierarchien) sehr stabil . Es scheint mir, dass C mit all den C89, C99 und so weiter viel weniger stabil ist.Andere haben bereits Lisp gesagt, also muss ich Forth erziehen . Es ist sehr einfach zu implementieren und die Regeln der Sprache sind einfach zu befolgen.
Es ist eine stapelbasierte Sprache mit einem Wörterbuch von "Wörtern". Sie können die Sprache mithilfe einiger Vererbungsfunktionen problemlos erweitern.
Ein SEHR knappes Beispiel für Schildkrötengrafiken:
Wenn Sie es dann mit
: squiral -50 50 g 20 0 do 100 f 21 t loop ;
ausführen, erhalten Sie:Gutschrift für das Blog dieses Microsoft-Mitarbeiters .
quelle
Obwohl Lisp erwähnt wurde, ist Schema die minimalistischste Sprache, die ich kenne . Es fiel mir schwer, es in Universitätskursen zu verstehen, wo ich es musste. Aber es hat meine Art zu programmieren verändert und es ist sehr minimal. Genauso minimal wie die gesamte Syntax sind Klammern
()
und Leerzeichen.Die einzige Änderung in der Sprache war die Entscheidung , die Primitiven , wie zu konvertieren
+
,define
(und einige andere) Einbauten. Das heißt, sie sind beim Start verfügbar, können jedoch zur Laufzeit neu definiert werden.quelle
Tcl, dessen Design in erster Linie minimalistisch war
Von dort über die Seite http://www.tcl.tk/about/features.html ist eines der Merkmale, dass es sehr einfach zu erlernen ist und wo Gelegenheitsprogrammierer oder sogar Nicht-Programmierer es verwenden können.
quelle
Es gibt nur wenige Sprachen , die seit ihrer Gründung außerhalb des relativ unverändert geblieben sind esoterisch eine aus Sprachen , die unwahrscheinlich sind, was erwünscht ist (ich würde es hassen , um zu versuchen , etwas Sinnvolles schreiben in Befunge (obwohl es auch seit seiner ursprünglichen 1.0 geändert wurde Veröffentlichung)).
Die Sprachen, die am ehesten den Wunsch erfüllen, nichts Neues lernen zu müssen, sind Sprachen, die sich auf das „Zusammenkleben“ anderer Programme spezialisiert haben. Sprachen wie jcl , bash und dergleichen. Einfache Skriptsprachen könnten ebenfalls dazu gehören - awk ist einer der führenden.
Sobald man diesen Bereich verlässt, geschieht die Entwicklung. Entweder die Sprache oder die Frameworks. In einigen Situationen ist es "schwierig", für die Sprache zu programmieren, ohne ein Framework zu erhalten, das sich schnell ändert.
Viele Sprachen sind in gewissem Maße abwärtskompatibel. Man kann noch heute Java 1.4 schreiben, obwohl es wahrscheinlich nicht empfohlen wird - die Frameworks, für die die Leute schreiben, ändern sich schneller als die Sprache. Es gibt immer noch f77- und f90-Compiler für eine Sprachspezifikation, die sich in 20 oder 40 Jahren nicht geändert hat. C, Objective C, C ++ kann immer noch mit älteren Sprachspezifikationen codiert werden - man muss seinen Code nicht ständig aktualisieren, da eine neue Spezifikation veröffentlicht wurde oder ein neues Framework verfügbar ist.
Einige Sprachen haben eine ziemlich lange, unveränderte Geschichte, weil die Sprache selbst mächtig genug ist, um das zu tun, was man will. Lisp ist der Hauptkandidat in diesem Bereich. Forth fällt auch in den Bereich "Es hat sich nicht viel geändert".
Weitere traditionelle Skriptsprachen sind TCL, Perl und Python. Vermeiden Sie Dinge, die sich derzeit im Bereich der Modeerscheinungen befinden und aus irgendeinem Grund immer beliebter werden (Ruby und Javascript, ich sehe Sie an). TCL hat sich im Laufe der Jahre verändert , obwohl eines seiner Ziele darin besteht, eine einheitliche Gestaltung zu gewährleisten. Moderne Perl und Python beide eine gewisse Einheitlichkeit des Designs haben, obwohl zugegebenermaßen neue Features auf geschraubter fühlen kann (obwohl man nicht braucht , sie zu benutzen).
quelle
Ich denke, Python ist ein vernünftiger Kandidat für eine Sprache mit Minimalismus als Designziel. Es basiert um eine relativ kleine Anzahl von Kernkonzepten und Version 3 versucht, unter anderem, vereinfacht die Sprache ein wenig durch das Entfernen einiger Funktionen.
(Zugegeben, das ist nicht dasselbe wie ein Feature-Set, das gegenüber Version 1 gleich geblieben ist, aber ich denke, dass dies eine ziemlich willkürliche Methode ist, um Sprachen zu bewerten, da Sprachautoren es Version 1 nennen können, wann immer sie wollen.)
quelle
Ich denke, "minimalistischer" Designansatz würde durch Tcl veranschaulicht. Als Beispiel können Sie den Befehl {catch} mit {return -code n} -Werten verwenden, um jede Kontrollstruktur zu implementieren, die Sie sich vorstellen können. Perl musste ein Jahrzehnt warten, um {switch} (offiziell) zu erhalten (nicht dieses Perl) jemals gebraucht). Sie werden auch sehen, dass der Dodekalog http://wiki.tcl.tk/10259 die Grammatik von Tcl vollständig abdeckt - der Rest, mit welchem Programmierparadigma Sie auch arbeiten möchten, kann in dieser Grammatik ausgedrückt werden.
quelle