it-swarm.dev

Warum ist OCaml nicht beliebter?

Ich habe immer gehört, dass C die Sprache der Wahl für eingebettete Systeme ist oder alles, was mit maximaler Geschwindigkeit ausgeführt werden muss. Ich habe nie eine Vorliebe für C entwickelt, vor allem, weil ich keine Zeigerarithmetik mag und die Sprache kaum eine Stufe über dem Assembler liegt.

Auf der anderen Seite sind ML-Sprachen funktionale, durch Müll gesammelte Sprachen, und OCaml hat sogar ein Objektmodell, aber sie haben den Ruf, so schnell zu sein wie C. ML-Sprachen haben die Abstraktion, die man sich wünschen kann, um auf hoher Ebene präzise zu schreiben Code, behält jedoch die Geschwindigkeit bei, die zum Schreiben von Hochleistungsanwendungen erforderlich ist.

Insbesondere OCaml kann überall dort eingesetzt werden, wo C traditionell verwendet wird, z. B. für eingebettete Geräte, Grafiktreiber, Betriebssysteme usw. OCaml hätte inzwischen die Welt erobern sollen, aber kaum jemand hat bisher allein von der Sprache gehört benutzte es.

Dies ist eine subjektive Frage, aber warum sind OCaml und ML in anderen Sprachen so dunkel geblieben, während C und andere Sprachen populär wurden?

86
Juliet

Die erste Antwort ist, dass niemand wirklich weiß, warum Sprachen populär werden, und jeder, der etwas anderes sagt, getäuscht wird oder eine Agenda hat. (Es ist oft leicht zu erkennen, warum eine Sprache nicht populär wird , aber das ist eine andere Frage.)

Mit diesem Haftungsausschluss sind hier einige Punkte, die andeutend sind, die wichtigsten zuerst:

  • Der erste ausgereifte C-Compiler erschien 1974; Der erste ausgereifte OCaml-Compiler erschien Ende der neunziger Jahre. C hat einen Vorsprung von 25 Jahren.

  • C wurde mit Unix ausgeliefert, der größten "Killer-App" aller Zeiten. Lange Zeit musste jede CS-Abteilung auf der Welt über Unix verfügen, was bedeutete, dass jeder Ausbilder und jeder, der einen CS-Kurs belegte, die Möglichkeit hatte, C. OCaml und ML kennenzulernen. Sie warten immer noch auf ihre erste Killer-App. (MLdonkey ist cool, aber es ist nicht Unix.)

  • C füllt seine Nische so gut, dass ich bezweifle, dass es niemals eine andere einfache Sprache geben wird, die nur der Systemprogrammierung gewidmet ist. (Um die Beweise dafür zu sehen, lesen Sie Dennis Ritchies Artikel über die Geschichte von C aus HOPL II.) Es ist nicht einmal klar, was OCamls Nische ist, und die Nische von Standard ML ist nur ein wenig klarer. Caml und ML haben also einige Konkurrenten, während C seinen einzigen Konkurrenten (BLISS) getötet hat.

  • Eine der großen Stärken von C ist, dass das Kostenmodell sehr vorhersehbar ist: Es ist einfach, jedes kleine Fragment von C-Code zu betrachten, um sofort eine genaue Vorstellung zu erhalten von welchen Maschinenoperationen müssen ausgeführt werden, um diesen Code auszuführen. Das Kostenmodell von OCaml ist viel weniger klar, insbesondere weil die Speicherzuweisung viel weniger explizit ist und die Gesamtkosten der Speicherzuweisung (gleich den Zuordnungskosten zuzüglich der anfallenden Kosten) sind während der Speicherbereinigung) hängt von neuen Eigenschaften ab, z. B. wie lange Objekte leben und welche Objekte auf andere Objekte verweisen. Das Nettoergebnis ist, dass die Leistung schwer vorherzusagen und sogar schwer nachträglich zu analysieren ist. (Die Tools zur Speicherprofilerstellung von OCaml sind nicht das, was sie sein sollten.) Daher eignet sich OCaml nicht für Anwendungen, bei denen die Leistung sehr vorhersehbar sein muss - wie bei eingebetteten Systemen.

  • C ist eine Sprache mit einem Standard und vielen Compilern. OCaml ist ein Software-Artefakt: Der einzige Compiler stammt aus einer einzigen Quelle, und der Compiler ist der Standard. Und dieser Standard ändert sich mit jeder Veröffentlichung. Für Menschen, die Stabilität und Abwärtskompatibilität schätzen, kann eine Sprache aus einer Hand ein inakzeptables Risiko darstellen.

  • Jeder, der einen halbwegs anständigen Compiler-Kurs für Studenten und viel Ausdauer hat, kann einen C-Compiler schreiben, der mehr oder weniger funktioniert und eine angemessene Leistung bietet. Um eine Implementierung von OCaml oder ML auf den Weg zu bringen, ist viel mehr Schulung erforderlich, und um eine vergleichbare Leistung wie bei einem naiven C-Compiler zu erzielen, ist viel mehr Arbeit erforderlich. Dies bedeutet, dass es viel weniger Hobbyisten gibt, die mit Sprachen wie OCaml herumspielen können. Daher ist es für die Community schwieriger, ein tiefes Verständnis dafür zu entwickeln, wie man es ausnutzt.

