Kriterien für eine Programmiersprache als „ausgereift“

8

Ich habe kürzlich eine Antwort auf diese Frage gelesen und war beeindruckt von der Aussage "Die Sprache ist ausgereift".

Also habe ich mich gefragt, was wir eigentlich meinen, wenn wir sagen, dass "eine Programmiersprache ausgereift ist"? Normalerweise wird eine Programmiersprache zunächst aus einem Bedürfnis heraus entwickelt, z

  • Probieren Sie ein neues Programmierparadigma oder eine neue Kombination von Funktionen aus, die in vorhandenen Sprachen nicht zu finden sind.
  • Versuchen Sie, ein Problem zu lösen oder eine Einschränkung einer vorhandenen Sprache zu überwinden.
  • Erstellen Sie eine Sprache für den Programmierunterricht.
  • Erstellen Sie eine Sprache, die eine bestimmte Klasse von Problemen löst (z. B. Parallelität).
  • Erstellen Sie eine Sprache und eine API für ein spezielles Anwendungsfeld, z. B. das Web (in diesem Fall verwendet die Sprache möglicherweise ein bekanntes Paradigma, aber die gesamte API muss neu sein).
  • Erstellen Sie eine Sprache, um Ihren Konkurrenten vom Markt zu verdrängen (in diesem Fall möchte der Ersteller möglicherweise, dass die neue Sprache einer vorhandenen Sprache sehr ähnlich ist, um Entwickler für die neue Programmiersprache und Plattform zu gewinnen).

Unabhängig von der ursprünglichen Motivation und dem Szenario, in dem eine Sprache erstellt wurde, werden einige Sprachen letztendlich als ausgereift angesehen . In meiner Intuition bedeutet dies, dass die Sprache (mindestens eines) ihrer Ziele erreicht hat, z. B. "Wir können jetzt Sprache X als zuverlässiges Werkzeug zum Schreiben von Webanwendungen verwenden."

Dies ist jedoch etwas vage, daher wollte ich fragen, was Ihrer Meinung nach die wichtigsten Kriterien (falls vorhanden) sind, die angewendet werden, wenn Sie sagen, dass eine Sprache ausgereift ist.

WICHTIGE NOTIZ

Diese Frage ist (absichtlich) sprachunabhängig, weil ich nur an allgemeinen Kriterien interessiert bin. Bitte schreibe nur sprachunabhängige Antworten und Kommentare! Ich frage nicht, ob eine bestimmte "Sprache X ausgereift ist" oder "welche Programmiersprachen als ausgereift angesehen werden können" oder ob "Sprache X ausgereifter ist als Sprache Y": Bitte vermeiden Sie es, Meinungen oder Verweise zu bestimmten Sprachen zu veröffentlichen, da diese sind außerhalb des Rahmens dieser Frage.

BEARBEITEN

Um die Frage genauer zu machen, meine ich mit Kriterien Dinge wie "Tool-Support", "Übernahme durch die Industrie", "Stabilität", "Rich API", "große Benutzergemeinschaft", "erfolgreiche Anwendungsaufzeichnung", "Standardisierung". , "saubere und einheitliche Semantik" und so weiter.

Giorgio
quelle
In Bezug auf die zu schließende Abstimmung (keine echte Frage): Der Hauptpunkt der Frage lautet: "Was sind für Sie die wichtigsten Kriterien (falls vorhanden), die angewendet werden, wenn Sie sagen, dass eine Sprache ausgereift ist?" Mögliche Kriterien, die mir in den Sinn kommen, sind: große Benutzergemeinschaft, umfangreiche API, Sprachstabilität, Toolunterstützung. Ich bin mir aber nicht sicher, welche Kriterien normalerweise angewendet werden und welche für die Definition der Sprachreife als weniger wichtig angesehen werden. Vorschläge zur besseren Formulierung meiner Frage sind willkommen.
Giorgio

Antworten:

7

Akzeptanzfaktoren

Ich würde eine Kombination verschiedener Dinge sagen, aber ich denke nicht, dass sie alle erforderlich sind. Einige Sprachen, die heutzutage als ausgereift gelten, erfüllen einige davon eindeutig nicht.

Ich würde sagen, eine Kombination von:

  • Werkzeug:
    • Hauptzeile: Mindestens eine stabile "offizielle" oder allgemein akzeptierte (de facto oder vom Hersteller empfohlene / unterstützte) Tool-Suite (Compiler, Interpreter, VM, Editor).
    • Alternative : Einige stabile und nicht so stabile Alternativen der oben genannten Tools (Closed- oder Open Source-Varianten, kostenlose oder kommerzielle Varianten, Erweiterungen usw.).
  • Community: Eine aktive , aber nicht unbedingt große Gruppe von Followern und Mitwirkenden.
  • Anerkennung:
    • Ein gewisses Maß an Anerkennung und Nutzung durch einige industrielle Akteure (auch wenn sie sich in einer Nische befinden).
    • Ein gewisses Maß an Anerkennung in der Populärkultur (auch wenn in einer Nische).

Über Ruhm, Anerkennung und Reife

Beachten Sie, dass das Unterscheidungsmerkmal hier darin besteht, starke und aktive Kriterienvalidatoren zu haben, nicht große oder zahlreiche. Betrachten Sie zur Verdeutlichung diese sehr unterschiedlichen Beispiele:

  • Ruby war lange Zeit eine Sprache mit einer großen Community-Unterstützung, einer offiziellen Referenzimplementierung usw., konnte aber kaum als ausgereift angesehen werden, bis sie einige ihrer Ecken und Kanten ausgebügelt hatte. Es war berühmt, bevor es reif war.

  • Auf der anderen Seite des Spektrums sind einige einst sehr weit verbreitete Sprachen (COBOL, FORTRAN ...) heute weniger sichtbar, aber in jeder Hinsicht noch ausgereift. Sie waren einst berühmt und reif.

  • Außerdem sind einige Nischensprachen meiner Ansicht nach definitiv ausgereift, trotz ihrer kleinen (aber etablierten) Marktdurchdringung. Betrachten Sie Oberon oder Limbo. Sie sind reif, aber nie berühmt geworden. Andere, wie R, sind insofern relativ berühmt, als ihre "Nischen" keine wirklichen Nischen sind (nervt mich, wenn Leute Dinge wie Scala oder Clojure "Nischensprachen" nennen, was sie definitiv nicht sind), obwohl ihr Anwendungsbereich dies nicht ist genau das, was du Mainstream nennen würdest.

Auf Stabilität

Was ist überhaupt stabil? Es ist ziemlich relativ ...

  • Beachtung?
    • Zum Standard (wenn es einen gibt)?
    • Zu einer Referenzimplementierung (falls vorhanden)?
  • Anzahl der Fehler? (kaum eine gute Maßnahme)
  • In kritischen Umgebungen verwenden?

Im Allgemeinen bedeutet Stabilität einfach, dass ich nicht täglich überrascht bin, wenn ich meinen durchschnittlichen Job mit dem Toolkit der Sprache erledige, und ich kann endgültige Antworten darauf erhalten, was passieren soll oder nicht, wenn ich versuche, etwas mit der Sprache und zu tun Es ist ein Toolkit, egal ob zur Build- oder Laufzeit meiner Programme.

Aber Stabilität für jemanden, der Smartphone-Apps schreibt, und Stabilität für jemanden, der medizinische oder Avionik-Systeme schreibt, ist eine andere Art von Vogel.

Haylem
quelle
+1 (nicht nur, sondern auch), weil Sie den Open-Source-Faktor berühren. Es gibt eine Menge Beispiele, in denen Closed-Source-Lösungen (und normalerweise kommerzielle Lösungen) besser sind als Open-Source-Alternativen. Open-Source-Tools, Bibliotheken usw. für eine Sprache zu haben, zählt jedoch bis zu ihrer Reife, da dies (zumindest für mich) bedeutet, dass mehr als nur die Personen, die ein finanzielles Interesse an der Sprache haben, diese Sprache übernommen haben, weshalb sie es für mehr getan haben praktische Gründe.
Shivan Dragon
@ Haylem: Ich stimme dir zu, dass berühmt und reif nicht dasselbe sind. Guter Punkt. In Bezug auf die Stabilität halte ich es für eine gute Idee, sie mit dem Grad der "Überraschung" bei der Verwendung der Sprache in Beziehung zu setzen.
Giorgio
@ Haylem: Es gibt bereits zwei Stimmen, um die Frage zu schließen (ich wünschte, solche Stimmen würden von einer Erklärung begleitet, da dies mir helfen würde, meine Frage zu verbessern). Ein Grund könnte sein, dass Sprachvergleiche ein heikles Thema sind, das eine Debatte beginnen kann (obwohl ich bisher nicht viel Debatte sehe). Glauben Sie, dass es möglich wäre, Ihre Antwort ohne Bezugnahme auf bestimmte Sprachen zu formulieren? Ich denke, jeder würde Ihren Standpunkt verstehen, reif und weit verbreitet zu sein, ohne konkrete Beispiele zu nennen.
Giorgio
@Giorgio: Meine Antwort ist bereits sprachunabhängig, der zweite Abschnitt verdeutlicht nur anhand von Beispielen. Ich werde versuchen, es morgen ein bisschen neu zu schreiben / zu erweitern, wenn ich Zeit habe.
Haylem
5

Ich habe mich vor ein paar Jahren tatsächlich genauso gefragt. Damals entschied ich, dass eine Sprache ausgereift ist (dh gut zum Lösen von Problemen vom Typ x), wenn sie die meisten notwendigen Funktionen zur Lösung dieses Problems aufweist. Mit anderen Worten, wie viele der spezifischen Tools zur Problemlösung muss ich selbst erstellen, im Vergleich dazu, wie viele bereits mit der Sprache geliefert werden. Gemäß Ihrem Kommentar entferne ich das sprachspezifische Beispiel und ersetze es durch ein sprachunabhängiges:

