XL (kieli)

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.

Kieli

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

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- semantiikka

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)) / dT

Taso 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.

Kirjoitusjärjestelmä

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 array

Validoitu 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 < B

Sitten 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 X

Tä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]

Suojattu argumenttimuuttujaluettelotyyppi

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 := X

Kun 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)

Lausekkeen vähennys (käyttäjän ylikuormitus)

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+Y

Tä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*C

Kirjallinen 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=1

Tä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.

Iteraattorit

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=", I

XLR- semantiikka

XLR 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 → PartieFausse

Kehityksen tila ja historia

XL: 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.

Edeltäjät

XL on saanut inspiraationsa lukuisista muista kielistä. Aakkosjärjestyksessä:

  • Ada inspiroi joitain toimintoja, joita sovellettiin koko ohjelmaan, kuten poikkeusten hallinta , tehtävät ja siirrettävyys.
  • Basic , pääasiassa nykyaikaisissa versioissa, jotka poistavat rivinumerot ja mahdollistavat jäsennellyn ohjelmoinnin, on osoittanut kuinka yksinkertainen ohjelmointikieli voi olla. Basic on yksi ensimmäisistä moderneista kielistä, joka ei vaadi sulkujen käyttöä rutiinipuheluissa.
  • C: tä käytettiin vakiona suoritukseen (ajonaika) ja konetasoon. XL ei toimi virtuaalikoneella.
  • C ++ on vakiomallikirjastojensa kautta osoittanut tarpeen geneeristen tyyppien hyvälle toteutukselle, mukaan lukien implisiittisesti geneeristen esimerkkien esiintyminen (mikä Adalta puuttuu).
  • Fortran tavoittelee ja ylittää C: n ja C ++: n suorituskyvyn korkean suorituskyvyn tietokonesovelluksissa auttaen tunnistamaan kielirakenteet, jotka estäisivät hyödylliset optimoinnit.
  • Java osoittaa kannettavan kirjastojärjestelmän tärkeyden. Java-kontit osoittavat myös lähestymistavan rajoitukset, jotka eivät perustu yleiseen ohjelmointiin. Liitäntä Java-koodiin on edelleen mielenkiintoinen haaste XL: lle.
  • Lispin laajennettavuutta on pidetty keskeisenä tekijänä sen selviytymisessä ja mielenkiinnossa tähän päivään asti. Lisp otti ensimmäisenä käyttöön objektisuuntautuneen toiminnallisuuden, vaikka se suunniteltiin vuosia ennen olio-ohjelmoinnin keksimistä.
  • Prolog on osoittanut, että vaihtoehtoiset ohjelmointiparadigmat ovat joskus hyödyllisiä ja erittäin tuottavia. Kaikki on tehty sen varmistamiseksi, että Prolog-tyyppinen laajennus voidaan kirjoittaa XL: lle.
  • Visual Basic osoitti, kuinka analyysipuun esitys voidaan erottaa sen visuaalisesta esityksestä. Harvat ihmiset muokkaavat VB-lomakkeita tekstimuodossa. Toivottavasti XL Edition -laajennukset tarjoavat jonain päivänä samanlaisen toiminnallisuuden, joka manipuloi suoraan analyysipuuta.

Huomautuksia ja viitteitä

  1. (in) Phil Manchester , "  kaivaa ohjelmoinnin käsite  " , The Register ,16. tammikuuta 2008( luettu verkossa , kuultu 3. helmikuuta 2010 )

Ulkoiset linkit