SML

funkcionális programozási nyelv

Az SML programozási nyelv a lambda-kalkuluson alapuló funkcionális programozási nyelvek családjába tartozik, az ML programozási nyelv szabványosított kiterjesztése. A széles körben elterjedt nyelvek között egyedi módon formális specifikációval rendelkezik, működési szemantikáját a The Definition of Standard ML című könyv írja le.

Leginkább egyetemi környezetben használják oktatási célokkal.

Jellegzetességek szerkesztés

Az SML-re (mint általában a funkcionális nyelvekre) jellemző a roppant tömör, kifejező programszöveg. A program lényegében (matematikai) függvények definíciójának sorozatából épül fel (innen a funkcionális elnevezés). Az SML szigorúan típusos, azaz minden kifejezésnek és függvénynek pontosan meghatározott típusa van. Az újabb funkcionális nyelvektől eltérően tartalmaz nem tisztán funkcionális elemeket, azaz mellékhatással járó könyvtári függvényeket, amelyek eredménye nem pusztán a paraméterek aktuális értékétől, hanem a környezet, a világ pillanatnyi állapotától is függ. (Tipikusan ilyenek a ki- és bevitelért felelős függvények.)

A klasszikus "Helló, világ!" példa szerkesztés

Az SML tömörségére jellemző, hogy egy "program", amely kiírja a fenti szöveget, tkp. csak magából a szövegből áll (a beírt szöveg vastag betűvel szerepel):

"Helló, világ!";
> val it = "Helló, világ!" : string

Alig valamivel komplikáltabb egy függvény, amely a fenti füzért adja eredményül:

fun hello() = "Helló, világ!";
> val hello = fn : unit → string
– hello();
> val it = "Helló, világ!" : string

A harmadik példa (a korrektség kedvéért) a konzolra írja ki a kívánt szöveget, ahelyett, hogy értékként adná vissza (a dőlt betűs szöveg a konzol tartalma):

print "Helló, világ!\n";
Helló, világ!
> val it = () : unit

Megvalósítások szerkesztés

Többek között az alábbi SML értelmező- ill. fordítóprogram megvalósítások ismertek:

  • A Moscow SML (röviden MOSML) egy könnyűsúlyú, a CAML Light motorra épülő SML értelmező. Eleget tesz a teljes SML specifikációnak, többek között támogatja a modulok használatát és tartalmazza az SML alapkönyvtár jelentős részét. ([1])
  • A Poly/ML az SML specifikációt teljes egészében megvalósító, gyors, hatékony kódot előállító fordítóprogram. ([2])
  • A Standard ML of New Jersey (röviden SML/NJ) szintén teljes SML megvalósítás, amely értelmező- és fordítóprogramot is tartalmaz. ([3])
  • Az SML2c fordítóprogram SML nyelvű moduldeklarációkat fordít C nyelvre. Az SML/NJ fordítóján alapul, de nem támogatja annak nyomkövető- és teljesítményelemző (profiling) szolgáltatásait.
  • MLton fordítóprogram, a teljes forrásprogramot egy fázisban fordítja le. ([4])

A fenti megvalósítások mindegyike nyílt forráskódú és szabadon elérhető.

Kapcsolódó szócikkek szerkesztés

Hivatkozások szerkesztés

  • R. Milner, M. Tofte, R. Harper and D. MacQueen. The Definition of Standard ML (Revised).ISBN 0262631814.