Ich dachte im Grunde, dass eine Sprache mit vielen eingebauten "Helfer" - und "Utility" -Bibliotheken ausgereifter ist als eine, in der einige davon nicht existieren (und in der ich sie schreiben müsste - oder etwas Ähnliches sie - ich)

Ich spreche über all das in der Vergangenheit, weil ich heutzutage diese Denkweise ziemlich aufgegeben habe und die Reife einer Sprache eher so sehe:

  • wie stark die Community für diese Sprache ist. Wie viele Dokumente, Bücher und relevante Beispiele gibt es? Dies ist wichtig, da Sie Sprachen haben können, die sehr nett sind und für eine bestimmte Aufgabe besser geeignet sind als andere, die jedoch schlecht dokumentiert sind, sodass Sie ihre Vorteile nie erkennen können.

  • Performance. Für eine bestimmte Aufgabe und eine bestimmte x-Implementierung ist die Sprache, in der diese Implementierung schneller ausgeführt wird, ausgereifter. Ja, dies ist eine sehr graue Zone, und für die meisten Sprachen und Plattformen ist der Vergleich schwierig. Für bestimmte Sprachen und Plattformen ist es jedoch ziemlich einfach zu sehen, welche welche übertrifft. Für bestimmte Probleme ist dies sehr wichtig.

  • Fehler. Oh ja. Daran hätte ich nie gedacht, bis ich es mit eigenen Augen gesehen hätte. Ich werde keine Beispiele nennen, weil ich nicht so aussehen möchte, als würde ich die eine oder andere Sprache verprügeln, aber es gibt Sprachen da draußen (genauer gesagt, Kompilierungs- und Laufzeitumgebungen für bestimmte Sprachen) Sehr fehlerhaft, bis zu dem Punkt, an dem man nicht mehr vertrauen und abschätzen kann, wie etwas funktionieren wird. Für mich sinkt die Reife einer Sprache stark, wenn dies der Fall ist.

Die Gründe, warum ich die Art und Weise, wie ich eine Sprache für reifer halte, geändert habe, sind:

  • Zunächst einmal bedeutet die Tatsache, dass eine Sprache eine Menge Hilfsbibliotheken und Dienstprogramme enthält, möglicherweise nicht immer, dass sie tatsächlich nützlich sind. Diese Bibliotheken sind immer noch allgemein gehalten, und sie sind möglicherweise weit von einem bestimmten Bedarf entfernt, sodass ich mich letztendlich dazu neige, einen Teil von ihnen neu zu schreiben, um eine effizientere, problemspezifische Lösung zu erhalten.

  • Darüber hinaus sind Dinge wie die Leistung von Sprache und Plattform sowie die Dokumentation schwieriger zu kompensieren als bei fehlenden Bibliotheken. Wenn der Code, den Sie in Sprache x und Plattform y geschrieben haben, langsam ist, ist die Optimierung selbst niemals so gut wie das Ersetzen durch Sprache x2 und Plattform y2, für die eine Kohorte von (wahrscheinlich intelligenteren) Personen als ich Optimierungen vorgenommen hat. Gleiches gilt für die Dokumentation. Das Fehlen dieser Dokumentation führt dazu, dass mehr Zeit für den Nachweis von Konzepten, Versuchen und Fehlern sowie für die Erkundung von Quell- und Komponententestcode aufgewendet wird, um zu sehen, wie etwas getan werden muss. Und selbst wenn Sie all dies durchgehen, wissen Sie immer noch nicht, ob die von Ihnen gewählte Lösung am besten geeignet ist, da die Sprachentwickler beabsichtigten, dass sie funktioniert.

Shivan Drache
quelle
Vielen Dank für die Antwort, aber bitte vermeiden Sie es, bestimmte Sprachen zu erwähnen, da dies zu Debatten führen kann, die nicht in den Rahmen der Frage fallen.
Giorgio
Mir hat es mit einem konkreten Beispiel aus der Praxis besser gefallen.
Blrfl
@Blrfl: Es ist vielleicht einfacher zu lesen, aber dann können die Leute anfangen, über verschiedene Programmiersprachen zu debattieren, und die Frage wird als "nicht konstruktiv" geschlossen.
Giorgio
1
@ Shivan Dragon: Danke, dass Sie die spezifischen Referenzen entfernt haben, und danke für die interessante Antwort. +1.
Giorgio
2
@Blrfl: Ich stimme Giorgio hier eher zu, jedes Mal, wenn bestimmte Vergleiche zwischen Sprachen durchgeführt werden, folgen normalerweise endlose Debatten, und wie Godwins Gesetz besagt, könnte es sogar zu Hitler-Referenzen kommen :). Besser agnostisch lassen.
Shivan Dragon