X-Design-Notizen: Vereinheitlichung von OCaml-Modulen

2025-09-09

Der Autor entwirft eine neue Programmiersprache, X, die die Typinferenz und strukturelle Subtypen von PolySubML mit den meisten Funktionen von OCaml kombinieren soll. Besonders wird auf die syntaktischen und konzeptionellen Unterschiede zwischen dem OCaml-Modulsystem und gewöhnlichen Werten eingegangen. Der Beitrag beschreibt detailliert, wie OCaml-Module in X vereinheitlicht werden, einschließlich Alias-Member in Datensätzen, struct- und sig-Syntax, Modulöffnungen und -einschlüsse, Modulerweiterungen und Abstraktion mit existentiellen Typen. Verbesserungen am OCaml-Modulsystem werden vorgeschlagen, z. B. die Vermeidung von Wildcard-Importen. Das endgültige Ziel ist eine einfachere, verständlichere und leistungsfähigere Programmiersprache.

Mehr lesen
Entwicklung

Jenseits von Hindley-Milner: Ein Tutorial zum Cubiml-Compiler mit algebraischer Subtypisierung

2025-06-13

Diese Blog-Post-Serie stellt Cubiml vor, ein Compiler-Tutorial, das auf einem neuartigen Typrückschlusssystem namens "kubische Biunifikation" basiert, einer Verbesserung der algebraischen Subtypisierung. Es behebt die Einschränkungen der fehlenden Unterstützung für Subtypisierung im Hindley-Milner-System und bietet eine leistungsfähigere und intuitivere Typrückschluss. Das Tutorial führt durch die Implementierung von Cubiml mit detaillierten Codebeispielen, die Boolesche Werte, Bedingungsanweisungen, Datensätze, Funktionen, let-Bindungen, rekursive let-Bindungen, gegenseitige Rekursion und Case-Typ-Matching abdecken. Das endgültige Ziel ist ein Compiler, der Programme typprüft, ohne dass manuelle Typannotationen erforderlich sind.

Mehr lesen
Entwicklung Typrückschluss

Auf Wiedersehen, mysteriöse Typfehler: Wie PolySubML die Fehlermeldungen der Typinferenz verbessert

2025-05-23

PolySubML ist eine Programmiersprache, die globale Typinferenz mit Subtyping und fortgeschrittenem Polymorphismus kombiniert. Dieser Beitrag untersucht, wie PolySubML gute Typfehlermeldungen gestaltet und erklärt, warum bestehende Sprachen in der Verbesserung von Fehlermeldungen der Typinferenz oft zu kurz greifen. Der Autor schlägt fünf Regeln vor: 1. Niemals raten oder zurückverfolgen; 2. Keine voreiligen Schlüsse ziehen; 3. Den Benutzer um Klärung bitten; 4. Den Benutzer erlauben, explizite Typannotationen zu schreiben; 5. Keine statische Typinferenz im Laufzeit-Ausführungsmodell verwenden. Durch die Befolgung dieser Regeln behebt PolySubML erfolgreich viele häufige Probleme mit der Typinferenz und verbessert die Debug-Fähigkeit des Codes deutlich.

Mehr lesen
Entwicklung

Jenseits von OOP: Die Evolution des Subtypings in Programmiersprachen

2025-03-29

Dieser Artikel untersucht die entscheidende Rolle von Subtyping im Design von Programmiersprachen. Der Autor erläutert anhand seiner Erfahrung bei der Entwicklung mehrerer Programmiersprachen, dass Subtyping nicht auf Klassenvererbung in der objektorientierten Programmierung beschränkt ist, sondern ein grundlegenderes Konzept darstellt: Typ X ist ein Subtyp von Typ Y, wenn ein Wert vom Typ X überall dort verwendet werden kann, wo ein Wert vom Typ Y erwartet wird. Der Artikel erklärt klar, warum Subtyping auch in leistungsorientierten Low-Level-Sprachen entscheidend ist, da es dem Compiler ermöglicht, Nullwerte, Aliasing und andere Probleme statisch zu überprüfen, wodurch die Zuverlässigkeit des Codes verbessert und letztendlich die Entwicklung von Programmiersprachen vorangetrieben wird.

Mehr lesen
Entwicklung Subtyping

Vier überraschende Einschränkungen des Rust-Borrow-Checkers

2024-12-24

Dieser Artikel behandelt vier überraschende Einschränkungen des Rust-Borrow-Checkers, auf die selbst erfahrene Rust-Programmierer stoßen können. Die erste Einschränkung betrifft die Unfähigkeit des Borrow-Checkers, match- und return-Anweisungen vollständig zu berücksichtigen, was zu redundanten Prüfungen bei der Arbeit mit HashMaps führt. Die zweite Einschränkung betrifft die asynchrone Programmierung, wobei Rust derzeit nicht in der Lage ist, bestimmte Asynchronous-Callback-Typsignaturen auszudrücken. Die dritte konzentriert sich auf FnMut-Closures, die kein erneutes Ausleihen von gefangenen Variablen zulassen, wodurch der Zugriff auf veränderliche Zustände in asynchronen Operationen eingeschränkt wird. Schließlich führt das Fehlen von Kontrollfluss-Bewusstsein im Send-Checker dazu, dass einige Futures, die Send sein sollten, fälschlicherweise als nicht Send markiert werden. Der Autor veranschaulicht diese Einschränkungen und ihre Herausforderungen mit konkreten Codebeispielen und Workarounds und plädiert für Verbesserungen des Rust-Typsystems, um die Produktivität der Entwickler zu steigern.

Mehr lesen