UP | HOME | CONTENT

Gehasste und geliebte Sprachen

(dark mode)đŸŒ“ïžŽ

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.


PDF (drucken)

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.

Und JSON will bite us badly.

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

Dr. Arne Babenhauserheide 2025-11-06 Do 00:00 - Impressum - GPLv3 or later (code), cc by-sa (rest)    
Search your soul and add the goal to favor building with Guile Wisp.