hippodriver
Well-Known Member
Oder auch: "Warum sind C und C++ immernoch die dominanten Sprachen im Unixumfeld?"
Auf meinen Streifzügen durch die Welt der Programmiersprachen begegnete ich manchem Juwel. Aber für den praktischen Einsatz unter Unix gibt es immer Einschränkungen.
Da sind zunächst die klassischen Sprachen aus der C Familie: C, C++, Object C, D, Java und C#. C ist in keiner Weise modern. Alle anderen sind wiederkehrende Aufgüsse von "C mit Klassen". Absoluter Spitzenreiter in dieser Kategorie ist C#; der 2. Versuch einer Kopie einer ehemals abgespeckten (C++)-Kopie, die später dicker wurde als das Original.
Die Pascal-Reihe fand mit Ada ihr Ende. Nebenläufigkeit im Sprechkern und die beste Unterstützung für eigene Datentypen, die ich je gesehen habe, können über die Mängel nicht hinwegtäuschen. Die Lizenzsituation ist bestenfalls unübersichtlich. Die Standardbibliothek unfasst keine Schnittstellen nach außen: Netzwerk, XML, RPC, Datenbanken, GUI, ... Es gibt kaum freie, gewartete Bibliotheken von Drittherstellern.
Die Basic Familie -- lassen wir das.
Die populären Skriptsprachen, Perl, Python, Ruby und (Lua) haben eine umfangreiche Bibliothek und lassen sich interaktiv nutzen. Python ist schon super. Ihre Probleme sind immer die gleichen: Big Interpreter Locks --> kein echtes multithreading, langsame Programmausführung, keine (optionale) statische Typisierung.
Ansi Common Lisp ist eine herausragende Sprache. Es gibt mehrere gute, freie Implementierungen. Die Syntax ist extrem einfach, das Objektsystem CLOS mächtig und die Macros einzigartig. Meiner Meinung nach die perfekte Sprache. Nur das ganze Drumherum passt nicht. Die Standardbibliothek entspricht nicht mehr den modernen Anforderungen, vgl. Ada. Es gibt nur wenige gepflegte, externe Bibliotheken. Die Bibliotheken sind oft abhängig von der jeweiligen Implementierung. Die Dokumentation der Bibliothekn ist, vorsichtig ausgedrückt, unterirdisch. Neuere Abkömmlinge haben auch wieder Probleme: Clojure braucht die JVM von Java. NewLisp hat wieder per default dynamic scope.
Dylan mixt die Stärken von Lisp mit einer Infixnotation und einer modernen Standardbibliothek. Leider ist die Entwicklungsumgebung opendylan nur unter Windows vollständig zu gebrauchen. Unter Unix läuft die IDE nicht. Der Listener, in anderen Sprachen auch als REPL oder Toplevel bekannt, steht nicht zur Verfügung. Es gibt kein GUI binding. Die Entwicklung ist so gut wie tot.
OCaml ist, unter praktischen Gesichtspunkten, die beste der modernen Sprachen. Wenn da nicht der giant lock auf der Runtime wäre. Aber sonst ist es toll: Ein interaktives Toplevel, Compiler für Bytecode und für native code, viele Bibliotheken, bindings für GTK2 und OpenGL, schnelle Programmausführung (native code). Der bytecode debuger ist lustig, der kann sogar rückwärts laufen. Es wird sowohl funktionale, wie auch prozedurale Programmierung gut unterstützt. Das Objektsystem ist allerdings langweilig. Das tollste an der ganzen Sache ist das type inference. Damit hat man statische Typisierung ohne jedesmal die Typen explizit angeben zu müssen.
Und jetzt meine Wunschliste für die moderne Sprache auf Unixsystemen:
Also um es kurz zu machen: eine Kreuzung aus Lisp, OCaml und Python.
Sollte es sowas geben, bin ich für Vorschläge offen. So bedauerlich es ist, aber am nächsten kommt den Anforderungen vermutlich F# für .NET.
Auf meinen Streifzügen durch die Welt der Programmiersprachen begegnete ich manchem Juwel. Aber für den praktischen Einsatz unter Unix gibt es immer Einschränkungen.
Da sind zunächst die klassischen Sprachen aus der C Familie: C, C++, Object C, D, Java und C#. C ist in keiner Weise modern. Alle anderen sind wiederkehrende Aufgüsse von "C mit Klassen". Absoluter Spitzenreiter in dieser Kategorie ist C#; der 2. Versuch einer Kopie einer ehemals abgespeckten (C++)-Kopie, die später dicker wurde als das Original.
Die Pascal-Reihe fand mit Ada ihr Ende. Nebenläufigkeit im Sprechkern und die beste Unterstützung für eigene Datentypen, die ich je gesehen habe, können über die Mängel nicht hinwegtäuschen. Die Lizenzsituation ist bestenfalls unübersichtlich. Die Standardbibliothek unfasst keine Schnittstellen nach außen: Netzwerk, XML, RPC, Datenbanken, GUI, ... Es gibt kaum freie, gewartete Bibliotheken von Drittherstellern.
Die Basic Familie -- lassen wir das.
Die populären Skriptsprachen, Perl, Python, Ruby und (Lua) haben eine umfangreiche Bibliothek und lassen sich interaktiv nutzen. Python ist schon super. Ihre Probleme sind immer die gleichen: Big Interpreter Locks --> kein echtes multithreading, langsame Programmausführung, keine (optionale) statische Typisierung.
Ansi Common Lisp ist eine herausragende Sprache. Es gibt mehrere gute, freie Implementierungen. Die Syntax ist extrem einfach, das Objektsystem CLOS mächtig und die Macros einzigartig. Meiner Meinung nach die perfekte Sprache. Nur das ganze Drumherum passt nicht. Die Standardbibliothek entspricht nicht mehr den modernen Anforderungen, vgl. Ada. Es gibt nur wenige gepflegte, externe Bibliotheken. Die Bibliotheken sind oft abhängig von der jeweiligen Implementierung. Die Dokumentation der Bibliothekn ist, vorsichtig ausgedrückt, unterirdisch. Neuere Abkömmlinge haben auch wieder Probleme: Clojure braucht die JVM von Java. NewLisp hat wieder per default dynamic scope.
Dylan mixt die Stärken von Lisp mit einer Infixnotation und einer modernen Standardbibliothek. Leider ist die Entwicklungsumgebung opendylan nur unter Windows vollständig zu gebrauchen. Unter Unix läuft die IDE nicht. Der Listener, in anderen Sprachen auch als REPL oder Toplevel bekannt, steht nicht zur Verfügung. Es gibt kein GUI binding. Die Entwicklung ist so gut wie tot.
OCaml ist, unter praktischen Gesichtspunkten, die beste der modernen Sprachen. Wenn da nicht der giant lock auf der Runtime wäre. Aber sonst ist es toll: Ein interaktives Toplevel, Compiler für Bytecode und für native code, viele Bibliotheken, bindings für GTK2 und OpenGL, schnelle Programmausführung (native code). Der bytecode debuger ist lustig, der kann sogar rückwärts laufen. Es wird sowohl funktionale, wie auch prozedurale Programmierung gut unterstützt. Das Objektsystem ist allerdings langweilig. Das tollste an der ganzen Sache ist das type inference. Damit hat man statische Typisierung ohne jedesmal die Typen explizit angeben zu müssen.
Und jetzt meine Wunschliste für die moderne Sprache auf Unixsystemen:
- Garbage Collection
- Multithreading
- moderne, umfangreiche Standardbibliothek
- einfaches FFI für C
- statische Typisierung mit type inference
- Echte Makros, wie bei Lisp, kein C Präprozessor Gegurke
- Objektsystem aus Common Lisp
- Interaktives Toplevel
- native compiler
- bindings für GUI und OpenGL
- IDE mit Emacs key bindings
- Vollständige Dokumentation
- freie Lizenz, nicht viral
Also um es kurz zu machen: eine Kreuzung aus Lisp, OCaml und Python.
Sollte es sowas geben, bin ich für Vorschläge offen. So bedauerlich es ist, aber am nächsten kommt den Anforderungen vermutlich F# für .NET.