<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Factor</id>
	<title>Factor - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Factor"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Factor&amp;action=history"/>
	<updated>2026-05-25T20:40:21Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Factor&amp;diff=312993&amp;oldid=prev</id>
		<title>~2025-62150-2 am 15. September 2025 um 14:58 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Factor&amp;diff=312993&amp;oldid=prev"/>
		<updated>2025-09-15T14:58:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Dieser Artikel|behandelt die Programmiersprache. Zu weiteren Bedeutungen siehe [[Factor (Begriffsklärung)]].}}&lt;br /&gt;
{{Infobox Programmiersprache&lt;br /&gt;
|Erscheinungsjahr = 2003&lt;br /&gt;
|Designer = Slava Pestov&lt;br /&gt;
|AktuelleVersion = 0.100&lt;br /&gt;
|AktuelleVersionFreigabeDatum = August 2025&lt;br /&gt;
|Typisierung = [[Dynamische Typisierung|dynamisch]]&lt;br /&gt;
|Beeinflusst_von = [[Forth (Programmiersprache)|Forth]], [[Lisp]], [[Smalltalk (Programmiersprache)|Smalltalk]], [[Joy (Programmiersprache)|Joy]]&lt;br /&gt;
|Paradigma = multiparadigmatisch&lt;br /&gt;
|Lizenz = [[BSD-Lizenz]]&lt;br /&gt;
|Website = [http://factorcode.org/ factorcode.org]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Factor&amp;#039;&amp;#039;&amp;#039; ist eine [[Freie Software|freie]] [[Programmiersprache]], die von Slava Pestov entworfen und seit 2003 entwickelt wird. Sie übernimmt Konzepte aus [[Forth (Programmiersprache)|Forth]], [[Lisp]] und [[Smalltalk (Programmiersprache)|Smalltalk-80]]. Sie ist als praxisorientierter Nachfolger von [[Joy (Programmiersprache)|Joy]] gedacht und eine Implementierung ist unter [[BSD-Lizenz]] erhältlich.&lt;br /&gt;
&lt;br /&gt;
== Words und Stack ==&lt;br /&gt;
Alle Funktionen lesen ihre Argumente vom [[Stapelspeicher|Stack]], schreiben ihre Ergebnisse auf den Stack und werden als &amp;#039;&amp;#039;&amp;#039;words&amp;#039;&amp;#039;&amp;#039; bezeichnet. Ein Programm ist eine Abfolge von Lexikalen für Objekte, die auf den Stack abgelegt werden und words, die auf den Stack angewendet werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;factor&amp;quot;&amp;gt;&lt;br /&gt;
! Kommentar&lt;br /&gt;
2 3 + .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zuerst werden 2 und 3 auf den Stack abgelegt. &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039;&amp;amp;nbsp;nimmt zwei Zahlen vom Stack und legt die Summe der beiden auf dem Stack ab. &amp;#039;&amp;#039;&amp;#039;.&amp;#039;&amp;#039;&amp;#039;&amp;amp;nbsp;nimmt das oberste Objekt vom Stack und gibt es aus. [[Kommentar (Programmierung)|Kommentare]] beginnen mit&amp;amp;nbsp;&amp;#039;&amp;#039;&amp;#039;!&amp;#039;&amp;#039;&amp;#039; und gehen bis zum Ende der Zeile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;factor&amp;quot;&amp;gt;&lt;br /&gt;
: add2 ( n -- n&amp;#039; ) 2 + ;&lt;br /&gt;
5 add2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Neue words werden mit &amp;#039;&amp;#039;&amp;#039;:&amp;#039;&amp;#039;&amp;#039; definiert. &amp;#039;&amp;#039;add2&amp;#039;&amp;#039; addiert 2 zur obersten Zahl auf dem Stack.&lt;br /&gt;
&lt;br /&gt;
Words werden in &amp;#039;&amp;#039;&amp;#039;vocabularies&amp;#039;&amp;#039;&amp;#039; zusammengefasst. Mit &amp;#039;&amp;#039;&amp;#039;USE:&amp;#039;&amp;#039;&amp;#039; wird angegeben, in welchem vocabulary words gesucht werden sollen und mit &amp;#039;&amp;#039;&amp;#039;IN:&amp;#039;&amp;#039;&amp;#039; in welchem vocabulary alle folgend definierten words gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
Es können beliebige Objekte wie Zahlen, Sequences (Arrays, Vectors, Strings,&amp;amp;nbsp;…) usw. auf dem Stack abgelegt werden. Für alle Objektarten ist eine lexikalische Darstellung definiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;factor&amp;quot;&amp;gt;&lt;br /&gt;
SYMBOL: foo&lt;br /&gt;
&amp;quot;Hello&amp;quot; foo set&lt;br /&gt;
foo get&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Namen für Variablen werden mit &amp;#039;&amp;#039;&amp;#039;SYMBOL:&amp;#039;&amp;#039;&amp;#039; definiert, mit &amp;#039;&amp;#039;&amp;#039;set&amp;#039;&amp;#039;&amp;#039; gesetzt und mit &amp;#039;&amp;#039;&amp;#039;get&amp;#039;&amp;#039;&amp;#039; ausgelesen und auf den Stack abgelegt. Speicher für die Objekte wird automatisch alloziert und durch die [[Garbage Collection]] wieder freigegeben.&lt;br /&gt;
&lt;br /&gt;
== Funktionales Programmieren ==&lt;br /&gt;
Anonyme Funktionen werden in eckigen Klammern geschrieben und als &amp;#039;&amp;#039;&amp;#039;quotations&amp;#039;&amp;#039;&amp;#039; bezeichnet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;factor&amp;quot;&amp;gt;&lt;br /&gt;
{ 1 2 3 } [ 3 + ] map&lt;br /&gt;
10 [ &amp;quot;Hello world&amp;quot; print ] times&lt;br /&gt;
4 [ 2 + ] [ 3 * ] bi&lt;br /&gt;
10 0 &amp;lt; [ &amp;quot;yes&amp;quot; print ] [ &amp;quot;no&amp;quot; print ] if&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;map&amp;#039;&amp;#039;&amp;#039; nimmt ein Array und eine quotation vom Stack. Die quotation wird auf jedes Element des Arrays angewendet und die Ergebnisse wieder in einem Array auf dem Stack abgelegt. &amp;#039;&amp;#039;&amp;#039;times&amp;#039;&amp;#039;&amp;#039; nimmt eine Zahl &amp;#039;&amp;#039;n&amp;#039;&amp;#039; und eine quotation vom Stack. Die quotation wird dann &amp;#039;&amp;#039;n&amp;#039;&amp;#039;-mal hintereinander ausgeführt. &amp;#039;&amp;#039;&amp;#039;bi&amp;#039;&amp;#039;&amp;#039; nimmt ein Objekt und zwei quotations vom Stack. Beide quotations werden auf das Objekt angewendet und die beiden Ergebnisse auf dem Stack abgelegt. &amp;#039;&amp;#039;&amp;#039;if&amp;#039;&amp;#039;&amp;#039; nimmt einen [[Boolesche Variable|Wahrheitswert]] und zwei quotations vom Stack. Ist der Wert &amp;#039;&amp;#039;true&amp;#039;&amp;#039; wird die erste quotation ausgeführt, ansonsten die zweite quotation.&lt;br /&gt;
&lt;br /&gt;
== Objektorientierung ==&lt;br /&gt;
Bei der Objektorientierung übernimmt Factor Konzepte aus [[Common Lisp Object System]]. Klassen und Methoden werden unabhängig voneinander definiert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;factor&amp;quot;&amp;gt;&lt;br /&gt;
TUPLE: rectangle width height ;&lt;br /&gt;
: &amp;lt;rectangle&amp;gt; ( width height -- rectangle ) rectangle boa ;&lt;br /&gt;
&lt;br /&gt;
GENERIC: area ( object -- x )&lt;br /&gt;
M: rectangle area [ width&amp;gt;&amp;gt; ] [ height&amp;gt;&amp;gt; ] bi * ;&lt;br /&gt;
&lt;br /&gt;
10 20 &amp;lt;rectangle&amp;gt; area&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zur [[Objektorientierte Programmierung|Datenkapselung]] wird eine Tuple-Klasse mit dem Namen &amp;#039;&amp;#039;rectangle&amp;#039;&amp;#039; und den beiden Slots &amp;#039;&amp;#039;width&amp;#039;&amp;#039; und &amp;#039;&amp;#039;height&amp;#039;&amp;#039; definiert. Das darauf folgend definierte &amp;#039;&amp;#039;&amp;#039;construction-word&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;lt;rectangle&amp;gt;&amp;#039;&amp;#039; liest zwei Zahlen vom Stack und belegt die beiden Slots damit. Die für &amp;#039;&amp;#039;rectangle&amp;#039;&amp;#039; definierte Methode &amp;#039;&amp;#039;area&amp;#039;&amp;#039; nimmt ein rectangle-Objekt vom Stack und berechnet die Fläche. Liegt ein Tuple-Objekt auf dem Stack, können mit &amp;#039;&amp;#039;&amp;#039;slot&amp;gt;&amp;gt;&amp;#039;&amp;#039;&amp;#039; die Daten ausgelesen und mit &amp;#039;&amp;#039;&amp;#039;&amp;gt;&amp;gt;slot&amp;#039;&amp;#039;&amp;#039; die Daten in den Slot des Objekts geschrieben werden.&lt;br /&gt;
&lt;br /&gt;
== Library ==&lt;br /&gt;
In Factor ist eine umfassende [[Programmbibliothek|Bibliothek]] mit vordefinierten Funktionen enthalten. Für Erweiterungen existiert eine Schnittstelle zu C-Bibliotheken.&lt;br /&gt;
&lt;br /&gt;
== Listener ==&lt;br /&gt;
[[Datei:Factor Listener.png|mini|Factor Listener 0.92]]&lt;br /&gt;
Der Listener ist die interaktive [[Integrierte Entwicklungsumgebung|Entwicklungsumgebung]] von Factor. Alles was man eingibt wird eingelesen, kompiliert und gegebenenfalls gleich ausgeführt. Mit Steuerung-h gelangt man zu einer umfassenden Hilfe und mit Steuerung-w kann man jede Zeile im Single-Step-Verfahren schrittweise durchlaufen. Alle zurzeit im Speicher befindlichen Definitionen und der kompilierte Code werden mit &amp;#039;&amp;#039;&amp;#039;save&amp;#039;&amp;#039;&amp;#039; in einer &amp;#039;&amp;#039;&amp;#039;Image&amp;#039;&amp;#039;&amp;#039;-Datei gespeichert.&lt;br /&gt;
&lt;br /&gt;
== Implementierung ==&lt;br /&gt;
Die [[Virtuelle Maschine|VM]] von Factor ist in [[C++]] geschrieben. Der größte Teil von Factor, wie der [[Parser]] und der [[Compiler]], sind selbst in Factor geschrieben. Es existieren Implementierungen für [[FreeBSD]], [[Linux]], [[macOS]] und [[Windows]] sowie die Prozessoren [[X86-Prozessor|x86]], [[AMD64|x86-64]] und [[PowerPC]]. Am Anfang des Projektes war die VM in [[Java (Programmiersprache)|Java]] geschrieben. Diese wurde aufgrund technischer Unterlegenheit zunächst durch eine Implementierung in [[C (Programmiersprache)|C]] ersetzt.&amp;lt;ref&amp;gt;{{cite web |url=http://concatenative.org/wiki/view/Factor/Java%20Factor |title=Factor/Java Factor |work=concatenative.org |accessdate=2012-05-23 |language=en}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Self-Hosting ==&lt;br /&gt;
Da Factor hauptsächlich selbst in Factor geschrieben ist, muss zuerst das Basissystem mit einem Boot-Image erstellt werden. Ein passendes Boot-Image findet man auf der Homepage von Factor.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
$ factor -i=boot.&amp;lt;cpu&amp;gt;.image&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das dabei erstellte &amp;#039;&amp;#039;&amp;#039;factor.image&amp;#039;&amp;#039;&amp;#039; ist vom System abhängig und enthält das bei jedem Start geladene Basissystem von Factor.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://factorcode.org/ offizielle Webpräsenz] (englisch)&lt;br /&gt;
* [http://concatenative.org/wiki/view/Factor Wiki über Factor] (englisch)&lt;br /&gt;
* [http://docs.factorcode.org/ Anleitung] (englisch)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Programmiersprache]]&lt;br /&gt;
[[Kategorie:Freies Programmierwerkzeug]]&lt;br /&gt;
[[Kategorie:Konkatenative Programmiersprache]]&lt;/div&gt;</summary>
		<author><name>~2025-62150-2</name></author>
	</entry>
</feed>