r/informatik • u/JellyfishAny8234 • 5h ago
r/informatik • u/False_Actuator_6236 • 17h ago
Studium Eine Lehrsprache wird ein bisschen erwachsen: ABC v0.1 mit erstem ABI-Support
ABC ist eine kleine C-ähnliche Programmiersprache, die ich ursprünglich für meine Vorlesung Introduction to High Performance Computing entwickelt habe.
Die Idee dahinter war nicht, noch eine Programmiersprache zu erfinden. Studierende sollten einen einfacheren Einstieg als mit C/C++ bekommen, aber trotzdem genau die Dinge kennenlernen, die wichtig sind, um zu verstehen, wie Programme und Rechner tatsächlich funktionieren.
Im Laufe der Vorlesung entwickeln die Studierenden nicht nur eine einfache RISC-artige Rechnerarchitektur, sondern schreiben in ABC auch ihren eigenen Compiler dafür. Damit haben sie die komplette Kette zumindest einmal grundsätzlich gesehen:
Hardware → Befehlssatz → Assembler → Compiler → Programmiersprache
Natürlich nicht auf Industrie-Niveau. Aber wenn man die grundlegenden Prinzipien und das Zusammenspiel einmal verstanden hat, kann man sich später bei Bedarf oder aus Interesse gezielt in die realen Details einarbeiten.
Über den dabei entstandenen not-abc Compiler hatte ich hier schon einmal geschrieben. Das Lehrprojekt ist inzwischen selbst etwas gewachsen: ABC besitzt mehrere Backends, darunter eines für LLVM, und mit not-abc haben wir auch einen Self-Hosting-Compiler gebaut.
Jetzt habe ich mit ABC v0.1 das erste Release veröffentlicht.
Die für mich interessanteste Neuerung ist ein erster Schritt zur Interoperabilität mit C-Bibliotheken. Für die ursprünglichen Lehrzwecke brauchte ABC kein ABI-Layer. Als praktisches Anwendungs- und Testbeispiel habe ich jetzt raylib angebunden. Im Repository gibt es bereits einige von C nach ABC übertragene raylib-Beispiele.
Das ist einerseits für die Lehre ganz nett, weil man damit relativ einfach kleine grafische Programme mit ABC schreiben kann. Andererseits zeigt es grundsätzlich, dass ABC nicht in seiner eigenen kleinen Welt bleiben muss, sondern bestehende C-Bibliotheken verwenden kann.
Momentan wird nur eine Teilmenge der x86-64 System V ABI unterstützt – die raylib-Anbindung ist bewusst zunächst ein Proof of Concept. Das ABI-Layer ist aber so aufgebaut, dass weitere Targets ergänzt werden können. ARM wäre der naheliegende nächste Schritt.
ABC v0.1 ist außerdem mit LLVM 17 bis 22 getestet.
ABC: https://github.com/michael-lehn/abc-llvm
Feedback, weitere raylib-Beispiele, Experimente mit anderen C-Bibliotheken oder Hilfe bei zusätzlichen ABIs sind sehr willkommen. :-)