Gehasste und geliebte Sprachen
In der Vorlesung wurde ich gestern nach Programmiersprachen gefragt: welche werden gehasst und welche werden in Freier Software geliebt? Und wie gerechtfertigt ist das? Knappe Kommentare, zugespitzt.
Spoiler: die RealitÀt ist weit differenzierter als verbreitete Vorurteile. Lasst euch nicht durch eure Vorurteile blockieren. Auch nicht durch meine.
Etwas ĂŒberarbeitete Fassung der aus dem Ărmel geschĂŒttelten EinschĂ€tzung in der Vorlesung. Immernoch aus dem Ărmel geschĂŒttelt, aber mit ein paar Links.
Mehr Sprachen und Sichtweisen: TIOBE Index und StackOverflow Survey und Steve Yeggeâs tour-de-babel.
Disclaimer: das hier ist meine Meinung. Andere sehen das anders. Vielleicht zurecht. Ich habe das mal anders gesehen. Und werde es in Zukunft anders sehen. Niemand weiĂ wirklich, was gut ist. ErgĂ€nzungen gerne ĂŒber Mastodon.
Gehasste Sprachen
Fortran
Alte Leute mussten alle damit arbeiten und hassen es. Im Studium fanden wir es alle schrecklich und ich habe in der Doktorarbeit zwei Jahre gebraucht, um die Vorurteile zu ĂŒberwinden.
Es ist alt und hat einiges an Deklarationsoverhead, schreibt sich fĂŒr Mathematik aber sogar angenehmer als Python und ist fast 100x schneller. Ich habe einen kleinen Einstieg geschrieben.
Fortran 90 ist allerdings auch eine viel elegantere Sprache als Fortran 77 (das Die Altenâą lernten).
Und Fortran-Code von vor 40 Jahren lÀuft heute noch.
Wenn eine Sprache nicht gehasst wird, war sie nie beliebt âŠ
COBOL
Alte Leute in Finanzen und Verwaltung mussten damit arbeiten. Elon Musk findet, es sollte ĂŒber KI-Ăbersetzung durch Java ersetzt werden.
Die proprietĂ€ren Compiler sind teuer und gnuCOBOL ist noch langsam, ĂŒber die EU wird aber Arbeit an freien COBOL-Werkzeugen unterstĂŒtzt.
Ich erwarte ein Comeback.
Java
Lange Zeit die am weitesten verbreitete Programmiersprache, mit viel Overhead und harter Abstraktion, gleichzeitig aber Reflection, die sie bricht. Es braucht eher mehr RAM, floating Point Mathematik ist suboptimal und es ist fĂŒr low-level Arbeit unpraktisch (keine unsigned bytes âŠ).
Langatmig: Braucht viel Code fĂŒr wenig Logik.
Es gibt Bibliotheken fĂŒr alles. Oft schlecht dokumentierte Bibliotheken. Industriestandard.
Java ist in den letzten Jahren aber eleganter geworden (z.B. durch Lambdas
und Records und var) und die JVM ist flexibel und schnell.
Javascript
FĂŒr Jahrzehnte funktionierte nur Javascript fĂŒr Web-Frontends ohne Neuladen. Die Sprache ist inkonsistent und gefĂ€hrlich und falsy und truthy und das scoping in geschachtelten lambdas haben schon einige fiese Bugs produziert. Braucht durch Geschwindigkeitsoptimierungen (Beispiel: Multi-Tier-JIT) vergleichsweise viel Speicher.
Aber Javascript von vor 10 Jahren lÀuft heute noch.
Und es schafft gleichzeitig eine minimale Startverzögerung von Quellcode aus.
Dass Javascript schnell wurde (Node.js im Benchmarksgame) beweist, dass jede Sprache bis auf Faktor 3 an C herankommen kann, wenn nur genug Geld und Fachkenntnis auf die Optimierung geworfen wird.
PHP
Kann alle Paradigmen und fĂ€llt dir sicher auf die FĂŒĂe. Wurde viel von Leuten genutzt, bevor sie richtig Programmieren konnten. War frĂŒher sehr langsam, aber Facebooks Hack-Versuch hat bewiesen, dass auch PHP schnell sein kann und PHP 7+ ist schneller als Python. Der einfachste Schritt von statischen zu dynamischen Seiten.
PHP war auf jedem Server verfĂŒgbar, weil seine Sandbox den Betrieb dort einfach und (fĂŒr den Serverbetreiber) verlĂ€sslich machte.
PHP lĂ€uft immernoch hinter vielen groĂen Webseiten.
Prolog
Wird an Unis gelehrt, um Logikprogrammierung zu lernen.
Es war vor dem zweiten KI Winter 1987 die EuropÀische Antwort auf Lisp. Sega hat damit 1986 einen KI-Computer veröffentlicht. MAME kann ihn seit 2024 emulieren.
Lisp/Scheme
Lots of Irritating Superfluous Parentheses. Nach dem KI-Winter wurde es durch andere Sprachen verdrĂ€ngt, auĂer ihr nutzt Emacs (wie ich). Seine Features tauchen immer wieder auf.
Mehr dazu bei den geliebten Sprachen.
XML und XSLT
Komplex, schmerzhaft durch nur halb funktionierendes XSLT, das versucht zu liefern was Lispâs match kann, aber immer nur auf eine von fĂŒnf dokumentierten Arten funktioinert. Und XML zu Parsen braucht signifikant Rechenleistung.
Nimm Lisp und verzehnfache den Syntax-Overhead. Dann benutz es als Programmcode fĂŒr Remote Procedure Calls (RPC). Um ein lĂ€ngeres Hello World zu schreiben, braucht ihr Shakespeare Lang.
Aber es gibt in allen Sprachen Parser dafĂŒr, es kann mit Schemata validiert werden, und es ist streng definitert.
YAML
Menschenlesbares XML trifft Pythonisiertes JSON mit mehr Fallstricken und weniger Bibliotheken - und noch mehr Falschverwendung. Liest sich fast wie Markdown, aber mit EinrĂŒckung.
Ich habe 2008 aufgehört es zu nutzen, weil unsortierte Hashmaps in einem menschenlesbaren Format blöd sind: der Roundtrip Programm-zu-Programm funktionierte gut, aber Serialisiert-zu-Serialisiert funktionierte nur mit zusĂ€tzlichen Listen, weil Hashmaps ihre SchlĂŒssel umsortieren können.
Zehn Jahre spĂ€ter kam es ĂŒber Docker u.Ă€. zurĂŒck. Hashmaps sind jetzt in den meisten Sprachen nach insert-Reihenfolge sortiert (mein Problem ist also gelöst) und es ist sicherer fĂŒr Zahlen als JSON (auĂer von Javascript aus, das castet Nummer-Strings zu Zahlen âŠ), aber Leute haben angefangen, statt Makefiles Pseudo-Shell-Skripte als YAML-Listen zu schreiben, die alle Fallstricke von Shell-Skripten mit Sonderregeln in YAML kombinieren.
YAML kann viel und hat viele Sonderregeln fĂŒr Menschenlesbarkeit, die bei Serialisierung stören können.
Version 1.2 von 2009 löst viele der Probleme, aber das verwendet fast niemand.
Inzwischen gibt es in vielen Sprachen langsame, inkompatible Parser dafĂŒr, aber ich lese YAML gerne. Der Lynchmob ruft schon âș
Geliebte Sprachen
Rust
Von Mozilla gefördert, hat in Firefox groĂe Fortschritte ermöglicht, wird von allen geliebt und produziert 500 MiB groĂe Projekte mit massiven Compilezeiten aus ein paar dutzend Seiten Code.
Wird fĂŒr mich erst interessant, wenn mit GCCrs eine zweite Implementierung verfĂŒgbar ist, deren Hardware-Support nicht durch das von Apple kontrollierte LLVM begrenzt ist
Go
Einfach aufzusetzen, baut kleine Binaries, einfache ParallelitÀt, einfach zu lernen durch absichtliche Begrenzung, begrenzt durch absichtliche Begrenzung (Leute beschweren sich, dass sie gegen WÀnde laufen).
Lua
Kann leicht als Skriptsprache in Spiele eingebunden werden, kann mit LuaJIT schnell sein. Ich habe nie mehr als ein Hello World gebaut.
C
Elegant in der NĂ€he zur Hardware. Leicht fĂŒr Leute mit viel Hintergrundwissen. Pointer sind gefĂ€hrlich. Doppelpointer sind doppelt gefĂ€hrlich.
GroĂes Risiko von Speicherfehlern, durch Tooling aber teilweise erschlagen.
C++
FĂŒr Leute, die glauben, dass sie programmieren können. Wahnsinnige KomplexitĂ€t mit mehr FuĂangeln als Javascript, aber fĂŒr maximale Leistung von komplexen Systemen nĂŒtzlich.
FĂŒgt Klassen zu C hinzu. Und ein Turing-VollstĂ€ndiges Template-System, mit dem Laufzeiteinsparungen durch Compilezeitkosten erkauft werden können.
Smart Pointer sind sicherer als Pointer, mĂŒssen dafĂŒr aber genutzt werden.
Nicht ganz so groĂes Risiko von Speicherfehlern wie C, durch Tooling teilweise erschlagen.
Typescript
Typen in Javascript: Die FuĂangeln von Javascript gepaart mit der Langatmigkeit von Java, aber etwas leichteres Refaktorieren durch Typ-PrĂŒfungen. Deren Korrektheit aber nicht fĂŒr Laufzeit gilt â es ist ein teurer Linter mit viel Overhead, findet aber echte Fehler.
Löst keine Kommunikationsprobleme. Kontrolliert von Microsoft.
Python
Leicht zu lernen, Sehr gute Dokumentation, sehr nette Community, langsam, braucht in groĂen Projekten viele Hacks fĂŒr gute Startzeit.
FrĂŒher: âschreib nur Performance-Kritisches in Câ. Heute: âSchreib ein Python-Frontend fĂŒr ein riesiges C++-KI-Modellâ. FrĂŒher genau eine verstĂ€ndliche Syntax. Heute stehlen comprehensions den eingerĂŒckten for-loops die Show.
Es gibt Bibliotheken fĂŒr alles. Gut dokumentierte. Darunter scipy und matplotlib.
Unter der Haube von scipy lÀuft viel Fortran. Teils sehr, sehr alt. Und schnell.
Lisp/Scheme
Lots of Irritating Superfluous Parentheses. Nach dem KI-Winter wurde es durch andere Sprachen verdrÀngt, aber seine Features tauchen immer wieder auf.
(ja, Lisp wird geliebt und gehasst)
FĂŒr die Leute, die die Grenzen von Softwareentwicklung austesten und ihr Hobby sicher nicht im Job verwenden wollen.
(vielleicht Àndert sich das noch)
Es gibt ein Scheme fĂŒr jede DomĂ€ne – von Embedded Device bis Webservice.
Um der Lisp Curse zu entgehen, beachtet den Lisp Curse Redemption Ark und den Zen for Scheme. Um die Klammern zu verringern, nutzt Wisp (Scheme) oder Whisper (Common Lisp). Dann gibt es noch weniger Sprachkundige.
Ich verwende in meinen Hobby-Projekten Guile Scheme (â py2guile und Programming Essentials with Scheme und with Wisp). Das hier ist also mit Vorsicht zu genieĂen.
GĂ€stebuch :-)
HĂ€ndisches GĂ€stebuch: schreib einfach ĂŒber Mastodon, dann fĂŒge ich es ein.
Ansible
Siehe YAML âș
Forth
Mix aus interpretierter und kompilierter Sprache mit einer extrem kleinen und schnellen Laufzeitumgebung.
Auf PalmOS die Sprache, um Apps on-device zu entwickeln (das ging).
1982 kam der Jupiter Ace mit Forth im ROM heraus, wÀhrend alle anderen
Heimcomputer noch BASIC im ROM hatten. Deshalb wurde er kein Erfolg,
aber ein spannendes Experiment.
— deBaer
JSON
Javascript Object Notation. Hat keine Kommentare, deswegen ist es anders als m3u-Listen kompatibel geblieben. Und deswegen gibt es X âJSON mit Kommentarenâ-Projekte.
Danke fĂŒr den Hinweis an knoppi!
AWK
đŹđ§ AWK is kind of perfect for what it does (data-driven stuff and
combining it with other specialized command line tools) and it doesn't
pretend to be the one language for everything.
– eruwero