[Deutsch] PBXB64 V1 - Der native Multi-Frontend Compiler fuer Windows x64

Started by Theo Gottwald, June 10, 2026, 12:17:40 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Theo Gottwald

PBXB64 V1 - Der native Multi-Frontend Compiler fuer Windows x64 (Alpha)
Fuenf Sprachen. Ein IR. Ein x64-Backend. Ein PE32+. Eine Binary. ~856 KB.

---



Download: https://smart-ai-robot.com/compilers/pbxb64/ (8,9 MB ZIP, digital signiert)



Was ist PBXB64?

PBXB64 ist ein reiner C17-Compiler, der fuenf Sprachen (B64, PowerBASIC, C, x64-Assembler, PILOT) durch eine einzige IR-Pipeline und einen nativen x64-Backend in echte PE32+ Windows-Executables uebersetzt.

  • Kein GCC - kein C-Transpilieren, kein Zwischenschritt ueber eine andere Sprache
  • Kein LLVM - kein IR-Export, kein Clang, kein LLD
  • Keine externe Toolchain - alles in einer einzigen ~856 KB Binary
  • Digital signiert - von Theo Gottwald, GlobalSign GCC R45

Entstanden aus der Idee: Kann man einen vollstaendigen Compiler-Backend (Instruction Selection, Register Allocation, Peephole Optimization, COFF-Erzeugung, PE-Linking) in reinem C17 schreiben - ohne auf LLVM, GCC oder andere Toolchains zurueckzugreifen?

Die Antwort ist ja. Und zwar in ~76 Source-Dateien / ~43.000 Zeilen C.

---

Fuenf Sprach-Frontends

Das Besondere an PBXB64: Es sind nicht fuenf separate Compiler, die zufaellig in der gleichen Binary stecken. Es ist ein Compiler mit fuenf Frontends - alle erzeugen die gleiche IR, durchlaufen den gleichen Optimizer, den gleichen x64-Backend und den gleichen PE-Linker.

SpracheExtensionStatusBeschreibung
B64[tt].b64[/tt]ActiveC-aehnliche Systemsprache mit manueller Speicherverwaltung, rohen Pointern, Structs, Funktionspointern und globalen Variablen. 13/13 Link+Run-Tests.
PowerBASIC[tt].pb, .bas, .pba[/tt]ActivePowerBASIC-kompatibler Dialekt: FUNCTION/SUB, LOCAL/GLOBAL, TYPE/UNION/ENUM, vollstaendige FOR/NEXT-Semantik, PRINT, String-Builtins, File-I/O. 20/20 Link+Run-Tests.
C17 Subset[tt].c, .h[/tt]Active#include, #define, #if/#endif, struct/union/typedef/enum, switch/case, function pointers, 33 C17-Header. 63/63 Compile-Tests.
x64 ASM[tt].asm, .s[/tt]ActiveIntel + AT&T Syntax, direkte COFF/PE-Emission ohne Zwischensprache.
PILOT[tt].pil[/tt]ActiveBildungsorientierte Sprache: T:/A:/M:/Y:/N:/J:/U:/E:-Befehle, bedingte Suffixe, Pattern Matching.

Mixed-Language-Projekte: PowerBASIC + Inline-ASM im selben Modul. B64 ruft C-Funktionen. PILOT steuert ein BASIC-Programm. Der gemeinsame IR-Layer macht es moeglich.

---

FOR/NEXT - Die vollstaendige Abdeckung

Das langjaehrige "FOR-Body constant-fold"-Problem ist geloest. FOR/NEXT arbeitet jetzt korrekt fuer:

  • 7 Integer-Typen: LONG, INTEGER, QUAD, DWORD, WORD, BYTE, CURRENCY
  • 2 Float-Typen: SINGLE, DOUBLE (ab Z62 vollstaendig debuggt)
  • Negativer STEP: [tt]FOR i = 10 TO 1 STEP -1[/tt]
  • Geschachtelte Loops: 2-deep, 3-deep, mit abhaengigen Bounds ([tt]FOR j = 1 TO i[/tt])
  • Float STEP: [tt]FOR f = 1.0 TO 3.0[/tt]

FUNCTION PBMAIN() AS LONG
    LOCAL g AS LONG
    FOR i = 1 TO 3
        g = g + i
    NEXT
    FUNCTION = g         ' = 6
END FUNCTION

---

Technische Tiefe

KomponenteUmfangDetails
Lexer~3.000 LOCPer-language Tokenizer
Parser~12.000 LOC5 Sprach-Frontends mit AST-Erzeugung
IR Builder~2.000 LOCUnified Intermediate Representation
Optimizer~6.000 LOCPass Manager, CFG, Dominance, Constant Folding, DCE, Copy Propagation, Peephole (9 Passes), CSE, GVN, SCCP, LICM, SROA, Strength Reduction
x64 Backend~14.000 LOCInstruction Selection, Register Allocation (Graph Coloring), Peephole Optimization, Scheduler, Frame Layout, Unwind Info
Assembler~5.000 LOCx64 Encoding, Fixups, Relocs, Intel + AT&T Syntax
COFF Writer~1.500 LOCCOFF-Objekt-Datei-Erzeugung
PE Linker~3.000 LOCPE32+ Image-Generierung, Import Table, Relocs, TLS, Exception Data (.pdata/.xdata)

Optimierungs-Durchlaeufe (Auszug):

[tt]Constant Folding -> Dead Code Elimination -> Mem2Reg -> Copy Propagation -> CFG Cleanup -> Strength Reduction -> Instruction Combining -> Branch Simplification -> SCCP -> GVN -> DSE -> ADCE -> Reassociation -> Load Forwarding -> SROA -> LICM -> Peephole (9 Passes)[/tt]

---

Test-Lane: 287/287 gruen, 0 expected fails

Jeder Build durchlaeuft eine automatisierte Test-Suite:

KategorieErgebnisBeschreibung
Assembly (-S)190/190Jede .pb-Datei wird fehlerfrei nach .asm uebersetzt
PB Link+Run20/20PB-Programme kompilieren, linken und liefern korrekte Exit-Codes (u.a. FOR/NEXT, String-Ops, Pointer/Structs)
B64 Link+Run13/13B64-Programme inkl. Calls, Bedingungen, Loops, Args, Globals, Division
C Compile (-S)63/63C-Programme inkl. 33 C17-Headern uebersetzen fehlerfrei
C Link+Run1/1C-Programm laeuft und liefert korrekten Exit-Code

Build-Zeit: ~26 Sekunden (76 Source-Dateien, MinGW-w64, neuere Versionen mit inkrementellem Build deutlich schneller)

---

Was ist im ZIP-Paket? (8,9 MB)

  • PBXB64.exe (~856 KB, UPX-gepackt, digital signiert von Theo Gottwald)
  • PBXB64_Help.chm - Vollstaendige Windows-Hilfe mit Befehlsreferenz
  • Includes/ - 1.233 PowerBASIC-Include-Dateien (.pbi) fuer Windows-API, JSON, HTTP, OAuth, SMTP, COM, NetX, URI, JWT, uvm.
  • Samples/ - 127 Beispielprogramme in 5 Kategorien (asm, b64, basic, c, pb)
  • README.md + SHA256.txt

---

Quick Start

PowerBASIC:
FUNCTION PBMAIN() AS LONG
    PRINT "Hello from PBXB64!"
    FUNCTION = 0
END FUNCTION

B64:
fn main(): i32 {
    let x: i32 = 42;
    return x;
}

C:
#include <stdio.h>
int main(void) {
    printf("Hello from PBXB64 C!\n");
    return 0;
}

Kompilieren & Ausfuehren:
PBXB64 mein_programm.pb -o mein_programm.exe
mein_programm.exe
echo %ERRORLEVEL%

