factor | |
---|---|
Clasa de limba | Limbajul de programare concatenativ |
Aparut in | 2003 |
Autor | Slava Pestov |
Dezvoltator | Pestov, Sviatoslav |
Eliberare | 0,98 ( 31 iulie 2018 ) |
Tip sistem | dinamic , static |
A fost influențat | Bucurie , Forth , Lisp , Self |
Licență | Licență BSD |
Site-ul web | factorcode.org |
Factor este un limbaj de programare concatenative tip dinamic dezvoltat și implementat de Slava Pestov . Principalele influențe asupra limbajului Factor au fost limbajele de programare Joy , Forth , Lisp și Self .
Autorul definește Factor ca un „limbaj de programare practic bazat pe stivă”, factori importanți în determinarea direcției de dezvoltare a acestuia sunt performanța, bogăția mijloacelor expresive (în același timp menținând claritatea și consistența) și crearea unei biblioteci standard destul de cuprinzătoare.
Ca și alte limbaje concatenative , Factor are o sintaxă postfixă , ceea ce înseamnă că argumentele funcției sunt scrise înaintea numelui acesteia. De exemplu, Hello world în limbajul Factor este:
Imprimare „Bună lume”.Factor este un limbaj tipizat dinamic cu un sistem de obiecte unic apropiat de CLOS . Factor are un set mic de tipuri de bază , iar utilizatorii și biblioteca standard își pot crea propriile clase folosind tupluri și alte mecanisme. Factorul sprijină moștenirea . Pe lângă clasele care sunt tupluri, există și alte mecanisme pentru crearea claselor ; Factor acceptă clase de predicate (subseturi ale unei anumite clase pentru care este îndeplinită o condiție de predicat) și clase de uniune . Tipurile de date compuse încorporate în Factor includ vectori cu lungime fixă și variabilă și tabele hash . La fel ca limbaje precum Common Lisp și Python , Factor acceptă un set bogat de tipuri de date aritmetice: numere întregi simple, numere întregi de lungime nelimitată, numere în virgulă mobilă. Numerele complexe , fracțiile (numerele raționale) sunt implementate în biblioteca standard. Biblioteca standard implementează, de asemenea , liste legate , matrice de valori tipizate static [1] și alte structuri de date.
Unul dintre obiectivele principale ale lui Factor este acela de a fi utilizat în dezvoltarea iterativă bazată pe teste , astfel încât nucleul lui Factor poate fi considerat un dialect sigur al Forth . Deși Factor este un limbaj tipizat dinamic, compilatorul are acces la adâncimea stivei unui cuvânt (funcție).
Prima implementare publică a lui Factor a fost scrisă în Java , însă, pentru a crește eficiența, a fost rescrisă ulterior în C (și apoi, în mai 2009, în C++ [2] ), versiunea Java a fost abandonată. Cantitatea de cod C în implementarea limbajului scade treptat, iar codul factor crește în consecință.
Factor a fost inițial un limbaj pur interpretat , dar acum este implementat pe deplin ca compilator (un compilator neoptimizator derulează în esență bucla de interpretare [3] [4] ), interpretul este reținut doar pentru a oferi un mod interactiv de operare). Compilatorul de optimizare la codul nativ este, de asemenea, scris în întregime în Factor. Nu produce executabile autonome, dar generează cod nativ care este salvat într-un fișier imagine. Aceste imagini rulează cu o suprasarcină minimă folosind o mașină virtuală. Subsistemul de implementare (deploying) vă permite să generați un fișier executabil independent din program [5] . Implementarea Factor a fost puternic influențată de Steel Bank Common Lisp [6] .
Cea mai recentă versiune stabilă este datată 20 aprilie 2013 și are numărul 0.96 [7] . De asemenea, în timp ce versiunea 1.0 este încă în dezvoltare, Continuous Builds sunt publicate în mod regulat pentru toate platformele acceptate [8] .
Între lansarea versiunilor 0.91 [9] și versiunea 0.92 [10] care a urmat-o , au trecut aproximativ 2 ani de dezvoltare activă a limbajului (cu lansarea versiunilor intermediare). În acest timp, s-au făcut modificări semnificative atât în centrul limbajului în sine, cât și în bibliotecile din jurul acestuia (în special, toate lucrările cu șiruri de caractere au fost transferate la Unicode cu suport pentru UTF-8 și UTF-16 ). [zece]
Factor are o bibliotecă în evoluție cu suport pentru dicționare , continuări , un server HTTP și un cadru web atașat , un wrapper OpenGL , o bibliotecă GUI , un parser XML etc.