8 Punkte von GN⁺ 2024-03-07 | 1 Kommentare | Auf WhatsApp teilen
  • Dada ist ein Gedankenexperiment mit dem Ziel, eine Sprache wie Rust zu schaffen, die sich jedoch eher wie Java oder JavaScript anfühlt und weniger komplex ist als C++.
  • Wenn man sich eine Sprache vorstellt, die nicht für den Einsatz in Kerneln oder kleinen eingebetteten Geräten gedacht ist, sondern nur eine minimale Runtime benötigt – wie würde sie aussehen?
  • Dada ist eine eigentumsbasierte Sprache und hat einige Ähnlichkeiten mit Rust:
    • Wie Rust benötigt Dada keinen Garbage Collector.
    • Wie Rust garantiert Dada Speichersicherheit und Freiheit von Data Races.
    • Wie Rust werden Dada-Datenstrukturen auf dem Stack allokiert und verwenden ein flaches Speicherlayout.
  • Allerdings unterscheidet sich Dada auch in vielerlei Hinsicht:
    • Wie TypeScript ist Dada eine schrittweise typisierte Sprache:
      • Ohne Typannotationen kann man Dada im Interpreter verwenden, um zu verstehen, wie die Sprache funktioniert.
      • Wenn man sich daran gewöhnt hat, kann man Typannotationen hinzufügen und einen Compiler verwenden, der eine Rust-ähnliche Performance liefert.
    • Dada zielt primär auf WebAssembly ab:
      • Man kann mit Dada native Targets bauen, aber das FFI-System basiert auf WebAssembly Interface Types.
    • Dada ist objektorientiert, aber nicht auf reine Weise:
      • Dada kombiniert gute Eigenschaften von OO mit Funktionen wie Pattern Matching und ist von Sprachen wie Scala inspiriert.
  • Im Vergleich zu Rust hat Dada einige Einschränkungen:
    • Dada hat eine verpflichtende Runtime und zielt nicht auf „Bare-Metal-Systeme“ oder Kernel ab.
    • Dada unterstützt weder Inline-Assembly noch beliebigen unsicheren Code.

Wie ist der aktuelle Stand von Dada?

  • Derzeit existiert Dada noch nicht wirklich, es gibt aber einige experimentelle Prototypen:
    • Eine experimentelle operationale Semantik, implementiert in PLT Redex, findet sich in dada-lang/dada-model.
    • Ein in Rust geschriebener Interpreter ist im Repository dada-lang/dada zu finden, und im Dada Playground kann man einen WebAssembly-basierten Build ausprobieren.

Meinung von GN⁺

  • Dada spiegelt Trends moderner Programmiersprachen wider, indem es die Kernfunktionen von Rust wie Speichersicherheit und die Vermeidung von Data Races beibehält und zugleich über schrittweise Typisierung und einen objektorientierten Ansatz eine entwicklerfreundliche Sprache anstrebt.
  • Die Ausrichtung auf WebAssembly als Hauptziel zeigt Dadas Potenzial für die Entwicklung webbasierter Anwendungen und entspricht modernen Webentwicklungstrends, bei denen Browser-Kompatibilität und Plattformunabhängigkeit wichtig sind.
  • Falls Dada tatsächlich entwickelt und breit genutzt wird, könnte es bestehenden Rust-Entwicklern ein höheres Abstraktionsniveau und mehr Komfort bieten und Java- oder JavaScript-Entwicklern den Wechsel zu einer Systemprogrammiersprache erleichtern.
  • Da sich Dada jedoch noch in einem frühen Stadium befindet und Performance sowie Stabilität in realen Produktionsumgebungen nicht validiert sind, ist vor einer Einführung in Unternehmen oder Projekten Vorsicht geboten.
  • Andere Sprachen mit ähnlichen Zielen wie Dada sind Kotlin oder Swift; sie sind bereits weit verbreitet und können für Entwickler gute Alternativen sein.

1 Kommentare

 
GN⁺ 2024-03-07
Hacker-News-Kommentare
  • Sympathie für die Idee einer „Gedankenexperiment-Sprache“

    • Eine echte Sprache zu entwickeln ist eine große Belastung, und es macht Spaß, sich vorzustellen, wie eine ideale Sprache aussehen würde.
    • Es gibt viele Vorstellungen von einem „Rust auf höherem Niveau“; persönlich werden eine dynamische Runtime und einfache Typen bevorzugt, aber andere haben andere Anforderungen.
    • Zusätzliche Funktionen wie ein graduelles Typsystem passen zu manchen Sprachen, aber es wird bevorzugt, von Anfang an die Garantien einer vollständig statisch typisierten Codebasis zu haben.
  • Fragen zum Beispiel „Hello, Dada!“

    • Aus Sicht eines Python-Nutzers stellt sich die Frage, warum man sich um await kümmern muss, wenn das Ziel nur die Ausgabe auf der Konsole ist.
    • Es wirkt, als würden Komplexität und kognitive Belastung bereits hier beginnen.
  • Wunsch nach einer gegensätzlichen Sprache

    • Gewünscht wird eine Sprache mit Rusts ausdrucksstarkem Typsystem und Syntax, aber mit Garbage Collector und Runtime.
    • Man möchte nicht die Performance-Kosten zahlen und würde eine Sprache wie Go mit Rusts Typsystem bevorzugen.
  • Gegenmeinung zu „async/await“

    • In Hochsprachen seien Gos Green Threads wohl besser geeignet.
    • Graduelles Typing ist interessant, aber nicht zwingend nötig. Statisches Typing ist nicht belastend und kann das Schlussfolgern über Performance erschweren.
    • Typinferenz wäre aus dieser Sicht besser als graduelles Typing.
  • Kommentar zum Gefühl von Java und JavaScript

    • Es wird darauf hingewiesen, dass Java und JavaScript sich sehr unterschiedlich anfühlen.
  • Das Fehlen von GC macht Rust in eingebetteten Systemen zu einer angenehmen Erfahrung

    • Es lässt sich leicht mit anderen Programmen verbinden, und der schnelle Programmstart ist einer von Rusts wichtigsten Vorteilen.
    • Rust mit Garbage Collection würde diesen Vorteil möglicherweise aufgeben.
  • Gemischte Gefühle zur Erfahrung mit Rust

    • Die Muster für Speichersicherheit gefallen, aber im Vergleich zu C++ wirkt die Syntax schwieriger.
    • Der Code sei mental schwerer zu lesen.
    • Weniger Dekorator-Magie und symbolbasierte Syntax würden es Einsteigern leichter machen, die Sprache zu verstehen.
  • Interesse an der Behauptung, dass sich mit zusätzlichen Typannotationen eine Rust-ähnliche Performance erzielen lässt

    • Eine Sprache, die sich so leicht schreiben lässt wie JavaScript und bei gerechtfertigtem Mehraufwand so schnell wie Rust werden kann.
  • Verwirrung über die Methode „print_point“ im Tutorial

    • Es wird eine ausführlichere Erklärung der Bedeutung von async und await gewünscht.
    • Es wird gefragt, ob async/await eine ähnliche Rolle wie lazy ausgewertete Werte spielt und ob verschiedene Kombinationen Typfehler verursachen.
  • Unzufriedenheit darüber, Syntaxbeispiele für neue Programmiersprachen finden zu müssen

    • Die Bitte, auf der Landingpage neuer Programmiersprachen direkt ein „Hello World“-Syntaxbeispiel bereitzustellen.