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.
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.)
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
Többek között az alábbi SML értelmező- ill. fordítóprogram megvalósítások ismertek:
A fenti megvalósítások mindegyike nyílt forráskódú és szabadon elérhető.