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.
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)!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")))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)) / dTAz 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.
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 arrayAz é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 < BEzutá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 XEz 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]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 := XIlyen 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)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+YAz 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*CEgy í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=1Ezt 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 .
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=", IAz 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 → PartieFausseAz 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.
Az XL-t számos más nyelv ihlette. Ábécé sorrendben: