Gibt es Programmiersprachen, die einem minimalistischen Entwicklungsansatz folgen?


26

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.


7
Ein Arbeitsfeld der meisten Entwickler ist es, Probleme auf effektive Weise zu lösen. Um effektiv zu sein, muss man ständig neue Dinge lernen. Neue Sprachfunktionen, neue Frameworks und neue Tools werden entwickelt, um effektiver zu sein. Indem Sie sie lernen, konzentrieren Sie sich tatsächlich auf Ihre Arbeit.
Arseni Mourzenko

4
Nun, nicht jeder, der programmiert, muss ein Vollzeitprogrammierer sein. Es ist nur ein weiteres Werkzeug für viele andere Berufe.
Joan Venge

4
Andererseits zwingt dich niemand, etwas zu lernen. Wenn C # 1.0 Ihre Anforderungen erfüllt, verschwenden Sie keine Zeit damit, etwas zu lernen, das Sie nicht benötigen.
Arseni Mourzenko

11
Ich halte die Frage für berechtigt: Warum sollten wir die KISS- und YAGNI-Prinzipien auf Software-Artefakte anwenden, aber nicht auf Programmiersprachen? Wenn eine Sprache über genügend Kernfunktionen verfügt, ist die Weiterentwicklung (IMHO) hauptsächlich auf Marketing zurückzuführen (Wettbewerb mit anderen Sprachen, der Unternehmen dazu zwingt, Sprachen mit Funktionen zu füllen, um ihre Kunden zu halten).
Giorgio

2
@MainMa: "Um effektiv zu sein, muss man ständig neue Dinge lernen.": Eine komplexe Programmiersprache mit zu vielen Funktionen kann die Effektivität verringern, anstatt sie zu steigern. Beispielsweise kann dies in einem Team dazu führen, dass verschiedene Entwickler unterschiedliche Teilmengen der Sprache verwenden, wodurch Codeüberprüfungen, Fehlerbehebungen und Wartungsarbeiten weniger effizient sind.
Giorgio

Antworten:


32

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: condFunktion in lisp; ifTrue:/ ifFalse:Familie von Nachrichten in Smalltalk implementieren beide eine bedingte, wo andere Sprachen ifSchlü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).


4
Gute Lisp-Implementierungen können mit C konkurrieren, gute Smalltalk-Implementierungen können mit C ++ konkurrieren. Die HotSopt-JVM von Oracle, die schnellste VM der Welt, ist eine Smalltalk-VM. Sie verwendet nicht einmal statische Typinformationen für ihre Optimierungen.
Jörg W Mittag


9
Diese Antwort ist zu klein, um konstruktiv zu sein. Es fehlen Einzelheiten oder Belege.
Jimmy Hoffa

2
-1 Lisp? LISP ? Ernst? Nach den LISP-Kriegen der 1970er Jahre versuchen die wiederholten LISP-Unity und schließlich Common Lisp? Nein, auch LISP hat es bei 1.0 nicht geschafft.
Ross Patterson

1
Ich denke, Sie haben auf eine sehr wichtige Idee hingewiesen: Eine Sprache sollte aus einer (oder mehreren) starken, einheitlichen Metapher (n) aufgebaut sein, dh eine Programmiersprache sollte Ihnen eine Möglichkeit bieten, Ihre Gedanken zu organisieren. Ich denke, dass die Komplexität einiger Sprachen teilweise auf das Fehlen einer solchen Metapher zurückzuführen ist: Diese Sprachen wachsen durch die Aufnahme neuer Funktionen, da ihnen keine einheitliche Sichtweise zugrunde liegt.
Giorgio

6

Das Schriftsatzsystem TeX ist seit Version 3 sehr stabil.

Seit Version 3 verwendet TeX ein eigenwilliges Versionsnummerierungssystem, bei dem Aktualisierungen durch Hinzufügen einer zusätzlichen Ziffer am Ende der Dezimalstelle angezeigt werden, sodass die Versionsnummer asymptotisch gegen π geht. Dies spiegelt die Tatsache wider, dass TeX jetzt sehr stabil ist und nur geringfügige Aktualisierungen erwartet werden. Die aktuelle Version von TeX ist 3.1415926; Es wurde zuletzt im März 2008 aktualisiert. Das Design wurde nach Version 3.0 eingefroren, und es werden keine neuen Funktionen oder grundlegenden Änderungen hinzugefügt, sodass alle neueren Versionen nur Fehlerkorrekturen enthalten. Auch wenn Donald Knuth selbst einige Bereiche vorgeschlagen hat, in denen TeX hätte verbessert werden können, ist er der festen Überzeugung, dass ein unverändertes System, das jetzt und in Zukunft die gleiche Ausgabe liefert, wichtiger ist als die Einführung neuer Funktionen. Aus diesem Grund hat er erklärt, dass die "

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.


6

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.


1
Ich stimme dem minimalistischen Design von C zu. Auch wenn die Sprache im Laufe der Jahre aktualisiert wurde, ist das grundlegende Design- und Programmiermodell der Sprache noch erkennbar (andere Sprachen durchlaufen alle 5 bis 10 Jahre eine Revolution). Natürlich ist C keine Allzwecksprache wie früher, da es in bestimmten Anwendungsdomänen (Desktopanwendungen, Webanwendungen usw.) durch andere Sprachen ersetzt wurde.
Giorgio

@ Giorgio: Nicht alle. Die minimalen (wie ich schon erwähnte) tun das nicht. Die Smalltalk-Syntax hat sich seit ihrer Einführung nur in einem von Squeak eingebrachten geändert: den geschweiften, berechneten Arrays. Die Bibliothek ist auch im Kern ( Behaviorund in den CollectionHierarchien) sehr stabil . Es scheint mir, dass C mit all den C89, C99 und so weiter viel weniger stabil ist.
Herby

1
@herby: Sie haben wahrscheinlich Recht, dass andere Sprachen wie Smalltalk stabiler als C sind. Das grundlegende Programmiermodell von C ist jedoch das gleiche wie vor 20 Jahren. Andere Sprachen haben tiefgreifende Veränderungen erfahren. Daher behaupte ich auch hier nicht, dass C die stabilste Sprache ist, aber IMO ist es viel stabiler als viele andere gängige Sprachen.
Giorgio

6

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:

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + c@ 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

Wenn Sie es dann mit : squiral -50 50 g 20 0 do 100 f 21 t loop ;ausführen, erhalten Sie:

Spiral-

Gutschrift für das Blog dieses Microsoft-Mitarbeiters .


1
Wie wurde das wieder aufgegriffen? Forth ist vielleicht ein guter Kandidat, aber das angegebene Beispiel ist nicht viel besser als ausführbares Leitungsrauschen. Ein Paradebeispiel dafür, warum die Besessenheit von PLT mit Knappheit dem widerspricht, was Fachleute tatsächlich brauchen.
Telastyn

4
@Telastyn Das war nicht seine Frage.
Austin Henley

4

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.


2

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.


3
Das hört sich für mich korrekt an, aber einzeilige Antworten ohne unterstützende Informationen oder Details sind von zu geringer Qualität, um für irgendjemanden hilfreich zu sein. Bitte fügen Sie ein paar gute Details hinzu (und nicht nur einen Link ohne Zusammenfassung), und Sie werden von mir eine hohe Stimme erhalten
Jimmy Hoffa

ok, werde aber aufgrund der Frage nicht wissen, wie viel Mühe es wert ist
Egryan

1
Mit etwas Glück wird es nach Abstimmung wiedereröffnet. Das ist eine gute Frage. Ich poste möglicherweise auf Meta, um zu versuchen, es wieder zu öffnen, wenn es nicht bald von der Community wieder geöffnet wird.
Jimmy Hoffa

Ich bin damit einverstanden und plane, den Beitrag zu erweitern, sobald ich von der Arbeit
abkomme.

Durchsuchen Sie Google nach "Eine Fallstudie zur TCL-Sprache", "Tcl: Eine einbettbare Befehlssprache" und " tcl.tk/about/history.html" - sie geben einige wichtige Punkte an. Ich bin mir jedoch nicht sicher, ob sie den Wunsch des OP unterstützen - es scheint, dass TCL von seiner ursprünglichen Version 1.0 erweitert wurde (siehe wiki.tcl.tk/1721 )

2

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).


2

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.)


Das Antwortdatum im Dezember 2012 gibt Ihnen einen kostenlosen Pass, denn seitdem haben wir die Monstrosität Python 3, die es mit C ++ aufnehmen kann, weil sie einen Müllhaufen Cruft hinzufügen möchte, während sie gleichzeitig die Einfachheit beseitigt. Es ist jetzt eine der fremdesten addon-infizierten Sprachen im Computing.
Thomas Browne

-1

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.


dies wiederholt nur in Punkt gemacht und erklärt eine Antwort 2 Jahre geschrieben vor
gnat

In Bezug auf den ursprünglichen Beitrag kann ich wohl nur Orthogonalität = Geschichte (die Familie der C-Sprachen) und aktuelle sprachübergreifende Assimilation sagen. Ich habe über das Betriebssystem hinweg einen Ansatz unter allen Sprachen für verallgemeinerte MVC-Web-Frameworks, Coroutinen usw. gesehen. Außerhalb dieses Trends kann ich das bemerkenswerte Hinzufügen von Closures zu C11 und dem bevorstehenden Java Lambda (die beide die Entwicklung im OS "scripting" langs widerspiegeln) feststellen.
user132043
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.