XL (laajennettava kieli) | |
Ensimmäisen version päivämäärä | 2000 |
---|---|
Paradigmat | Pakollinen ohjelmointi |
Kehittäjä | Christophe de Dinechin |
Viimeinen versio | 0,1 (2010) |
Kirjoittaminen | Vahva |
Vaikuttanut | Ada , C ++ |
Käyttöjärjestelmä | Unix-tyyppi |
Lisenssi | Nestekaasu |
Verkkosivusto | XLR |
XL , jonka kirjeet tulevat e X tensible L anguage , on ohjelmointikieli , joka perustuu ohjelmoinnin käsitteistä , kehitetty vuodesta 2000 vuoteen Christophe de Dinechin .
XL tarjoaa mahdollisuuden muokata ja ohjelmoida kielen syntaksia ja semantiikkaa . Joitakin käännettyjä laajennuksia voidaan käyttää uusien ominaisuuksien lisäämiseen kielelle. Voimme esimerkiksi huomata joukon laajennuksia, jotka mahdollistavat pakollisen kielen käyttöönoton . Käyttäjät voivat itse kirjoittaa omat laajennuksensa salliakseen tietyn syntaksin käytön esimerkiksi johdannaiselle , jota voidaan käyttää samalla tavalla kuin alkuperäisiä toimintoja.
XL määritellään neljällä eri tasolla:
XL: llä ei ole primitiivistä tyyppiä tai avainsanaa . Kaikki operaattorit ja tietotyypit, kuten kokonaisluvut tai lisäykset, määritetään XL2- standardikirjastossa . XL1 on kannettava eri ajo-ympäristöissä. Mitä ei voida taata XL2: lle, joka ei tarjoa tällaisia takuita: jos tietty prosessori ei toteuta liukulukuista kertomista , vastaavan operaattorin määritelmä saattaa puuttua vakiokirjastosta, ja tämän ominaisuuden käyttö voi aiheuttaa käännösvirheen.
XL-muodossa Hello World -ohjelma voidaan kirjoittaa seuraavasti:
use XL.TEXT_IO WriteLn "Hello World"Sopivampi tapa suuremmille ohjelmille olisi:
import IO = XL.TEXT_IO IO.WriteLn "Hello World"Toteutuksen indusoimalla kertoma toiminto :
0! → 1 N! → N * (N-1)!Syntaksi on määritelty XL0- tasolla . Kääntäjän XL0- vaihe voidaan määrittää käyttämällä syntaksikuvaustiedostoa, jossa määritetään ominaisuudet, kuten tekstin esitys ja operaattorin prioriteetit. Perussyntaksitiedosto määrittelee yleiset matemaattiset merkinnät, kuten + lisäämistä varten, sekä operaatioiden etusijan .
Syntaksipuun koostuu 7 eri solmuja: 4 eri lehdet (kokonaisluku, todellinen, teksti ja symboli) ja 3 eri sisäisten solmujen ( infix , etuliite ja lohko).
Oletussyntaksitiedostossa seuraava koodi on voimassa XL0 : lle semantiikasta riippumatta:
A = B + "Salut"Se on jaoteltu seuraavasti:
infix("=", symbol("A"), infix("+", symbol("B"), text("Salut")))XL1- taso määritellään toimintosarjana XL0- tason syntaksipuussa . Nämä toiminnot suoritetaan kääntäjän erilaisilla laajennuksilla, joita kutsutaan syntaksipuun muodon mukaan.
Erikoisrakenteet, translateja translation, tarjoaa laajennus, jonka tarkoituksena on helpottaa muiden laajennusten kirjoittamista. Rakenne quoteluo syntaksipuun. Näin näitä rakenteita voidaan käyttää nimettyjen laajennusten toteuttamiseksi ZeroRemoval, mikä poistaa lisäyksen ja kertomisen nollalla:
translation ZeroRemoval when 'X' + 0 then return X when 'X' * 0 then return parse_tree(0)Laajennus voidaan kutsua täydelliseen tiedostoon komentoriviltä tai useammin paikallisesti koodilähteestä käytännön merkintää käyttäen , kuten tässä:
X := {Differentiate} d(sin(omega * T) * exp(-T/T0)) / dTTaso XL1 sisältää suuren joukon laajennuksia, mukaan lukien XLSemanticsjolloin yhteinen vedenotto kuten toiminto , tietotyyppi ja ilmoitus on vaihteleva ja määritelmä , ja myös perus komennot rakenteellisella ohjelmointi kuten silmukoita ja olosuhteet.
XL1 ohjaa staattista tyyppiä yleisillä ohjelmointimahdollisuuksilla, jotka ylittävät C ++ tai Ada. Tyypit, kuten taulukot tai osoittimet, jotka ovat primitiivisiä tyyppejä C ++: ssa, ilmoitetaan XL-kirjastossa. Esimerkiksi yhden ulottuvuuden matriisin tyyppi voidaan määrittää seuraavasti:
generic [Item : type; Size : integer] type arrayValidoitu geneerinen tyyppi on geneerinen tyyppi, jossa ehto osoittaa, kuinka tyyppiä voidaan käyttää. Tällaisilla tyypeillä ei saisi olla yleisiä parametreja. Esimerkiksi voimme ilmoittaa tyypin ordered(tilatuksi), jos alempi operaattori on paikalla:
// Un type est ordonné en présence d'un opérateur inférieur generic type ordered if A, B : ordered Test : boolean := A < BSitten on mahdollista julistaa funktio, joka on implisiittisesti yleinen, koska tyyppi ordereditse on järjestetty.
// Function générique pour au moins un élément function Min(X : ordered) return ordered is return XTämä koskee myös geneerisiä tyyppejä, joilla on parametreja, kuten array. Matriisin elementtien summan laskeva funktio voidaan kirjoittaa:
function Sum(A : array) return array.Item is for I in 0..array.Size-1 loop result += A[I]Toiminnot voivat olla ylikuormitettuja . Funktio voidaan ilmoittaa muuttuvalla argumenttimäärällä otherparametriluettelossa olevan sanan ansiosta . Tällaisessa toiminnossa othervoit siirtää vaihtelevan määrän argumentteja toiselle funktiolle:
// 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 := XKun tällaista toimintoa kutsutaan, kääntäjä kutsuu funktiot rekursiivisesti vastaamaan luetteloa:
// 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)Operaattorit voidaan määritellä käyttämällä writtentoimintoilmoituslomaketta. Tässä on koodi, joka ilmoittaa kokonaislukujen lisäämisen:
function Add(X, Y: integer) return integer written X+YTällaisilla kirjoitetuilla lomakkeilla voi olla enemmän kuin kaksi parametria. Esimerkiksi lineaarinen matriisimuunnos voidaan kirjoittaa:
function Linear(A, B, C : matrix) return matrix written A+B*CKirjallinen lomake voi käyttää vakioita, ja tämän tyyppinen muoto on enemmän erikoistunut kuin ilman vakioita. Esimerkiksi :
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=1Tätä mekanismia käytetään kuvaamaan kaikkia perusoperaattoreita. Lauseke supistuu vähitellen puheluiksi käyttäen kirjoitettuja lomakkeita. Tästä syystä tätä mekanismia kutsutaan pikemminkin lausekkeen vähentämiseksi kuin operaattorin ylikuormitukseksi.
Iterators XL voidaan ohjelmoida molemmat generaattorit ja iterators .
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=", IXLR on dynaaminen kieli, joka on alun perin suunniteltu XL1- kääntäjän taustapuoleksi (tästä syystä nimi, joka edustaa XL- ajonaikaa ). Se jakaa perus XL0 syntaksin kanssa XL1 , mutta se käyttäytyy enemmän kuin toiminnallinen kieli, vaikka XL1 on tarkoitus näyttää enemmän kuin välttämätöntä kieli. XLR: llä on käytännössä vain yksi rakennusoperaattori "→", mikä tarkoittaa päällekirjoitusta. Uudelleenkirjoituksen vasemmalla puolella oleva merkintä muutetaan uudelleenkirjoituksen oikealla puolella olevaksi merkinnäksi.
Tätä mekanismia käytetään vakiomerkintöjen toteuttamiseen:
si vrai alors PartieVraie sinon PartieFausse → PartieVraie si faux alors PartieVraie sinon PartieFausse → PartieFausseXL: n suunnittelu alkoi noin vuonna 1992 nimellä LX (kokeellinen kieli). Projekti tuotiin vapaiden ohjelmistojen alueelle vuonna 2000 osana Mozart-projektia, jonka tavoitteena oli tarjota monikielisiä metaprogrammitoimintoja . Aikaisimmat kääntäjät kirjoitettiin C ++: lla, mutta tämä vaikeutti kääntäjien laajennusten kirjoittamista, koska C ++ ei tuottanut haluttua abstraktiotasoa (esim. Vastaava ). Monikieliset näkökohdat tekivät syntaksipuiden käsittelystä vaikeaa kunnioittaen kunkin kielen semantiikkaa. translate
Kääntäjän täydellinen uudelleenkirjoittaminen alkoi vuonna 2003 , luopuen ajatuksestaan monikielisestä tuesta, joka oli osoittanut sen rajat, ja keskittyen laajennusten kirjoittamisen helppouteen. Abstrakti syntaksipuun on vähentynyt vain seitsemän solmutyypistä edustaa kaikkia ohjelmia. Tämä uusi kääntäjä on itse kääntänyt vuonna 2004 (vaikkakin vähäisillä ominaisuuksilla ja riippuvuudella luodun koodin C ++: sta). Siitä lähtien kaikki kehitys on tehty XL: ssä.
Vuodesta 2007 kieli tarjoaa suuren määrän edistyneitä ominaisuuksia, mutta silti puuttuu toimiva kirjasto.
XL on saanut inspiraationsa lukuisista muista kielistä. Aakkosjärjestyksessä: