Faktor (programovací jazyk) - Factor (programming language)
![]() | tento článek příliš spoléhá na Reference na primární zdroje.Července 2019) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
![]() | |
Paradigma | multi-paradigma: funkční, zřetězující, orientovaný na zásobník |
---|---|
Vývojář | Slava Pestov |
Poprvé se objevil | 2003 |
Stabilní uvolnění | 0,98 / 31. července 2018 |
Psací disciplína | silný, dynamický |
OS | Okna, Operační Systém Mac, Linux |
Licence | Licence BSD |
webová stránka | factorcode.org |
Ovlivněno | |
Radost, Forth, Lisp, Já |
Faktor je zásobníkově orientovaný programovací jazyk vytvořil Slava Pestov. Faktor je dynamicky zadáno a má automatická správa paměti, stejně jako výkonné funkce metaprogramování. Jazyk má jedinou implementaci s vlastním hostitelem optimalizace kompilátoru a interaktivní vývojové prostředí. Distribuce faktoru zahrnuje velkou standardní knihovna.
Dějiny
Slava Pestov vytvořil Factor v roce 2003 jako a skriptovací jazyk pro video hra.[1] Počáteční implementace, nyní označovaná jako JFactor, byla implementována v Jáva a běžel na Virtuální stroj Java. Ačkoli raný jazyk povrchně připomínal moderní Factor syntax „moderní jazyk se prakticky liší a současná implementace je mnohem rychlejší.
Jazyk se v průběhu času výrazně změnil. Programy Factor se původně soustředily na manipulaci s objekty Java pomocí Java odraz schopnosti. Filozofií designu byla od začátku úprava jazyka tak, aby vyhovoval programům v něm napsaným. Vzhledem k tomu, že implementace faktoru a standardní knihovny rostly podrobněji, byla potřeba určitých jazykových funkcí jasná a byly přidány. JFactor neměl objektový systém kde můžete definovat vlastní třídy a rané verze nativního faktoru byly stejné; jazyk byl podobný Systém Takto. Dnes je objektový systém ústřední součástí Factoru. Další důležité jazykové funkce, jako je n-tice třídy, kombinátor vložení, makra, definované uživatelem analýza slova a moderní systém slovní zásoby byly přidávány pouze po částech, jak byla zřejmá jejich užitečnost.
The rozhraní cizí funkce byl přítomen od velmi raných verzí po Factor a analogický systém existoval v JFactor. Toto bylo vybráno před vytvořením pluginu do C část implementace pro každou externí knihovna že Factor by měl komunikovat, a má tu výhodu, že je více deklarativní, rychlejší kompilace a snazší psaní.
Implementace Java původně sestávala pouze z tlumočník, ale překladač do Bajtový kód Java byl později přidán. Tento kompilátor pracoval pouze na určitých postupech. Java verze Factor byla nahrazena verzí napsanou v C a Factor. Zpočátku to sestávalo pouze z tlumočníka, ale tlumočník byl nahrazen dvěma překladači, kteří se používali v různých situacích. Postupem času implementace faktoru rostla výrazně rychleji.[2]
Popis
Faktor je a dynamicky zadáno, funkční a objektově orientovaný programovací jazyk. Kód je strukturován kolem malých postupů, nazývaných slova. V typickém kódu jsou to 1–3 řádky dlouhé a procedura dlouhá více než 7 řádků je velmi vzácná. Něco, co by bylo idiomaticky vyjádřeno pomocí jedné procedury v jiném programovacím jazyce, by bylo ve Factoru napsáno jako několik slov.[3]
Každé slovo přebírá pevný počet argumentů a má pevný počet návratových hodnot. Argumenty ke slovům jsou předávány a datový zásobník, použitím obrácenou polskou notaci. Zásobník se používá pouze k uspořádání volání slov, nikoli jako datová struktura. Zásobník ve faktoru se používá podobným způsobem jako zásobník v Forth; za to jsou oba považováni stohovací jazyky. Například níže je fragment kódu, který vytiskne „ahoj svět“ do aktuálního výstupního proudu:
tisk „ahoj svět“
tisk
je slovo v io
slovní zásoba, která vezme řetězec ze zásobníku a nic nevrátí. Vytiskne řetězec do aktuálního výstupního proudu (ve výchozím nastavení terminál nebo grafický posluchač).[3]
Ne všechna data musí být předávána pouze se zásobníkem. Lexikálně vymezeno místní proměnné vám umožňují ukládat a přistupovat dočasné použitý v rámci postupu. Dynamicky rozsah proměnné se používají k předávání věcí mezi voláními procedur bez použití zásobníku. Například aktuální vstupní a výstupní toky jsou uloženy v proměnných s dynamickým rozsahem.[3]
Factor zdůrazňuje flexibilitu a schopnost rozšířit jazyk.[3] Existuje systém pro makra i pro libovolné rozšíření syntaxe faktoru. Syntaxe faktoru je často rozšířena, aby umožňovala nové typy definic slov a nové typy literály pro datové struktury. Používá se také v XML knihovna poskytující doslovnou syntaxi pro generování XML. Například následující slovo vezme řetězec a vytvoří objekt dokumentu XML, což je dokument HTML zdůrazňující řetězec:
: make-html ( tětiva -- xml ) dup <XML <html> <head><title><-></title></head> <body><h1><-></h1></body> </html> XML> ;
Slovo dup
duplikuje horní položku v zásobníku. The <->
znamená vyplnění této části dokumentu XML položkou ze zásobníku.
Implementace a knihovny
Factor zahrnuje velkou standardní knihovnu napsanou výhradně v jazyce. Tyto zahrnují
- Cross-platform GUI toolkit, built on top of OpenGL a různé okenní systémy používané pro vývojové prostředí.[4]
- Vazby na několik databázových knihoven, včetně PostgreSQL a SQLite.[5]
- An HTTP server a klient, s webovým rámcem Furnace.[6]
- Efektivní homogenní pole celých čísel, plováků a struktur C.[7]
- Knihovna implementující regulární výrazy, generující strojový kód k provedení shody.[8]
A rozhraní cizí funkce je zabudován do faktoru, což umožňuje komunikaci s C, Cíl-C a Fortran programy. K dispozici je také podpora pro provádění a komunikaci se shadery napsanými v GLSL.[3][9]
Factor je implementován ve faktorech a C ++. Původně byl bootstrapován z dřívější implementace Java. Analyzátor a optimalizační kompilátor jsou dnes psány v jazyce. Určité základní části jazyka jsou implementovány v C ++, jako je garbage collector a určitá primitiva.
Factor používá obraz -na základě model, analogický s mnoha Pokec implementace, kde se kompilovaný kód a data ukládají do obrázku.[10] K sestavení programu se program načte do obrázku a obrázek se uloží. Speciální nástroj pomáhá při vytváření minimálního obrazu pro spuštění konkrétního programu a zabalí výsledek do něčeho, co lze nasadit jako samostatnou aplikaci.[3][11]
Kompilátor Factor implementuje mnoho pokročilých optimalizací a byl použit jako cíl pro výzkum nových optimalizačních technik.[3][12]
Reference
- ^ Pestov, Slava. „Roh webu Slava Pestova“.
- ^ "Concatenative.org wiki: Faktor / historie implementace".
- ^ A b C d E F G Pestov, Svjatoslav; Ehrenberg, Daniel (2010). "Faktor: dynamický programovací jazyk založený na zásobníku". Oznámení ACM SIGPLAN. ACM. 45 (12): 43–58. doi:10.1145/1899661.1869637.
- ^ Pestov, Slava. "Factor documentation: UI framework".
- ^ Coleman, Doug. "Factor documentation: Database library".
- ^ Pestov, Slava. "Factor documentation: HTTP server".
- ^ Pestov, Slava. "Factor documentation: Specialized arrays".
- ^ Coleman, Doug; Ehrenberg, Daniel. "Factor documentation: Regular expressions".
- ^ Pestov, Slava. „Generální oprava rozhraní knihovny C faktoru“.
- ^ Pestov, Slava. „Faktorový bootstrap proces vysvětlen“.
- ^ Pestov, Slava. „Na třesoucích se stromech“.
- ^ Ehrenberg, Daniel (2010). „Odstranění uzávěru jako konstantní šíření“ (PDF). Archivovány od originál (PDF) dne 26. 7. 2011.
externí odkazy
- Oficiální webové stránky
- Slava Pestov (27. října 2008). Faktor: Rozšiřitelný interaktivní jazyk (flv) (Tech talk). Google.
- Zed Shaw (2008). ACL je mrtvý (flv) (CUSEC 2008). CUSEC. - prezentace napsaná ve faktoru, která zmiňuje a chválí faktor