82
Norman Ramsey

Ich denke, das Problem mit OCaml ist, dass es "out of the box" nicht allzu nützlich ist. Der letztendliche Grund, warum Menschen eine Sprache verwenden, ist, dass sie Bibliotheken hat, die sie benötigen. Da jedoch nichts "out of the box" ist, kommt niemand weit genug in ein Projekt, um zu erkennen, dass er eine Bibliothek schreiben muss. Das Ergebnis ist eine Sprache ohne Bibliotheken, was es schwierig macht, "echte Apps" zu schreiben.

Ich denke, das ist es, woran OCaml leidet - niemand stört sich daran, "echte Projekte" darin zu starten, weil es nur eine Programmiersprache gibt. Ja, ich kann zwei und zwei hinzufügen und das Ergebnis ausdrucken. Das Ergebnis ist eine Sammlung von Bibliotheken, bei denen es sich hauptsächlich um akademische Abbruchware handelt (der Autor hat promoviert und ist weitergezogen), was für praktizierende Programmierer nicht allzu hilfreich ist.

(Ich weiß, dass derzeit daran gearbeitet wird, dies zu ändern, mit Projekten wie "Batterien eingeschlossen". Kommen Sie in 5 Jahren hierher zurück, und vielleicht wird OCaml populärer.)

Es gibt einige Ausnahmen von dieser Regel. Java begann ohne Bibliotheken, aber Sun bezahlte die Leute, um sie alle im eigenen Haus zu schreiben, und dann vermarkteten sie die Hölle daraus. Java Zertifizierung, Java -spezifische Hardware, Java Bücher, Java Klassen usw.) Dann überzeugten sogar die meisten Universitäten, sie ausschließlich zu unterrichten, obwohl es keine sehr gute Sprache ist zum Erlernen der Programmierung zu verwenden.

Das Ergebnis war Popularität. Geld kann viele Probleme lösen.

Drüben in der funktionalen Spracharena können wir sehen, dass Haskell immer beliebter wird. Ich denke, der größte Teil der Popularität ist auf Leute wie Dons zurückzuführen, die nützliche Bibliotheken schreiben und nie aufhören, die Sprache zu vermarkten. Jeden Tag sehen Sie ein paar Haskell-Artikel über Programming Reddit. Dies hält es in den Köpfen der Menschen fest, bis sie schließlich entscheiden: "Ich werde es mit Haskell versuchen." Wenn sie dies tun, sehen sie nützliche Dinge wie Web-Frameworks, Objektdatenbanken, OpenGL-Bibliotheken und XML-Verarbeitungsbibliotheken. Dies bedeutet, dass sie tatsächlich "im Moment" etwas Nützliches tun können. Zwischen dem Potenzial, produktiv zu sein und viel davon zu hören, hat Haskell eine große Popularität erlangt.

CL hat viele der gleichen Bibliotheken wie Haskell und ist fast so schnell, aber niemand spricht darüber, so dass es sich "tot anfühlt". In der Tat ist #LISP viel leiser als #haskell, aber LISP ist immer noch eine sehr produktive Sprache mit vielen Bibliotheken. Keine andere Sprache hat SLIME. Aber Marketing ist sehr wichtig, und Haskell macht es besser als LISP oder OCaml (und konkurriert um dieselbe Nutzerbasis).

Schließlich werden einige Leute niemals Programmierung "bekommen", so dass das Brechen ihres mentalen Modells (Variablen sind Kästchen mit Werten, Code wird von oben nach unten ausgeführt) sicherstellt, dass sie Ihre Sprache nicht verwenden. Diese Art von Programmierern macht einen großen Prozentsatz der Programmierpopulation aus, wodurch die mögliche Nutzerbasis abstrakter Sprachen wie LISP, Haskell und OCaml weiter eingeschränkt wird.

63
jrockway

Ich mag OCaml sehr als Sprache. ABER...

Die Tools-Unterstützung ist einfach nicht da. Der Debugger funktioniert nur in Ordnung, aber nicht unter Windows (zuletzt überprüft) und es sind einfach nicht so viele Entwicklungstools dafür verfügbar.

Sein Typensystem ist manchmal ein bisschen z stark. Für jemanden, der nicht versteht, wie Typinferenz oder das ML-Typensystem im Allgemeinen funktionieren, ist die Tatsache, dass er einem Float keine Ganzzahl hinzufügen kann, sofort ein großes Problem.

Die Standardbibliothek kann manchmal ein inkonsistentes Gefühl haben.

Das Objektmodell scheint etwas kompliziert zu sein, und die Standardbibliothek verwendet es kaum. Stattdessen werden modulbasierte Bibliotheken verwendet.

Es gibt viele andere Dinge, die im Grunde genommen dazu führen, dass sich die Sprache nicht "poliert" anfühlt und die Menschen in der sehr kritischen Phase vertreibt, in der sie eine Sprache lernen und versuchen zu entscheiden, ob sie sie mögen oder nicht.

Ich denke, sein wichtigstes Erbe wird sein, dass es zusammen mit anderen ML-Dialekten einen sehr starken Einfluss auf andere funktionale Sprachen hatte. Die meisten Funktionssprachen der aktuellen Generation verwenden die besten Elemente aus ML-Dialekten und verfeinern einige der Belästigungen.

22
user21714

Eingebettete Systeme erfordern oft zwei Dinge: Geschwindigkeit und Determinismus. OCaml kann Geschwindigkeit bieten, aber die Tatsache, dass es einen Garbage Collector hat, macht es von Natur aus nicht deterministisch und für ein Echtzeitsystem, das so einfach nicht geht.

21
ctacke

Dies ist ein bisschen ein Vergleich zwischen Äpfeln und Orangen. OCaml ist eine relativ junge Sprache [1], und es wurden nie ernsthafte und nachhaltige Anstrengungen unternommen, um sie in den Mainstream zu bringen (mit Ausnahme der aktuellen Arbeit von Microsoft mit F #). Im Gegensatz zu C ist es nicht die Verkehrssprache des am weitesten unterstützten und imitierten Unternehmensbetriebssystems (d. H. UNIX). Im Gegensatz zu Java hat es kein großes Unternehmen als Computerplattform der nächsten Generation vorangetrieben. Im Gegensatz zu Perl, Python und Ruby hat es keine hochkarätige, einflussreiche Nische erreicht (d. H. Seine Nische ist Programmiersprache und automatisierte Argumentationsforschung - im Vergleich zur Webentwicklung nicht sehr bekannt). Daher ist es nicht sehr beliebt.

[1] Fairerweise gibt es die ursprüngliche ML-Sprache seit den 70er Jahren. OCaml erschien jedoch erst 1996 und erbte die Standard-ML-Bibliotheken nicht. In der Praxis ist es eine jüngere Sprache als C, C++, Java, Python, Haskell oder sogar Ruby.

18
Chris Conway

Die OCaml-Community konnte keine große und zuverlässige Standardbibliothek entwickeln (über das hinaus, was OCaml heute bietet), die die Anwendungsentwicklung vereinfacht. Es gibt mehrere Versuche, das Problem zu lösen, aber werfen Sie einen Blick auf Python oder Ruby, um zu sehen, was fehlt. OCaml ist eine großartige Sprache, wenn Sie möchten) Lösen Sie ein algorithmisches Problem, das nicht zu sehr von der Interaktion mit erweiterten Standardmodulen wie XML, Netzwerk, Datenberechnung usw. abhängt, die Sie lieber nicht selbst implementieren möchten.

