Faktor (programovací jazyk) - Factor (programming language)

Faktor
NewFactorLogo.png
Paradigmamulti-paradigma: funkční, zřetězující, orientovaný na zásobník
VývojářSlava Pestov
Poprvé se objevil2003
Stabilní uvolnění
0,98 / 31. července 2018 (2018-07-31)
Psací disciplínasilný, dynamický
OSOkna, Operační Systém Mac, Linux
LicenceLicence BSD
webová stránkafactorcode.org
Ovlivněno
Radost, Forth, Lisp,

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

  1. ^ Pestov, Slava. „Roh webu Slava Pestova“.
  2. ^ "Concatenative.org wiki: Faktor / historie implementace".
  3. ^ 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.
  4. ^ Pestov, Slava. "Factor documentation: UI framework".
  5. ^ Coleman, Doug. "Factor documentation: Database library".
  6. ^ Pestov, Slava. "Factor documentation: HTTP server".
  7. ^ Pestov, Slava. "Factor documentation: Specialized arrays".
  8. ^ Coleman, Doug; Ehrenberg, Daniel. "Factor documentation: Regular expressions".
  9. ^ Pestov, Slava. „Generální oprava rozhraní knihovny C faktoru“.
  10. ^ Pestov, Slava. „Faktorový bootstrap proces vysvětlen“.
  11. ^ Pestov, Slava. „Na třesoucích se stromech“.
  12. ^ Ehrenberg, Daniel (2010). „Odstranění uzávěru jako konstantní šíření“ (PDF). Archivovány od originál (PDF) dne 26. 7. 2011.

externí odkazy