Factor


Factor
Factor
Paradigmen: multiparadigmatisch
Erscheinungsjahr: 2003
Designer: Slava Pestov
Aktuelle Version: 0.94  (September 2010)
Typisierung: dynamisch
Einflüsse: Forth, LISP, Smalltalk, Joy
Lizenz: BSD-Lizenz
factorcode.org

Factor ist eine freie Programmiersprache, die von Slava Pestov entworfen und seit 2003 entwickelt wird. Sie übernimmt Konzepte aus Forth, LISP und Smalltalk-80. Sie ist als praxisorientierter Nachfolger von Joy gedacht und eine Implementierung ist unter BSD-Lizenz erhältlich.

Inhaltsverzeichnis

Words und Stack

Alle Funktionen lesen ihre Argumente vom Stack, schreiben ihre Ergebnisse auf den Stack und werden als words 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.

! Kommentar
2 3 + .

Zuerst werden 2 und 3 auf den Stack abgelegt. + nimmt zwei Zahlen vom Stack und legt die Summe der beiden auf dem Stack ab. . nimmt das oberste Objekt vom Stack und gibt es aus. Kommentare beginnen mit ! und gehen bis zum Ende der Zeile.

: add2 ( n -- n' ) 2 + ;
5 add2

Neue words werden mit : definiert. add2 addiert 2 zur obersten Zahl auf dem Stack.

Words werden in vocabularies zusammengefasst. Mit USE: wird angegeben, in welchem vocabulary words gesucht werden sollen und mit IN: in welchem vocabulary alle folgend definierten words gespeichert werden.

Es können beliebige Objekte wie Zahlen, Sequences (Arrays, Vectors, Strings, ...) usw. auf dem Stack abgelegt werden. Für alle Objektarten ist eine lexikalische Darstellung definiert.

SYMBOL: foo
"Hello" foo set
foo get

Namen für Variablen werden mit SYMBOL: definiert, mit set gesetzt und mit get ausgelesen und auf den Stack abgelegt. Speicher für die Objekte wird automatisch alloziert und durch die Garbage Collection wieder freigegeben.

Funktionales Programmieren

Anonyme Funktionen werden in eckigen Klammern geschrieben und als quotations bezeichnet.

{ 1 2 3 } [ 3 + ] map
10 [ "Hello world" print ] times
4 [ 2 + ] [ 3 * ] bi
10 0 < [ "yes" print ] [ "no" print ] if

map 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. times nimmt eine Zahl n und eine quotation vom Stack. Die quotation wird dann n-mal hintereinander ausgeführt. bi nimmt ein Objekt und zwei quotations vom Stack. Beide quotations werden auf das Objekt angewendet und die beiden Ergebnisse auf dem Stack abgelegt. if nimmt einen Wahrheitswert und zwei quotations vom Stack. Ist der Wert true wird die erste quotation ausgeführt, ansonsten die zweite quotation.

Objektorientierung

Bei der Objektorientierung übernimmt Factor Konzepte aus Common Lisp Object System. Klassen und Methoden werden unabhängig voneinander definiert.

TUPLE: rectangle width height ;
: <rectangle> ( width height -- rectangle ) rectangle boa ;

GENERIC: area ( -- x )
M: rectangle area [ width>> ] [ height>> ] bi * ;

10 20 <rectangle> area

Zur Datenkapselung wird eine Tuple-Klasse mit dem Namen rectangle und den beiden Slots width und height definiert. Das darauf folgend definierte construction-word <rectangle> liest zwei Zahlen vom Stack und belegt die beiden Slots damit. Die für rectangle definierte Methode area nimmt ein rectangle-Objekt vom Stack und berechnet die Fläche. Liegt ein Tuple-Objekt auf dem Stack, können mit slot>> die Daten ausgelesen und mit >>slot die Daten in den Slot des Objekts geschrieben werden.

Library

In Factor ist eine umfassende Bibliothek mit vordefinierten Funktionen enthalten. Für Erweiterungen existiert eine Schnittstelle zu C-Bibliotheken.

Listener

Factor Listener 0.92

Der Listener ist die interaktive 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 zur Zeit im Speicher befindlichen Definitionen und der compilierte Code werden mit save in einer Image-Datei gespeichert.

Implementierung

Die 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, Mac OS X und Windows sowie die Prozessoren x86, x86-64 und PowerPC. Am Anfang des Projektes gab es auch eine in Java geschriebene VM, die aus Gründen technischer Unterlegenheit (vor allem Geschwindigkeit) und des erhöhten Aufwandes, zwei Versionen pflegen zu müssen, eingestellt wurde. Die Implementierung für ARM-Prozessoren ist zur Zeit nicht mehr auf dem aktuellen Stand.

Self-Hosting

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.

factor -i=boot.<cpu>.image

Das dabei erstellte factor.image ist vom System abhängig und enthält das bei jedem Start geladene Basissystem von Factor.

Weblinks


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Factor-X — Saltar a navegación, búsqueda Para el programa de televisión, véase Factor X (TV). Un wikipedista está trabajando actualmente en extender este artículo. Es posible que, a causa de ello, haya lagunas de contenido o deficiencias de formato. Por… …   Wikipedia Español

  • factor — FÁCTOR, factori, s.m. I. 1. Element, condiţie, împrejurare care determină apariţia unui proces, a unei acţiuni, a unui fenomen. 2. (mat.) Fiecare dintre termenii unei înmulţiri. ♢ Factor prim = fiecare dintre numerele prime prin care se împarte… …   Dicționar Român

  • Factor 5 — Saltar a navegación, búsqueda Factor 5, LLC Tipo Privada Fundación 1987 Sede San Rafael, California, Estados Unidos Administración …   Wikipedia Español

  • factor — aside from its technical senses, means ‘a fact or circumstance that contributes to a result’, and the notion of cause lies at the heart of its use, as in Gladstone s sentence (1878) The first factor in the making of a nation is its religion. A… …   Modern English usage

  • factor — fac·tor n [Medieval Latin, doer, maker, agent, from Latin, maker, from facere to do, make] 1: one who acts or transacts business for another: as a: a commercial agent who buys or sells goods for others on commission b: one that lends money to… …   Law dictionary

  • Factor 5 — LLC war eine deutsche und später US amerikanische Firma, die Computer und Videospiele entwickelte. Sie entstand aus der Hacker Gruppe The Light Circle und wurde 1987 in Köln als kleines Entwicklungsstudio für Computerspiele gegründet. Die 5 im… …   Deutsch Wikipedia

  • Factor — Saltar a navegación, búsqueda Un factor puede hacer referencia a: Factorización; operación matemática. Factorización de enteros Factor (lenguaje de programación) Factor X; grupo de superhéroes mutantes de Marvel Comics. Factor X (programa de… …   Wikipedia Español

  • Factor Rh — Saltar a navegación, búsqueda El Factor Rh es una proteína integral de la membrana aglutinógena que está presente en todas las células. Un 85% de la población tiene en esa proteína una estructura dominante, que corresponde a una determinada… …   Wikipedia Español

  • factor Rh — m. inmun. Factor Rhesus. Medical Dictionary. 2011. factor Rh …   Diccionario médico

  • FACTOR — may also refer to the Object Oriented programming requirements caputre acronym Functionality, Application domain, Conditions, Technology, Objects and Responsibility; FACTOR (the Foundation to Assist Canadian Talent on Records) is a private non… …   Wikipedia