Ich glaube, dass ein Teil des Problems darin besteht, wie Module von OCaml auf Dateien abgebildet werden: Konzeptionell leben alle * .ml-Dateien im selben Namensraum und Verzeichnisse haben keine Bedeutung. Dies macht es für eine Community schwierig, eine Bibliothek zu entwickeln. Wenn der Compiler Verzeichnishierarchien in Modulhierarchien abbilden würde, würde ich eine bessere Chance sehen, dass sich eine Standardbibliothek entwickelt. Dies würde jedoch erhebliche Anstrengungen der Entwickler des Core-Compilers erfordern. (Ich bin mir der Packmodule bewusst, aber ich denke, das ist ein Kludge.)

Ein weiteres Bibliotheksproblem ist die Binärkompatibilität zwischen Compiler-Releases. Man kann mit ziemlicher Sicherheit sagen, dass der gesamte Bibliothekscode nach einem Compiler-Upgrade neu kompiliert werden muss. Dies macht es schwierig, binäre Releases von Modulen oder Bibliotheken bereitzustellen.

15

Wahrscheinlich, weil zu vielen Menschen ML als Teil einer Einführung in seltsame und verwirrende theoretische Dinge über Typen beigebracht wurde. Das ist mir passiert.

Etwa zur gleichen Zeit wurden mir ML und Smalltalk gezeigt. Smalltalk nur sah aus verdammt cool, und es war sofort verständlich, wofür OO] war und wie man in dieser Umgebung hübsche, interaktive Sachen machen konnte. ML handelte von abstrakten mathematischen Dingen Das schien nicht relevant für das zu sein, was ich tun wollte. Und im Gegensatz zu C versprach ich nicht, schnelle Spiele auf 16-Bit-Mikros schreiben zu dürfen.

Dies ist natürlich zutiefst unfair und subjektiv. Aber das ist wahrscheinlich die wahre Geschichte für die meisten Menschen.

Heutzutage würde die Frage wohl lauten: Jetzt habe ich das Gefühl, dass ich dieses seltsame und verwirrende theoretische Zeug über Typen kennen muss. Warum sollte ich ML gegenüber Haskell oder Erlang wählen?

11
interstar

Ich glaube, dass das Hauptproblem das Fehlen einer tatsächlichen Standardbibliothek ist. Daher Projekt OCaml-Batterien enthalten , das die Situation voraussichtlich erheblich verbessern wird. Es soll innerhalb weniger Tage in die Beta-Phase eintreten, daher müssen Sie die Frage in etwa einem Jahr erneut stellen.

Ich bin damit einverstanden, dass eine schlechte Windows-Unterstützung, eine steile Lernkurve und eine schlanke Standardbibliothek die Akzeptanz von OCaml in der Vergangenheit behindert haben, aber ich möchte hinzufügen, dass es im Vergleich zu Mainstream-Sprachen wie Java einen großen Mangel an Tutorial-Informationen (z. B. Büchern) über OCaml gegeben hat.