Build aus dem Quellcode (fuer Entwickler):
cd core
build_mingw64.bat
build\PBXB64.exe --version
# -> PBXB64 version 0.50.0-z62

Voraussetzung: MinGW-w64 (x86_64-w64-mingw32-gcc 15.2.0 oder vergleichbar)

---

Alpha-Hinweis

PBXB64 V1 ist eine Alpha-Version. Das bedeutet:

Was bereits funktioniert (stabil und getestet):

  • Fuenf vollstaendige Sprach-Frontends (B64, PB, C, ASM, PILOT)
  • FOR/NEXT fuer alle 7 Integer-Typen + 2 Float-Typen
  • PRINT, String-Operationen, Datei-I/O
  • B64: Funktionen, Parameter, globale Variablen, bedingte Anweisungen, Schleifen
  • C: #include, #define, struct/union/enum, switch/case, Funktionspointer
  • Assembler: Intel und AT&T Syntax, COFF/PE
  • PILOT: Vollstaendiger Befehlssatz
  • PE32+-Linker: Import-Tabellen, Relocs, Exception-Daten
  • 287 automatisierte Tests - alle gruen, 0 erwartete Fehlschlaege
  • UPX-gepackt und digital signiert

Was noch nicht vollstaendig ist:

  • COM-Unterstuetzung (Parser vorhanden, Runtime-Stubs geben Default-Werte)
  • GUI/DIALOG/CONTROL (Parser + IR vorhanden, Runtime nicht vollstaendig implementiert)
  • C-Frontend: Subset - kein vollstaendiger C17-Host (keine libc-Bibliothek, kein vollstaendiger Praeprozessor fuer alle Edge Cases)
  • Kein Debugger - Fehlersuche erfolgt klassisch ueber PRINT und Exit-Codes
  • Backwards-Compatibility mit PowerBASIC: Gegeben, wo getestet - aber bei komplexen WinAPI-Deklarationen koennen Unterschiede auftreten

Fuer wen ist PBXB64 V1 geeignet?

  • Entwickler, die einen nativen x64-Compiler aus einer Hand suchen
  • PowerBASIC-Umsteiger, die ihre Projekte auf x64 portieren moechten
  • Sprachdesign-Interessierte, die B64 oder Mixed-Language-Projekte ausprobieren wollen
  • Bildungszwecke (PILOT + BASIC + C in einem Compiler)

Fuer wen ist es (noch) nicht geeignet?

  • Produktivumgebungen, die auf vollstaendige COM-GUI-Unterstuetzung angewiesen sind
  • Anwender, die einen Debugger oder eine IDE-Integration benoetigen (reines CLI)
  • Projekte, die ein vollstaendiges C17-Hosted-Libc benoetigen

---

Ausblick: V2 und darueber hinaus

Geplant fuer die naechsten Versionen:

  • Debug-Informationen (DWARF) - damit Debugger funktionieren
  • Vollstaendigere C17-Unterstuetzung - Richtung Hosted LibC
  • GUI/COM-Runtime-Stubs ersetzen - Dialoge, Controls, Grafik
  • Performance-Optimierungen am Backend
  • Erweiterte Linker-Features

Der Compiler ist als offene Entwicklungsplattform konzipiert. Wer sich beteiligen moechte - Features vorschlagen, Bug-Reports einreichen, Code beitragen - ist herzlich willkommen.

---



Download: https://smart-ai-robot.com/compilers/pbxb64/
8,9 MB ZIP - PBXB64.exe (856 KB UPX) - PBXB64_Help.chm - 1233 Includes - 127 Samples



Theo Gottwald | Dettenheim, Deutschland | info@it-berater.org
Web: smart-ai-robot.com | Smart Package Robot



PBXB64 V1 - Z62 "FOR/NEXT Coverage" - 2026-06-10 - 287/287 Tests gruen, 0 expected fails, 0 Regressions.

