Moderne Programmiersprachen glänzen durch einen umfangreichen Befehlssatz und effizienter Programmierlogik. Komplexe Algorithmen lassen sich teilweise gut verständlich abbilden und dass tief darunter ein Maschinencode entsteht, für den es auch einmal “maschinennahe” Codiermöglichkeiten (Assembler) gab, hat man schnell vergessen.
Meine letzte Berührung mit Assembler ist – glücklicherweise – nun auch schon über 20 Jahre her und dennoch ist eine gewisses Faszination geblieben. Kombiniert für das Interesse an esoterischen Programmiersprachen ist es nicht mehr weit, bis ein über 20 Jahre altes Konzept noch einmal aus der mentalen Schublade hervorgekramt wird: JASm.
Esoterische Programmiersprachen
Der Titel klingt exotischer oder mystischer, als es eigentlich ist. Unter einer esoterischen Programmiersprache wird eine Sprache verstanden, mit der man zwar ein Computerprogramm implementieren kann, die aber mehr akademischen Charakter hat, da es ihr in der Regel an Effizienz mangelt. Bekannte und interessante Vertreter dieser Disziplin sind Brainfuck, Ook! oder auch die Shakespeare Programming Language (SPL).
Brainfuck kommt mit exakt sechs Zeichen (+, -, >, <, [ und ]) aus. Ook! verwendet 2er Tupel von drei verschiedenen Codes (Ook., Ook! und Ook?), während SPL Sonette á la Shakespeare zum Quelltext hat.
Tatsächlich ist, trotz ihres exotischen Daseins, bei diesen Sprachen eine Turing-Vollständigkeit gegeben, was letztlich bedeutet, dass sie alles abbilden können, was eine Programmiersprache abbilden können muss.
JASm
Mit meiner minimalistischen Programmiersprache gehe ich gar noch einen Weg weiter, indem ich postuliere, dass es nur exakt zweier Befehle bedarf, um eine vollständige Programmiersprache zu realisieren. Dabei sind die Befehle mehr an Assembler Befehle angelehnt, als es die oben genannten esoterischen Programmiersprachen sind. Es handelt sich hierbei um eine Subtraktion (SUB) und einen bedingten Sprung (JA), die unter anderem auch namensgebend sind..
Im Folgenden werde ich auf diese beiden Befehle, die den JASm Core bilden, näher eingehen und die JASm Maschine vorstellen. In einem weiteren Beitrag werden dann ein paar Erweiterungen vorgestellt, die die Programmierung in JASm etwas komfortabler machen, aber den Kern (die zwei Befehle) nicht verändern. In einem dritten Beitrag folgen dann einige Programmierbeispiele in JASm.