Auch die Arten von Menschen, die Sprachen wie OCaml kennen, sind äußerst heterogen. Unter den Webprogrammierern hat vielleicht 1 von 1.000 von OCaml gehört. Unter den Leuten, die an der Universität Cambridge wissenschaftliches Rechnen betreiben, sprachen ungefähr 90% der Leute, die ich kannte, fließend OCaml. In der Tat war ich einer der letzten unter meinen Freunden, die OCaml lernten. Wir haben sogar OCaml auf unserem 256-CPU-Supercomputer ausgeführt ...

Ich sollte auch erwähnen, dass diese Probleme schnell angegangen werden. OCaml hat sich kürzlich mit Projekten wie Ocsigen für die Webprogrammierung neu erfunden und hat in diesem Zusammenhang bereits mindestens zwei große industrielle Erfolgsgeschichten. Es gibt jetzt ein weiteres neues Buch über OCaml. Die Community arbeitet an einer umfassenden Standardbibliothek namens "Batterien enthalten", die gerade in die Beta-Version aufgenommen wurde und fantastisch aussieht. Eine multicore-freundliche Version von OCaml steht kurz vor der Veröffentlichung. Die neueste Version von OCaml enthält auch viele großartige neue Funktionen wie Lazy Patterns und dynamisch geladene native Code-OCaml-Bibliotheken.

8
Jon Harrop

Ich denke, ein Teil des Problems ist, dass funktionale Programmierung für die meisten Menschen keine natürliche Denkweise ist (und ich sage dies als jemand, der ein großes Interesse an und Wertschätzung für funktionale Programmierung hat). Hinzu kommt, dass die überwiegende Mehrheit der Programmierer heute mit dem Erlernen der prozeduralen Programmierung begonnen hat (am beliebtesten OOP Sprachen sind immer noch prozedural) und daher funktionale Sprachen anfangs schwer anzupassen sind.

Als ich mit der Universität anfing, kannte ich bereits eine angemessene Menge an BASIC, C++ und Java und ein bisschen Pascal und x86 Assembler). Ich war weit entfernt von einem Experten, hatte aber die (leicht naive) Schlussfolgerung gezogen dass alle Programmiersprachen im Grunde genommen gleich waren und eine etwas andere Syntax hatten. Unsere Einführung in den Programmierkurs verwendete ML, was mich schnell von dieser Vorstellung ablenkte. Ich hatte in dieser Phase meiner Programmierkarriere Probleme, mich mit ML vertraut zu machen, und sah das nicht wirklich Ich denke, es braucht etwas mehr Erfahrung mit einigen Problemen der prozeduralen Programmierung, um die Vorteile eines funktionalen Ansatzes wirklich zu schätzen.

Unser ML-Dozent behauptete oft, dass das rekursive Ausdrücken von Problemen „natürlicher“ und einfacher sei als die Verwendung von Schleifen oder anderen Verfahrenskonzepten. Ich war nie von dieser Behauptung überzeugt und kaufe sie immer noch nicht. Rekursive Funktionen bieten manchmal besonders elegante und präzise Lösungen für Probleme, aber ich finde es immer noch unnatürlich, über Probleme nachzudenken. Wenn Sie einen sehr starken mathematischen Hintergrund haben, scheint dies vielleicht intuitiver zu sein, aber ich denke nicht, dass es für die meisten Menschen einfach ist, rekursiv zu denken. Angesichts der zentralen Bedeutung rekursiver Funktionen für das Paradigma der funktionalen Programmierung denke ich, dass dies auch ein Grund für die geringere Popularität funktionaler Sprachen sein kann.

Es gibt auch einen Rückkopplungseffekt auf die Popularität der Sprache. Als ich anfing zu programmieren, wollte ich wissen, wie man grafische Effekte und Spiele programmiert. Nachdem ich ein bisschen BBC BASIC und später QBASIC gelernt hatte, untersuchte ich natürlich die am häufigsten von der Demo-Szene und den Spieleprogrammierern verwendeten Sprachen und machte mich daran, C++ und x86 Assembly zu lernen. Heutzutage möchten einige neue Programmierer vielleicht wissen, wie man Webanwendungen erstellt, und werden sich daher für das Erlernen von PHP interessieren, Ruby oder C #. Es gibt nur sehr wenige Anwendungsbereiche für selbst motivierte Anfängerprogrammierer, in denen die Antwort auf ' Was ist die beste Sprache, um etwas wie X zu programmieren? wird 'Ocaml' sein.

