XL (nyelv)

XL (eXtensible Language)
Az első változat kelte 2000
Paradigmák Kötelező programozás
Fejlesztő Christophe de Dinechin
Utolsó verzió 0,1 (2010)
Gépelés Erős
Befolyásolta Ada , C ++
Operációs rendszer Unix típus
Engedély LPG
Weboldal XLR

XL , akiknek a leveleit származik e X tensible L anguage , egy programozási nyelv alapján programozás által fogalmak kifejlesztett óta 2000 által Christophe de Dinechin .

Az XL lehetőséget kínál a nyelv szintaxisának és szemantikájának módosítására és programozására . Néhány lefordított bővítmény felhasználható új funkciók hozzáadásához a nyelvhez. Például megjegyezhetünk egy beépülő modult, amely lehetővé teszi egy imperatív nyelv használatát . A felhasználók maguk is elkészíthetik saját beépülő moduljaikat, hogy lehetővé tegyék a speciális szintaxis használatát, például a származék esetében , amelyet ugyanúgy lehet használni, mint az eredeti szolgáltatásokat.

Nyelv

Az XL négy különböző szinten definiálható:

Az XL-nek nincs primitív típusa vagy kulcsszava . Minden operátort és adattípust, például egész számokat vagy kiegészítéseket, az XL2 szabványos könyvtár határoz meg . Az XL1 különféle futási környezetekben hordozható. Mi nem garantált az XL2 esetében, amely nem nyújt ilyen garanciákat: ha egy adott processzor nem valósít meg lebegőpontos szorzást , előfordulhat, hogy a megfelelő operátor meghatározása hiányzik a standard könyvtárból, és ennek a szolgáltatásnak a használata fordítási hibát generálhat.

Az XL-ben a Hello World program a következőképpen írható:

use XL.TEXT_IO WriteLn "Hello World"

A nagyobb programok számára megfelelőbb módszer lenne:

import IO = XL.TEXT_IO IO.WriteLn "Hello World"

Megvalósítás a faktoriális függvény indukciójával  :

0! → 1 N! → N * (N-1)!

Szintaxis

A szintaxist az XL0 szint határozza meg . A fordító XL0 fázisa konfigurálható egy szintaxis leíró fájl segítségével, ahol olyan tulajdonságokat határoznak meg, mint a szövegábrázolás és az operátor prioritásai. Az alapszintaktikai fájl meghatározza az általános matematikai jelöléseket, például a + összeadáshoz, valamint a műveletek elsőbbségét .

A szintaxisfa 7 típusú csomópontból áll: 4 típusú levél (egész szám, valós, szöveg és szimbólum) és 3 típusú belső csomópont ( infix , előtag és blokk).

Az alapértelmezett szintaxis fájlnál a következő kód érvényes az XL0-re , szemantikától függetlenül:

A = B + "Salut"

A következő csoportokra oszlik:

infix("=", symbol("A"), infix("+", symbol("B"), text("Salut")))

XL1 szemantika

Az XL1 szintet az XL0 szint szintaxisfájának műveletsorozataként definiáljuk . Ezeket a műveleteket a fordító különféle pluginjai hajtják végre, amelyeket a szintaxisfa alakjának megfelelően hívnak meg.

A speciális konstrukciókat, translateés translationegy plugin biztosítja, amely megkönnyíti a többi plugin írását. A konstrukció quoteszintaktikai fát generál. Így lehet ezeket a konstrukciókat használni egy megnevezett plugin megvalósításához ZeroRemoval, amely eltávolítja az összeadást és a szorzást nullával:

translation ZeroRemoval when 'X' + 0 then return X when 'X' * 0 then return parse_tree(0)

A beépülő modul meghívható egy teljes fájlra a parancssorból, vagy lokálisan a kódforrásban a pragma jelöléssel , például itt:

X := {Differentiate} d(sin(omega * T) * exp(-T/T0)) / dT

Az XL1 szint számos plugin készletet tartalmaz, beleértve XLSemanticsaz általános absztrakciókat, például a függvényt , az adattípust , a változó és a definíció deklarációját , valamint a strukturált programozás alapvető parancsait, például a ciklusokat és a feltételeket.

