Der Begriff "Lisp" (oder "Lisp-like") ist ein Überbegriff für viele verschiedene Sprachen, z. B. "Common Lisp", "Scheme" und "Arc". In anderen Sprachgemeinschaften gibt es eine ähnliche Fragmentierung wie in ML.
Ruby und Python haben es jedoch beide geschafft, dieses Schicksal zu umgehen, indem mehr Innovationen bei der Implementierung (wie PyPy oder YARV) statt Änderungen an der Sprache selbst vorgenommen wurden.
Haben die Ruby- und Python-Communitys etwas Besonderes getan, um eine Fragmentierung der Sprache zu verhindern?
programming-languages
language-design
Chrisaycock
quelle
quelle
Antworten:
Ruby und Python haben beide wohlwollende Diktatoren am Ruder. Sie sind Sprachen, die tief in pragmatischen Belangen verwurzelt sind. Dies sind wahrscheinlich die wichtigsten Faktoren, die die Fragmentierung hemmen. Lisp und ML sind dagegen eher "design by committee" -Sprachen, die in der Wissenschaft für theoretische Zwecke konzipiert wurden.
Lisp wurde ursprünglich von John McCarthy als praktische mathematische Notation für Computerprogramme entwickelt. Er hat es nie als eigentliche Programmiersprache implementiert; Die erste Implementierung wurde von Steve Russell entwickelt , aber er war kein gütiger Diktator. Im Laufe der Zeit erschienen viele verschiedene Implementierungen von Lisp; Common Lisp war ein Versuch, sie zu standardisieren.
Lisp ist eher eine "Familie" von Sprachen. Genau wie ML, das einen ähnlichen Entwicklungsweg wie Lisp eingeschlagen hat.
quelle
Ein wahrscheinlicher Faktor ist einfach das Alter. Lisp und ML sind viel älter als Python und Ruby:
Lisp: 1958
ML: 1973
Python: 1991
Ruby: 1995
Lisp und ML haben offensichtlich viel größere Veränderungen bei den Hardware-Fähigkeiten, mehr Trends in der Informatik und sehr viel mehr Doktoranden festgestellt, die nach etwas suchen, an dem sie arbeiten können.
quelle
Sie sind im Wesentlichen alle implementierungsdefinierten Sprachen
Wenn es einfach ist, eine neue Implementierung einer Sprache zu erstellen, die weitgehend mit vorhandenem Code kompatibel ist, dann sind Hacker Hacker. Jeder schreibt irgendwann eine Lisp-Implementierung. ML-Compiler sind für Absolventen des Sprachdesigns fast schon Pflicht - die Sprache ist ja bekanntermaßen gut dokumentiert .
Auf der anderen Seite haben wir die Ad-hoc- und Implementierungs-definierten Sprachen. Oder Sprachen, die nur so komplex sind, dass sie ein wesentliches Hindernis für eine jemals realisierbare alternative Implementierung darstellen:
Dieser scheinbare Nachteil - Sprachen , die zu hart sind brauchbare Alternativen zu produzieren, haben den massiven Kopf: knappe Ressourcen für Entwickler sind auf die einer wahren Umsetzung konzentriert.
In der Vergangenheit haben einige Mitglieder der Haskell-Community aktiv Fusionen und eine Konzentration der Entwicklungsbemühungen betrieben. Sie haben erkannt, dass ein Auseinanderbrechen der Entwickler-Community bedeuten würde, dass wir keinen Erfolg haben würden. GHC wurde ausgewählt und verfochten.
quelle
cabal
ist kein unterhaltsames Werkzeug und eher einfach zu brechen. Sogar Yesod erkennt es an: yesodweb.com/blog/2012/04/cabal-meta Python und Ruby sind in Bezug auf die Paketverwaltung viel besser.Ich würde sagen, ein Faktor ist eine definierende Plattform . Für Haskell ist die Plattform der Haskell-Standard und der GHC (ich würde mir vorstellen). Für Ruby war es Ruby on Rails, das die Ruby-Entwicklungsplattform "definierte". Für C war es Unix.
Vergleichen Sie das mit Lisp, wo es keine originelle Kick-Ass-Plattform gab, die definierte, wie die Sprache war. Wenn ich mich richtig erinnere, hatte jede Lisp-Maschine leichte Unterschiede, je nach Modell und Hersteller. Common Lisp war aus irgendeinem Grund nicht definierend. Möglicherweise aufgrund zu großer Konkurrenz und mangelnder Bereitschaft, auf eine andere Plattform zu wechseln.
Dies ist natürlich eine reine Spekulation von meiner Seite. Der Gedanke kam aus den Kommentaren zu Harveys Antwort. Es scheint jedoch, dass die definierende Plattform in vielen Formen vorliegt, aber die gemeinsame Eigenschaft scheint zu sein, dass es das ist, was an Beliebtheit gewinnt.
quelle
Vergessen Sie nicht, die Kultur abzuwägen, die die Entwicklung einer Sprache antreibt
Ich würde auch die Tatsache betonen, dass die Entwicklung auf Python / PHP aktiv in der Öffentlichkeit stattfindet. Sie haben eine Gruppe von Personen, die eine Standardspezifikation festnagelt, die jedem / jeder frei zur Verfügung steht.
Ähnlich wie das W3C mit dem HTML / CSS-Standard. Sie haben eine kleine Gruppe von motivierten Personen, die die feineren Details dessen kontrollieren, was die Sprache erreichen soll. Alles geht in eine klar definierte Spezifikation, bevor es für die Öffentlichkeit freigegeben wird.
OTOH, Sprachen wie LISP werden von Professoren oder anderen Personen hinter verschlossenen Türen gegabelt, die aufrichtig glauben, dass ihre Sicht auf den „besten Gebrauch“ der Sprache richtig ist. Sie können gleichzeitig richtig und falsch sein, da einige Implementierungen in bestimmten Dingen großartig sind. während keiner der Beste in allem ist.
Das ist nicht unbedingt schlecht, denn Vielfalt schafft Innovation. Sprachen wie LISP sind und bleiben großartige Sprachen zum Lernen und Forschen, weil sie die Grenzen des Verstehens erweitern.
Die Eigenschaften, die ein Umfeld für Innovationen ausmachen, tragen jedoch nicht unbedingt zur Stabilität bei. Umgekehrt sind die Eigenschaften, die eine Umgebung für Stabilität gut machen, nicht unbedingt gut für Kreativität.
Wenn die Entwicklung auf aktiver Zusammenarbeit beruht, sind manchmal Einzelpersonen gezwungen, sich zum Wohle des Ganzen zu ergeben. Schlecht für die Forschung / gut für die Konsistenz.
Fakt ist, wir leben immer noch im wilden Westen der Entwicklung von Programmiersprachen. Das Problem bei der Gestaltung der „idealen Sprache“ ist so groß, dass trotz enormer Anstrengungen niemand der Lösung nahe gekommen ist.
Im Bereich Forschung / Wissenschaft gibt es noch viel Raum für Verbesserungen und Innovationen. Im kommerziellen Bereich, wo der Einsatz von Software in praktischen Anwendungen exponentiell zunimmt und die treibende Kraft Einfachheit und Konsistenz ist.
Einige Sprachen spezialisieren sich auf die ersteren, andere auf die letzteren. Diejenigen, die versuchen, sich auf beides zu spezialisieren, machen es normalerweise auch nicht besonders gut und sterben ab.
Mit beiden meine ich monolithische Sprachen wie VB / C # / Java. Es ist zu früh zu sagen, aber ich möchte sehen, wie C # und Python in 10 Jahren aussehen. Im aktuellen Tempo wächst die Funktionalität und Inkonsistenz von C # mit einer Geschwindigkeit, die es ziemlich düster aussehen lässt. Selbst mit einer großartigen Dokumentation ist es zu schmerzhaft, sich an all die subtilen Details und Macken zu erinnern, die in der Sprache enthalten sind. Es ist großartig für einen einzelnen Entwickler, aber sobald Sie mehr Entwickler mit einzigartigen Stilen hinzufügen, wächst die Inkonsistenz in der Codebasis, die Qualität leidet und niemand gewinnt. Ich denke, es gibt viel zu lernen aus den Schwierigkeiten, die Perl in einer Produktionsumgebung mit sich bringt.
quelle
Ich denke nicht, dass es richtig ist zu sagen, dass Sprachen wie Python und Ruby nicht fragmentiert sind. Schon sehen wir einige Fragmentierungseffekte. Beispielsweise ist Python 3 nicht vollständig abwärtskompatibel mit Python 2, sodass beide Versionen beibehalten werden müssen und viele vorhandene Codes nur mit Python 2 funktionieren. Es gibt auch einige Python-Ausgründungen, einschließlich PyPy.
Ein weiterer Faktor ist das Alter der Sprachen. Die am stärksten fragmentierten Sprachen sind die älteren Sprachen und unterliegen daher dem Druck der Evolution und Revision. Lisp wurde vor einigen Jahrzehnten erfunden. Es blieb also genügend Zeit, einige seiner Ideen in neue Sprachen umzusetzen. C ist ein weiteres Beispiel für eine fragmentierte Sprache. Während C nur eine wirklich wichtige Revision der Sprache selbst hatte (K & R zu ANSI), gab es zahlreiche Ausgründungen, darunter C ++, Not Quite C und alle anderen, die eine C-ähnliche Syntax aufweisen.
Ruby selbst ist (wenn Sie so wollen) eine "Fragmentierung" früherer Sprachen. Da es Ideen von C, Smalltalk und Perl (unter anderem) enthält, ist es derzeit die Sprache , die die Fragmentierung vornimmt. Ich verstehe nicht, warum wir in Zukunft möglicherweise keine weitere Verflechtung von Ruby mit anderen Sprachen sehen werden.
quelle
Lisp ist fragmentiert, weil es ein so mächtiges Modell ist, die erstaunlichste Sprache, die jemals erfunden wurde. Die meisten Sprachen leihen heute Dinge aus, die zuerst in Lisp implementiert wurden. Man kann also sagen, dass jede Sprache Teil dieser bestimmten Fragmentierung ist. Smalltalk war zum Beispiel stark von Lisp inspiriert und Ruby ist stark von Smalltalk inspiriert. JavaScript ist Lisp in einer Java-Verkleidung und so weiter. Es ist alles miteinander verbunden, und jeder Spracherfinder wählt seine Lieblingsstücke aus anderen Sprachen aus.
Ein weiterer Faktor ist, dass Lisp wahrscheinlich das am einfachsten zu implementierende Programmierkonzept ist - weshalb es immer wieder und immer wieder gemacht wird.
quelle
Lisp-ähnliche Sprachen sind zu grundlegend und zu theoretisch, um dramatisch verändert zu werden. Grammatische Änderungen (ich möchte nicht nur die Namen von Befehlen ändern) passen einfach nicht zur dahinter stehenden Theorie der funktionalen Programmierung.
Aber die Tatsache, dass es Sprachen wie lisp gibt, zeigt, dass "Änderungen" ohnehin schon an lisp vorgenommen wurden. Mit anderen Worten, es gibt Sprachen, die von Menschen gemacht wurden, die von lisp oder seiner Theorie dahinter inspiriert waren und eine in gewisser Weise ähnliche neue Sprache entwickelt haben.
Es gibt auch viele Sprachen, die von Python inspiriert sind. ZB Julia, CoffeeScript usw., die ihre eigene Familie von whitespace-sensitiven objektorientierten Sprachen bilden würden.
Ich denke, grundlegende Grundlagen einer Sprache wie Python werden sich nie wirklich ändern. Python ist objektorientiert und weist daher Ähnlichkeiten mit C ++ und Java auf, ist jedoch dynamisch und daher auch vielen Skriptsprachen ähnlich.
Na wer interessiert sich eigentlich für Sprachen? Was zählt, ist der Zweck: Französisch ist ähnlich wie Latein, aber Mädchen, die Französisch verstehen, sind viel heißer;)
quelle