Viele der praktischen Gründe für die begrenzte Beliebtheit von Ocaml (Mangel an ausgereiften Bibliotheken, Debuggern, IDEs usw.) werden durch die offizielle Unterstützung von Microsoft für F # als erstklassige .NET-Sprache angesprochen. Es wird interessant sein zu sehen, ob F # dazu beiträgt, dass die funktionale Programmierung immer beliebter wird.

6
mattnewport

Ich glaube, der Kern des Problems ist die Politik. Die Ocaml-Entwickler sind hauptsächlich an Forschung interessiert und verfügen nicht über die Ressourcen, um eine umfangreiche Bibliothek bereitzustellen und zu pflegen. Sie sind jedoch auch nicht bereit, die Kontrolle über das Produkt an die Community weiterzugeben, die über diese Ressourcen verfügt. Das Ergebnis ist, dass mehrere Versuche, dieses Problem zu lösen, auf nicht existierender Zusammenarbeit und Finanzierung von Bibliotheken von Drittanbietern beruhten und diese Versuche fehlschlugen. Batterien fallen aus demselben Grund aus, es sei denn, die Ocaml-Entwickler ändern ihre Einstellung.

Ich verwende Ocaml, um mein Produkt zu entwickeln, und ich habe eine einfache Regel: Minimieren Sie die Abhängigkeit von Code von Drittanbietern. Wenn ein Artikel eines Drittanbieters nützlich ist, fügen Sie die Quellcodes nach Möglichkeit direkt in das Paket ein. Zum Beispiel sind OCS-Schema und Dypgen wesentliche Bestandteile des Felix-Parsers, sodass sie in unsere Quellen kopiert werden, damit wir eine gewisse Kontrolle über sie haben. Die Steuerung ist etwas illusorisch (da Dypgen zumindest so komplex ist, dass es unwahrscheinlich ist, dass wir sie beibehalten können, aber zumindest haben wir eine Kopie, von der wir glauben, dass sie funktioniert :)

Ich werde keine Batterien verwenden, da die Lizenz restriktiv ist, sodass ich die Quelle nicht kopieren kann, und ich habe kein Vertrauen in die langfristige Lebensfähigkeit als eigenständiges Produkt: Ich könnte sie nur verwenden, wenn es so wäre direkt in die Standarddistribution von Ocaml eingearbeitet.

In der C++ - Welt könnte ich nur die Verwendung von Boost in Betracht ziehen: Obwohl es sich um eine Drittanbieter-Bibliothek handelt, die nicht Teil des Standards ist, hat sie eine so starke Community-Unterstützung und ist tatsächlich hervorragend mit dem Entwicklungsprozess für Standards synchronisiert. In Boost entwickelte und getestete Ideen werden zu einer bestehenden Praxis, die standardisiert werden kann, und der Standardisierungsprozess ist offen genug, um die Teilnahme der Community zu ermöglichen.

Ocaml hat die Popularität erlangt, die es tatsächlich hat, weil es ein so feines Produkt ist, aber das reicht nicht aus, um es zu einer Mainstream-Sprache zu machen. Java ist grob, es wurde mit Milliarden von Dollar Marketing und Bibliotheksentwicklung populär gemacht, musste aber am Ende für die Community freigegeben werden, um überhaupt zu überleben.

6
Yttrill

Ich habe es genossen, sowohl in ML als auch in C für eine Vielzahl von Projekten zu programmieren. Das, was mich daran hindert, ML in eingebetteten Projekten zu verwenden (von denen die meisten Echtzeitbeschränkungen haben und eine Validierung erfordern), ist die Speicherbereinigung.

Es gibt Forschungen zur Speicherverwaltung mit Regionen (siehe MLKit ), aber die Komplexität der Implementierungen und Schulungen, die erforderlich sind, um sie ordnungsgemäß zu verwenden (und damit verbundene Risiken) waren ein Hindernis für deren Verwendung.