Gépelési rendszer

Az XL1 a statikus típust vezérli, általános programozási lehetőségekkel, amelyek meghaladják a C ++ vagy az Ada lehetőségeit. A tömböket vagy mutatókat, amelyek primitívek a C ++ nyelven, egy könyvtárban deklaráljuk XL-ben. Például egy dimenzió tömbjének típusát a következő módon határozhatjuk meg:

generic [Item : type; Size : integer] type array

Az érvényesített általános típus olyan általános típus, ahol egy feltétel jelzi, hogy a típus hogyan használható. Az ilyen típusok nem rendelkezhetnek általános paraméterekkel. Például kijelölhetünk egy típust ordered(rendezettnek), ha alacsonyabb operátor van jelen:

// Un type est ordonné en présence d'un opérateur inférieur generic type ordered if A, B : ordered Test : boolean := A < B

Ezután deklarálható egy olyan funkció, amely implicit módon általános, mivel orderedmaga a típus rendezett.

// Function générique pour au moins un élément function Min(X : ordered) return ordered is return X

Ez vonatkozik a generikus típusok, amelyek paramétereket, mint például a array. Egy tömb elemeinek összegét kiszámító függvény írható:

function Sum(A : array) return array.Item is for I in 0..array.Size-1 loop result += A[I]

Védett argumentum változó lista

A funkciók túlterhelhetők . Egy függvény változó számú argumentummal deklarálható othera paraméterlistában szereplő szónak köszönhetően . Egy ilyen függvényben otherlehetővé teszi változó számú argumentum átadását egy másik függvényhez:

// Fonction générique pour le minimum de N éléments function Min(X : ordered;…) return ordered is result := Min(…) if X < result then result := X

Ilyen függvény meghívásakor a fordító rekurzívan hívja meg a függvényeket a lista egyezéséhez:

// Exemple d'utilisation de la fonction Min précédente X : real := Min(1.3, 2.56, 7.21) Y : integer := Min(1, 3, 6, 7, 1, 2)

Kifejezéscsökkentés (a kezelő túlterhelése)

Az operátorokat a writtenfunkció deklarációs űrlap segítségével lehet meghatározni . Itt van egy kód, amely deklarálja az egész számok hozzáadását:

function Add(X, Y: integer) return integer written X+Y

Az ilyen írott formáknak kettőnél több paraméterük lehet. Például egy lineáris mátrix transzformáció írható:

function Linear(A, B, C : matrix) return matrix written A+B*C

Egy írott forma használhat konstansokat, és ez a típusú forma inkább specializálódott, mint konstansok nélkül. Például :

function Equal(A, B : matrix) return boolean written A=B function IsNull(A : matrix) return boolean written A=0 function IsUnity(A : matrix) return boolean written A=1

Ezt a mechanizmust használják az összes alapvető operátor leírására. Egy kifejezés fokozatosan írásbeli űrlapokat használó hívásokra redukálódik. Emiatt ezt a mechanizmust kifejezéscsökkentésnek, nem pedig operátor túlterhelésnek nevezzük .

Iterátorok

Az Iterators XL programozható az iterátorok mindkét generátora .

import IO = XL.UI.CONSOLE iterator IntegerIterator (var out Counter : integer; Low, High : integer) written Counter in Low..High is Counter := Low while Counter <= High loop yield Counter += 1 // I doit être déclaré, car indiqué comme 'var out' dans l'itérateur // Une déclaration implicite de I comme entier est alors faite ici for I in 1..5 loop IO.WriteLn "I=", I

XLR szemantika

Az XLR egy dinamikus nyelv, amelyet eredetileg az XL1 fordító hátuljának terveztek (innen származik a név, amely az XL futásidőt képviseli ). Megosztja az alapvető XL0 szintaxist az XL1- gyel , de inkább funkcionális nyelvként viselkedik, bár az XL1 állítólag inkább imperatív nyelvnek tűnik. Az XLR- nek gyakorlatilag csak egy konstruktor operátora van, a "→", ami felülírást jelent. Az átírási jelölés bal oldalán lévő jelölés átalakul az átírás jobb oldalán lévő jelöléssé.