Norbert Spoerl

Hi Theo,
Gratulation - ich hatte nicht gedacht, dass Du und KI das hinbekommen. Ich habe bei JKB intensiv als Betatester geholfen. Darum geht meine Orientierung in diese Richtung. Ich hoffe, Juergen gibt aufgrund der mangelnden Resonanz nicht auf. Stand heute, aus meiner Sicht, es wäre gut gewesen, ihr beide hättet bzgl. Projekt PB64bit zusammen gefunden. Auf der anderen Seite ist es nicht schlecht, dass es Alternativen gibt.
Viel Erfolg weiterhin!
  •  

Theo Gottwald

Hallo Norbert,

wir arbeiten zusammen, ich bin auch in Kontakt mit Jürgen.

Er möchte evtl. auch seinen Compiler auf meiner WEB-Site im Oktober unterbringen.
Derzeit möchte er erst Mal was "der Jahrezeit" entsprechendes machen,
und das ist auch gut so.

Ich hab ihm von Anfang an gesagt dass wir hier nur "Paar Opas"" sind die noch Interesse an PB haben.
Evtl. könnte es Firmen mit bestehendem Source-Code geben, die interssiert sind.

Das war als er mit seinem Projekt angefangen hat noch anders, aber in der Software und beim Obst vergeht die Zeit schnell.
Du bist natürlich hier auch willkommen.

Defacto sind meine Alpha-Compiler im Bezug auf PB langsamer beim Kompilieren und auch der Code wird erwartungsgemäß schlechter sein als bei Jürgens Compiler. Dafür habe ich paar Features mehr eingebaut und ein zusätzliches C-Frontend.

Aber vor allem kann man es jetzt schon ausprobieren. Jürgen möchte erst im Spätjahr - so hab ich Ihn verstanden - seinen Compiler fertig machen. Ich hatte auch gehofft er würde zu erst publizieren.

Habe Ihm auch Hilfe angeboten, bei allem, Fehlersuche, bei der Hilfe ... aber er hat so entschieden.
Gut nun mache ich das Mal.


 

Norbert Spoerl

Hi Theo,
dass ihr Kontakt hattet, weiß ich, und auch das, was bei ihm im Moment Priorität hat. Über die Gründe der geringen Resonanz habe ich mir auch Gedanken gemacht. Meine Vorschläge werde ich Ihm im Herbst unterbreiten. Einer davon ist eine eigene Homepage für JKB. Das Parken auf anderen, wie z.B. auf Deiner wirkt nicht professionell. Es stimmt nicht, dass sein JKB nicht fertig ist. Es tut das, was es tun soll. Nur einiges um den Kern herum ist noch nicht 100% abgerundet (Hilfedateien und IDE-Spezifika). Aber es lässt sich damit gut arbeiten.
  •  

Theo Gottwald

Hallo Norbert

Im Prinzip hat er ja auch für seinene Editor schon einen eigene Homepage.
Aber mein Eindruck ist dass er im Moment einfach nicht so viel Zeit am PC verbringen will sondern an die frische Luft will.
Ich rede Ihm da nicht rein, wenn er kommt und Hilfe braucht hat er ja meine Mailadresse.
Ich wollte eignetlich nach Ihm releasen, weil er schon weiter ist.
Aber da er gesagt hat er relleased erst im Oktober habe ich das vorgezogen so haben die Leute die das interessiert schon Mal "was zum Spielen".
Und kleine Exe kann man ja damit schon machen. Damit lebt die PB-Syntax schon mal weiter.
Ob die KI in Zukunft noch compiler braucht oder gleich die EXE ausspuckt, da werden wir sehen -
aber genauso wie es heute noch Leute gibt die C64 und AMIGA Nutzen gibt es ja vielleicht auch eine "Hand voll Powerbasic Opas" die sich darüber freuen. Also ausser mir, bin ja einer davon.