5
Doug Currie

Nun, wenn es um Geld geht, wie @jrockway sagt, werden wir sehen, ob F # die Popularität wie Java oder C #) gewinnt.

Ich denke, Entwickler fühlen sich mit der funktionalen Arbeitsweise nicht wohl (das stammt aus der F # -Sitzung an den Techdays 2009, in der etwa 10 Personen angaben, dass sie die funktionale Programmierung unter fast 100 Personen kennen).

Ich habe dieses Jahr mit OCAML angefangen, ich habe mir nie die Hände schmutzig gemacht mit funktionaler Programmierung, aber jetzt lerne ich wirklich immer neue Dinge von OCAML und der funktionalen Art, Probleme zu lösen (aber ich kann nicht sagen, dass ich C # aufgeben werde) OCAML verwenden :)).

3
0xFF

IMHO, ich denke, ein großes Problem von OCaml ist nicht die Sprache (das ist großartig), sondern die Menschen, die es entwickeln, und folglich seine Lizenz:

http://caml.inria.fr/ocaml/license.en.html

Sie verwenden die Q Public Lizenz für den Compiler! Ja, die Lizenz ex-Trolltech für Qt-Bibliotheken! Vergessen Sie, mit einer solchen Lizenz einen Beitrag zu erhalten.

Wenn Sie vor etwa 7-8 Jahren das Language Shootout ( http://shootout.alioth.debian.org/ ) überprüft haben, war OCaml direkt hinter C und C++, um die Ausführungsgeschwindigkeit zu ermitteln. In der Zwischenzeit haben andere Sprachen (wie Haskell) einen besseren Compiler erhalten (aufgrund eines anderen Community-Ansatzes, nehme ich an), und jetzt ist die Ausführungsgeschwindigkeit von OCaml nicht mehr so ​​hoch wie in der Vergangenheit.

Kurz gesagt, ich würde OCaml nicht verwenden, da ich nicht sehe, dass es irgendwo besser läuft, ohne dass einige wirklich gute Hacker einen OCaml-Compiler erstellen, der eine WIRKLICH Open-Source-Lizenz und eine Community mit einem WIRKLICH Open-Source-Verhalten hat.

3
Patrizio Rullo

Nun, vielleicht wird F # populär.

2
tuinstoel

Es hilft nicht, dass c-> ocaml ein größerer mentaler Übergang ist als c-> LISP. Ich habe ein paar Mal über ocaml nachgedacht und immer festgestellt, dass das Kosten-Nutzen-Verhältnis einfach nicht für mich da war. Legen Sie es also wieder beiseite. Es waren nicht die Konstrukte, die es schwer aussehen ließen, die sahen wirklich ordentlich aus. Es wurde versucht, eine ganz andere Bedeutung für '!' Zu lernen. LISP sieht zumindest so anders aus, dass es leicht zu vermeiden ist, kleine Teile davon falsch zu interpretieren als c.

2
Kim Reece

Wenn Sie möchten, dass eine Sprache in eingebetteten Echtzeitsystemen verwendet wird, benötigen Sie Zeiger und können sich keinen GC leisten.

2

Ich denke, der Hauptgrund ist, dass zu wenige Entwickler OCaml kennen.

Und wenn ich mit anderen Entwicklern spreche (denen, die etwas über Ocaml gehört haben), habe ich immer den Eindruck, dass sie OCaml als eine "Nur-Bildung" -Sprache betrachten ... traurig, aber wahr

1
Chris

Ich mag O'caml sehr ... Ich habe eine Reihe von Dingen implementiert, die es verwenden, Compiler, Interpreter, System, um mit C zu kommunizieren ...

als ich es lernte, war das Hauptproblem, dass die Fehlermeldungen nicht wirklich klar sind. Zum Beispiel war ich mir am Anfang nicht sicher, wann ich ';' und das war wirklich schwer zu finden, dass tatsächlich die; wurde verlegt ...

0
LB40