Ezt a mechanizmust használják a szabványos jelölések végrehajtására:

si vrai alors PartieVraie sinon PartieFausse → PartieVraie si faux alors PartieVraie sinon PartieFausse → PartieFausse

A fejlődés és a történelem állapota

Az XL tervezése 1992 körül kezdődött , LX (kísérleti nyelv) néven. A projekt 2000- ben került a szabad szoftverek területére , a „Mozart” projekt részeként, amelynek célja a többnyelvű metaprogramozási képességek biztosítása volt . A legkorábbi fordítókat C ++ nyelven írták, de ez megnehezítette a fordító kiterjesztések írását, mivel a C ++ nem biztosította a kívánt absztrakciós szintet (pl . A többnyelvű aspektusok megnehezítették a szintaxisfák manipulálását, miközben tiszteletben tartották az egyes nyelvek szemantikáját. translate

A fordító teljes átírása 2003-ban kezdődött , felhagyva a többnyelvű támogatás gondolatával, amely megmutatta a határait, és a bővítmények írásának egyszerűségére összpontosított. Az absztrakt szintaxisfa csak hét csomóponttípusra csökkent, hogy az összes programot ábrázolja. Ez az új fordító 2004 - ben saját maga fordított össze (bár csökkentett képességekkel és a generált kód C ++ függőségével). Azóta az összes fejlesztés XL-ben történt.

Mivel a 2007 , a nyelvet kínál számos fejlett funkciók, de még mindig hiányzik a működőképes könyvtárban.

Elődök

Az XL-t számos más nyelv ihlette. Ábécé sorrendben:

  • Ada inspirálta a program egészére alkalmazott néhány funkciót, például a kivételkezelést , a feladatokat és a hordozhatóságot.
  • Az Basic , főleg modern verziókban, amelyek eltüntetik a sorszámokat és lehetővé teszik a strukturált programozást, megmutatta, hogy milyen egyszerű lehet a programozási nyelv. Az Basic az egyik első olyan modern nyelv, amely nem igényli a zárójelek jelenlétét a rutinhívások körül.
  • C- t használták alapértelmezésként a végrehajtáshoz (futásidejéhez) és a gép szintjéhez. Az XL nem fut virtuális gépen.
  • A C ++ szabványos modellkönyvtárai révén megmutatta az általános típusok megfelelő megvalósításának szükségességét, implicit módon beleértve a generikusok példányosítását is (ami Adának hiányzik).
  • A Fortran nagy teljesítményű számítástechnikai alkalmazásokban törekszik és meghaladja a C és C ++ teljesítményét, elősegítve a nyelvi konstrukciók azonosítását, amelyek megakadályoznák a hasznos optimalizálást.
  • A Java bemutatja a hordozható könyvtári rendszer fontosságát. A Java tárolók bemutatják a nem általános programozáson alapuló megközelítés korlátait is. A Java-kóddal való összekapcsolás továbbra is érdekes kihívás az XL számára.
  • A Lisp kiterjeszthetőségét kulcsfontosságú tényezőnek tekintették a mai napig fennmaradásában és érdeklődésében. A Lisp volt az első nyelv, amely bevezette az objektumorientált funkcionalitást, annak ellenére, hogy évekkel ezelőtt az objektumorientált programozás feltalálása előtt készült.
  • Prolog bebizonyította, hogy az alternatív programozási paradigmák néha hasznosak és nagyon eredményesek. Mindent megtettünk annak érdekében, hogy a Prolog stílusú plugin írható legyen az XL-hez.
  • A Visual Basic bemutatta, hogy az elemző fa ábrázolása hogyan választható el a vizuális megjelenítéstől. Kevesen szerkesztik a VB űrlapokat szöveges formában. Remélhetőleg az XL kiadás pluginjai egyszer hasonló funkciót fognak nyújtani, közvetlenül manipulálva az elemző fát.

Megjegyzések és hivatkozások

  1. (in) Phil Manchester , "  megmártózik Programozás Concept  " , The Register ,2008. január 16( online olvasás , konzultáció 2010. február 3-án )

Külső linkek