Einführung in die konkatenative Programmierung mit Factor
22. Juli 2009 – 14:58 von AndreasFactor? Noch nie gehört? Dann wird es aber Zeit! Es handelt sich hierbei um eine multiparadigmatische (was für ein Zungenbrecher ;-), konkatenative/stackbasierte Programmiersprache, die aus einem sehr einfachen Kern besteht. Sie wurde 2003 von Slava Pestov ins Leben gerufen und erfreut sich seit dem immer größerer Beliebtheit. Aber warum schon wieder eine neue Programmiersprache lernen? Factor ist eine sehr faszinierende Programmiersprache, die einem ermöglicht Programme in einer unglaublichen Kürze (wovon Sprachen wie C# oder Java nur träumen können) zu schreiben. Außerdem bietet Factor sehr moderne Programmierkonzepte, Paradigmen und Möglichkeiten:
- Objektorientierte Programmierung
- Funktionale Programmierung
- Metaprogrammierung
- Es ist kein Zufall, dass der Name Factor sehr stark an Refactoring erinnert. Denn genau hier liegt eine große Stärke der Sprache (warum dies so ist wird im Rahmen folgender Blog-Beiträge klar)
- Es ist möglich die Sprache selbst zu erweitern, um z.B. neue Konzepte einführen zu können (Stichwort Parsing Words)
- Die Sprache eignet sich auch sehr gut zum Erstellen von domänenspeziefischen Sprachen
Ich hoffe, dass ich euch ein bisschen neugierig machen konnte und ihr nun Interess an dieser sehr modernen Programmiersprache bekommen habt. In diesem und folgenden Blog-Einträgen will ich euch ein wenig in die Sprache einführen und zeigen, was sie so besonders macht.
Eine stackbasierte Programmiersprache arbeitet, wie der Name schon sagt, grundlegend auf einem Stack. Der Stack wird dazu verwendet, jegliche Form von Daten (z.B. Funktionsargumente oder Rückgabewerte) zu speichern/abzulegen und später wieder abzurufen. Es werden also nicht wie z.B. in Java Variablen deklariert, diese dann später initialisiert und über den Programmverlauf hinweg in ihrem Gültigkeitsbereich namentlich referenziert und verwendet. In stackbasierten oder auch konkatenativen Sprachen werden Daten einfach durch eine Aneinanderreihung von Funktionen, die untereinander ihre Werte weitergeben, auf einem Stack bearbeitet und weitergereicht.
Beginnen möchte ich mit dem grundlegenden Ausführungsmodell der Sprache.
- Grundlegendes Ausführungsmodell
Bei Factor handelt es sich um eine stackbasierte Programmiersprache mit einer sehr einfachen Syntax. Ein Programm besteht im Wesentlichen aus Words und Literals. Ein Word ist wiederum eine einfache Funktion. Da die Words einfach hintereinander gehängt/konkateniert werden können, spricht man bei Factor auch von einer konkatentiven Sprache. Unter Literals versteht man Literale, wie z.B. Ganzzahlen, Gleikommazahlen, Zeichen, usw.. Hinter jedem Literal oder Word muss ein Leerzeichen (als Trennzeichen) folgen. Die Code-Zeile in Listing 1.1 verdeutlicht, wie Literals und Words verwendet werden. Bei den Code-Beispielen können Zeilen 1:1 in die Factor-Konsole kopiert und getestet werden. Das Symbol => sollen die aktuellen Werte auf dem Stack zeigen.
=> 6
Listing 1.1 Addieren von zwei Zahlen in Factor
Hier werden die beiden Literale 2 und 4 auf das Word + angewendet. Wenn man imperative Sprachen wie z.B. C# oder Java gewohnt ist, scheint einem diese Notation zuerst ungewohnt, da man in diesen Sprachen 2 + 4 geschrieben hätte. Denkt man aber an den Stack als interne Datenstruktur, wird einem klar, warum die Reihenfolge von Words und Literals so sein muss. Das Word + nimmt zwei Zahlen vom Datenstack, addiert diese und legt das Ergebnis wieder auf den Stack. Die beiden Parameter 2 und 4 müssen daher vor dem Aufruf von + auf dem Stack liegen, so dass + diese dann vom Stack nehmen kann. Durch dieses Ausführungsmodell ist es, wie in Listing 1.2 zu sehen, auch möglich, die Words einfach aneinanderzureihen.
=> 36
Listing 1.2 Konkatenation von Words
Da nach der Addition das Ergebnis 6 auf dem Stack liegt, kann das Word sq (multipliziert eine Zahl mit sich selbst) direkt diese Zahl wieder als Parameter vom Stack nehmen, die Multiplikation durchführen und das Ergebnis auf den Stack legen. Mathematisch gesehen, ist dieser Aneinanderreihung einfach eine Komposition von Funktionen.
So viel fürs erste! Das bisher erklärte hat noch nicht wirklich einen Wow-Effekt. Der wird aber hoffentlich noch kommen ;-). Hier ging es erstmal um das grundlegende Ausführungsmodell.
Hier noch ein paar Links zu Factor:
- http://factorcode.org/ Offizielle Factor-Seite (Hier ist u.a. auch der Download der Umgebung zu finden)
- http://docs.factorcode.org/ Factor-Dokumentation
Fortsetzung folgt…

4 Responses to “Einführung in die konkatenative Programmierung mit Factor”
Jetzt komm ich endlich mal dazu, eure Ausarbeitung zu lesen ;D Vielen Dank dafür!
BTW: Du kannst ja die Spam-Protection auch in Postfix-Notation umbauen, also statt: “Sum of 5 + 8 ?” einfach “5 8 + => ?”
By Aaron on Jul 22, 2009
:D, Das is mal ne coole Idee:)! “Factor your life” sag ich da nur :D!
By Andi on Jul 22, 2009
Die Umstellung in Posfix Notation hätte zur Folge das nicht nur Bots sondern auch Daus ausgeschlossen werden. Wer mal Kommentare auf KB’s Blog liest weiß was ich meine
Ich sag nur Studiengebühren.
By nougad on Jul 22, 2009