1 Punkte von GN⁺ 2026-01-09 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Der Schlüssel zur Produktivität beim Programmieren liegt weniger in der Sprache selbst als in einem reichen Bibliotheks-Ökosystem
  • Frameworks wie Ruby on Rails, die fortgeschrittene Sprachfunktionen nutzen, bieten selbst Nicht-Spezialisten hohe Produktivität
  • Wegen struktureller Grenzen von Sprachen ist es jedoch schwierig, ein Framework auf dem Niveau von Rails in Java oder C umzusetzen
  • Sprachdesign bestimmt direkt Form und Komplexität der Bibliotheken, die geschrieben werden können, und genau darin liegt der eigentliche Zweck der Weiterentwicklung von Sprachen
  • Die Sprache Stanza zeigt aus dieser Perspektive, wie wichtig Sprachdesign ist, um leistungsfähige und leicht nutzbare Bibliotheken zu ermöglichen

Die Beziehung zwischen Programmiersprachen und Bibliotheken

  • Die meisten Programmiersprachen besitzen ähnliche Grundelemente wie Variablen, Arrays, Schleifen und Funktionen
    • Einige Sprachen bieten fortgeschrittene Funktionen wie Funktionen erster Klasse oder Coroutines, doch Nicht-Spezialisten nutzen diese kaum
  • Für viele Entwickler ist der entscheidende Produktivitätsfaktor nicht die Sprache, sondern die Bibliothek
    • Ruby on Rails macht es zum Beispiel leicht, datenbankgestützte Webanwendungen zu erstellen
    • Dank Rails ist die Präferenz für das Framework oft größer als die für die Ruby-Sprache selbst

Das Zusammenspiel von Ruby on Rails und Sprachfunktionen

  • Rails nutzt verschiedene Funktionen von Ruby wie Metaprogrammierung, Auswertung zur Laufzeit, Funktionen erster Klasse und Garbage Collection
    • Beispiel: ActiveRecords verwendet Metaprogrammierung, das Template-System nutzt Laufzeitauswertung
    • Die Ereignisbehandlung wird umgesetzt, indem Funktionen erster Klasse als Callbacks übergeben werden
  • In Java oder C fehlen diese Fähigkeiten, sodass die Umsetzung eines Frameworks auf Rails-Niveau unmöglich ist
    • Die Metaprogrammierung in Java ist nicht mächtig genug, um ActiveRecords zu implementieren
  • Daher ist Rails nur dank der Struktur der Ruby-Sprache möglich, und Sprachdesign bestimmt die Möglichkeiten von Bibliotheken

Sprachdesign bestimmt die Form von Bibliotheken

  • Die Sprache C unterstützt Wiederverwendung nur über Funktionsdeklaration und -aufruf, daher bestehen die meisten C-Bibliotheken aus Sammlungen von Funktionen
  • Ruby unterstützt Funktionen erster Klasse und kann dadurch „welche Aktion bei einem Button-Klick ausgeführt werden soll“ knapp ausdrücken
    • In Java muss man dagegen eine Handler-Klasse definieren, wodurch der Code komplexer wird
  • Die Ausdrucksstärke einer Sprache bestimmt Struktur und Benutzbarkeit von Bibliotheken unmittelbar

Interaktive Software und das Aufkommen erweiterbarer Frameworks

  • Im Batch-Computing der 1970er Jahre reichten funktionszentrierte Bibliotheken aus
  • In moderner interaktiver Software sind erweiterbare Bibliotheken erforderlich
    • In GUI- oder ereignisbasierten Systemen wird eine Struktur benötigt wie: „Führe meinen Code aus, wenn der Benutzer klickt“
  • Java und C++ unterstützen Erweiterbarkeit durch Vererbung und Methodenüberschreibung, und diese Struktur entwickelte sich zu Frameworks

Hintergrund des Stanza-Designs und Grenzen von Sprachen

  • Die Motivation für das Design von Stanza entstand aus der Schwierigkeit, in Java leicht nutzbare Bibliotheken für die Spieleprogrammierung zu schreiben
    • In Java musste Nebenläufigkeit als Zustandsmaschine (state machine) ausgedrückt werden
    • Scheme unterstützt Continuations und erlaubt dadurch eine intuitivere Umsetzung
  • Scheme unterstützt jedoch keine statische Typprüfung, wodurch Debugging weniger effizient ist
    • Die meisten heutigen Sprachen können ihr Typsystem nicht per Bibliothek erweitern
  • Stanza bietet ein optionales Typsystem, Garbage Collection und ein auf Multimethoden basierendes Objektsystem
    • Ein benutzerdefiniertes Objektsystem lässt sich jedoch nicht neu schreiben

Ziel von Sprachen und Forschungsrichtungen

  • Das Ziel allgemeiner Programmiersprachen ist es, die Erstellung leistungsfähiger und leicht nutzbarer Bibliotheken zu unterstützen
    • Je mächtiger eine Sprache ist, desto knapper wird die Nutzung von Bibliotheken
  • Wenn Code gut entworfene Bibliotheken verwendet, besitzt er eine Natürlichkeit, als würde man einem Kollegen Anweisungen geben
  • Racket, Shen und Forschungen zu Metaobjektprotokollen untersuchen erweiterbare Typ- und Objektsysteme
  • Letztlich unterscheiden sich Sprachen danach, „welche Bibliotheken man nutzen kann und welche nicht
  • Hinter eleganten Bibliotheken stehen jahrzehntelange Forschung und Designarbeit an Programmiersprachen

Noch keine Kommentare.

Noch keine Kommentare.