Standard ML: Porovnání verzí

Smazaný obsah Přidaný obsah
{{wikifikovat}}
m wikifikace
Řádek 1:
'''Standard ML''' ('''SML''') je staticky orientovaný typově bezpečný univerzální [[programovací jazyk]], který ztělesňuje mnoho inovativních nápadů v oblasti návrhů a implementace programovacích jazyků. Podporuje polymorfní inference typů a automaticky zajišťuje efektivní správu paměti. Podporuje funkcionální programování, ale zároveň umožňuje [[imperativní programování]]. Usnadňuje programování s [[Rekurze (programování)|rekurzí]] a symbolických [[Datová struktura|datových struktur]] skrze podporu šablon (angl. „pattern„[[pattern matching“matching]]“). Tento jazyk je vybaven rozšiřitelným mechanismem pro manipulaci [[Výjimka (programování)|výjimek]] a poskytuje flexibilní modulovací prostředky pro strukturování velkých programů. Většina implementací nabízí rozsáhlé [[Knihovna (programování)|knihovny]] a užitečné vývojové nástroje. Téměř všechny kompilátory generují nativní [[strojový kód]], a to i při interaktivním režimu [[Interpret (software)|interpreta]]. Jazyk je populární mezi informatiky, kteří kompilátory navrhují a nebo implementují.
{{wikifikovat}}
 
SML je moderní potomek programovacího jazyka ML, který byl poprvé navržen k práci na projektu „Logic„[[Logic for Computable Functions]] (LCF)“ k dokazování teorémů. Zkratka "ML" je odvozená z anglického „Meta„[[Meta Language“Language]]“, což přeloženo do češtiny znamená „meta jazyk“ a je výrazem z oblasti jazykové logiky. V němž jsou analyzovány i jiné jazyky (formální nebo neformální). V roce 1983, Milner<ref>Robin Milner. How ML evolved. Polymorphism: The ML/LCF/Hope Newsletter, 1(1), 1983.</ref><ref>Robin Milner. Changes to the Standard ML core language. Technical Report ECS-LFCS-87-33, Laboratory for Foundations of Computer Science, Edinburgh University, 1987</ref> napsal první návrh standardizované formy ML a během následujících tří let se vyvinul jazyk Standard ML.
'''Standard ML''' ('''SML''') je staticky orientovaný typově bezpečný univerzální [[programovací jazyk]], který ztělesňuje mnoho inovativních nápadů v oblasti návrhů a implementace programovacích jazyků. Podporuje polymorfní inference typů a automaticky zajišťuje efektivní správu paměti. Podporuje funkcionální programování, ale zároveň umožňuje imperativní programování. Usnadňuje programování s rekurzí a symbolických datových struktur skrze podporu šablon (angl. „pattern matching“). Tento jazyk je vybaven rozšiřitelným mechanismem pro manipulaci výjimek a poskytuje flexibilní modulovací prostředky pro strukturování velkých programů. Většina implementací nabízí rozsáhlé knihovny a užitečné vývojové nástroje. Téměř všechny kompilátory generují nativní strojový kód, a to i při interaktivním režimu interpreta. Jazyk je populární mezi informatiky, kteří kompilátory navrhují a nebo implementují.
 
SML je moderní potomek programovacího jazyka ML, který byl poprvé navržen k práci na projektu „Logic for Computable Functions (LCF)“ k dokazování teorémů. Zkratka "ML" je odvozená z anglického „Meta Language“, což přeloženo do češtiny znamená „meta jazyk“ a je výrazem z oblasti jazykové logiky. V němž jsou analyzovány i jiné jazyky (formální nebo neformální). V roce 1983, Milner<ref>Robin Milner. How ML evolved. Polymorphism: The ML/LCF/Hope Newsletter, 1(1), 1983.</ref><ref>Robin Milner. Changes to the Standard ML core language. Technical Report ECS-LFCS-87-33, Laboratory for Foundations of Computer Science, Edinburgh University, 1987</ref> napsal první návrh standardizované formy ML a během následujících tří let se vyvinul jazyk Standard ML.
 
=== Ukázky kódu ===
 
Standardní ML je standardizovaný [[Funkcionální programování|funkcionální programovací jazyk]] s některými „nečistými“ rysy (angl. „impure features“), které umožňuji vedlejší účinky (angl. „side effects“). Jako všechny funkcionální jazyky, klíčovým a základním prvkem Standard ML je [[Funkce (programování)|funkce]]. Zde je příklad [[Faktoriál|faktoriální]] funkce:
 
fun factorial n =
if n = 0 then 1 else n * factorial (n-1)
 
Kompilátor Standard ML umí odvodit [[statický typ]] int -> int pro tuto funkci. Nejdříve odvodí, že „n“ je pouze uvedená s [[Celé číslo|celočíselnými]] výrazy (int), a z toho odvodí, že výsledek výpočtu musí být také celé číslo. Stejná funkce může být vyjádřena pomocí klausule. „If-then-else“ nahradíme sekvencí šablon oddělených symbolem "|", kde každý prvek v seznamu je vyzkoušen jeden po druhém, dokud není nalezena shoda:
 
fun factorial 0 = 1
Řádek 22 ⟶ 20:
fn n => case n of 0 => 1
| n => n * factorial (n - 1)
Nebo také jako [[Lambda funkce|lambda]]:
 
val rec factorial = fn 0 => 1 | n => n * factorial(n -1)
 
Tři klíčová slova:
* „val“ zavádí vazbu (binding),
* „fn“ zavádí definici anonymní funkce,
* „case“ představuje sekvenci vzorů a odpovídajících výrazů. Použitím [[lokální funkce]], výše uvedenou funkci můžeme přepsat na účinnější styl rekurze, tzv. „tail recursion“:
 
fun factorial n = let
Řádek 38 ⟶ 36:
end
 
Standard ML poskytuje silnou podporu pro algebraické datové typy. Datový typ v SML může být chápán jako [[Disjunktní sjednocení|disjunktní]] spojení prvku. Jsou snadno definovatelné a snadno se s nimi programuje hlavně proto, že SML dokáže dobře pracovat se vzory (pattern matching) a kontrolou úplnosti vzorů i kontrolou [[redundance]] vzorů. Typ je definován pomocí klíčového slova „type“. Taková entita je jen pomůcka programátora, tedy synonymem, které pomáhá vytvářet abstrakci. Zde je například typ pro bod v rovině:
Typ je definován pomocí klíčového slova „type“. Taková entita je jen pomůcka programátora, tedy synonymem, které pomáhá vytvářet abstrakci. Zde je například typ pro bod v rovině:
 
type bod = real * real
Řádek 87 ⟶ 84:
 
=== Výjimky ===
Výjimky jsou hozenyvyvolány pomoci klíčovým slovem „raise“, a zachází se s nimi pomoci vzorů.
 
exception Undefined