Homepage  • Privacy Policy & Imprint
erweiterter fpc

Unleashed Pascal compiler

Unleashed Pascal (2026) ist ein Fork von FreePascal und Lazarus, der moderne Sprach­features wie async/await, parallele Schleifen, Pattern-Matching und String-Interpola­tion als optionale Erweite­rungen ein­führt, ohne die Kompatibi­lität zu altem Pascal-Code zu be­einträch­tigen.

Installer: ↗https://github.com/unleashedpascal/installer/releases

Lizenzen: Mehrere Open-Source-Lizenzen (GPLv2, modifizierte LGPL, MPL) der jeweiligen Original-Projekte FreePascal und Lazarus.

Ein Blick auf Unleashed Pascal lohnt sich

Unleashed Pascal lässt sich unabhängig und parallel zu FPC/Lazarus installie­ren und nutzen. Man kann es also gefahrlos testen und kann jederzeit zu seinem gewohnten Lazarus zurück­kehren.

Für alle Erweiterungen gilt Opt-in, d.h. jedes Feature wird über einen eigenen Mode-Switch aktiviert oder ist im ge­sammel­ten {$mode unleashed} ent­halten. Bestehen­der Quellcode bleibt davon un­berührt.

Inhaltlich lassen sich die Erweiterungen in mehrere Kategorien gliedern: Im Bereich Neben­läufig­keit bringt das Projekt ein async/await-Modell mit, bei dem ein Aufruf einen Hinter­grund-Thread startet und await das Ergeb­nis ein­sammelt, ganz ohne Event-Loop-Konzept. Dazu kommt eine parallele for-Schleife, die die Schleifen­körper über einen Worker-Pool verteilt, sowie lock/trylock-Blöcke, die kritische Ab­schnitte automa­tisch anlegen und wieder freigeben, und threadstatic-Variablen für pro-Thread-Zustände ohne klassische threadvar-Deklaration.

Ein zweiter Schwerpunkt liegt auf kompakterer Schreib­weise. Dazu zählen Inline-Variablen mit Typ-Inferenz, Statement-Ausdrücke (if/case/try liefern direkt einen Wert), ein match-Statement als moderner Ersatz für einfache case-Verzweigun­gen, anonyme Tupel-Typen mit Destrukturie­rung, String-Interpola­tion über $'...'-Literale, eine step-Klausel für for-Schleifen, die Mehrfach-Initiali­sierung mehre­rer Variablen mit einem Wert sowie native 128-Bit-Integer. Kleinere Helfer wie SwapValues() und der Type()-Operator (ein Pascal-Äquivalent zu decltype) runden diesen Block ab.

Für systemnahe Programmierung bietet das Projekt einen dritten Block rund um Speicher­layout: zusammen­setzbare Records mit embed, union und Bit-Feldern für die 1:1-Portierung von C-Headern, flexible Array-Member nach C99-Vorbild, statische Variablen mit Programm­laufzeit, sowie Scoped-Cleanup-Mechanis­men wie defer und autofree als Ersatz für try/finally-Boilerplate. Ergänzt wird das durch einen zeroinit-Modifikator für determinis­tisch initiali­sierte Stackframes und eine deut­lich aggressi­vere, echte Inline-Erzwingung.

Im Bereich Klassen und Generics gibt es Auto-Properties, die ohne Getter/Setter-Code ein Backing-Field syntheti­sieren, sowie ver­schachtelte generische Methoden und implizite Generics im Delphi-Stil ohne generic/specialize-Schlüssel­wörter.

Wer Wert auf Kontrolle über die erzeugte Binär­datei legt, findet zusätzlich eine Option zum Ent­fernen von RTTI-Typnamen, CLI-Schalter zum Anpassen ein­gebette­ter Meta­daten sowie Direkti­ven, um Dateien zur Kompilier­zeit direkt in die Binär­datei ein­zubetten.

Bei Strings und Literalen kommen mehrzeilige String-Literale (Backtick- und Dreifach-Anführungs­zeichen-Form) hinzu, außerdem diverse Komfort-Anpassun­gen: durch­gängige Compound-Zuweisungs­operato­ren, element­weise Array-Vergleiche, indexierte und "faule" Sprung­marken für Zustands­automaten, ein er­halte­ner Schleifen­zähler nach break, sowie is not/not in als les­barere Negationen.

Schließlich bringt der Optimizer drei zusätz­liche Stufen mit: automa­tisches Inlining kleiner Routinen ab -O3, eine schnellere Umsetzung kleiner FillChar/Move-Aufrufe, und eine Ent­virtualisie­rung von Prozedur­variablen, wenn der Compiler beweisen kann, dass nur eine Ziel­adresse infrage kommt.


Back  •  Scroll to Top  • Homepage