Sémiotika, relativně mladý vědní obor, se většině lidí pojí (pokud tedy vůbec s něčím) se jménem Umberta Eca. V 70. letech 20. století se vědci pokusili aplikovat principy sémiotiky i na programovací jazyky. Jedním z prvních byl Heinz Zemanek.
Sémiotika rozděluje aspekty (formálních, tedy i programovacích) jazyků na syntaktiku, sémantiku a pragmatiku. Syntaktika popisuje vztahy mezi znaky navzájem, sémantika vztahy mezi znaky a jejich významem a pragmatika vztahy mezi znaky a interpretantem.
Syntaktiku (neplést se syntaxí) ani sémantiku asi není nutné ilustrovat na příkladech. Pragmatika je v tomto kontextu méně známá, uveďme si proto příklad (v Prologu):
sousedi(cesko, slovensko).
sousedi(cesko, polsko).
sousedi(X, Y) :- sousedi(Y, X).
Pro jednoduchost uvádím pouze dva fakty. Pravidlo na třetí řádce říká, že relace sousedi je, ve shodě se znalostmi o reálném světě, komutativní. Uvedený kód je logicky korektní (z pohledu predikátové logiky) a Prolog nám vypíše všechna řešení (tj. rekurzivně vyčíslí celou relaci). Uvažme nyní mírně pozměněný program.
sousedi(X, Y) :- sousedi(Y, X).
sousedi(cesko, slovensko).
sousedi(cesko, polsko).
Oba kódy jsou ze sémantického hlediska ekvivalentní, nicméně u druhého se Prolog zacyklí, aniž by vydal nějaký výsledek. Liší se totiž kontextuální interpretace uvedeného kódu. V tomto příkladě je problém v tom, že Prolog nepoužívá úplnou vyhledávací strategii (kvůli šetření pamětí), takže na některé větve výpočtu se nikdy nedostane. Prolog není čistě deklarativní, proto záleží na pořadí klauzulí.
Pod pragmatiku spadají i tzv. indexikální výrazy, tedy takové, jež závisí na kontextu. Kód class X { … }; má v C++ vždy shodný význam bez ohledu na kontext. Na druhou stranu this->print(„1234“); nemá samo o sobě význam žádný, protože this je lexikální výraz (jeho významem je funkce z kolekce kontextů do kolekce objektů). Podle kontextu, v němž se tento výraz vyskytuje, se program také vůbec nemusí přeložit (není syntakticky správný), případně může být sémanticky nekorektní (což se při překladu může projevit, ale také nemusí), nebo může vyvolat běhovou chybu.
Nově se sémiotikou ve spojení s vyčíslitelností zabývá Peter B. Andersen. Každý vývojář, který je víc než „cvičená opice generující bezmyšlenkovitě kód“, by výsledky jeho práce měl alespoň zběžně znát.
@3 Příklad z (jazyka) matematiky: {a,b,.} jsou (elementární) znaky. Když napíšu "a.b", jedná se o komplexní znak, jehož význam lze v metajazyce popsat jako "a krát b". Interpretace toho výrazu závisí na kontextu, jinak se interpretuje pro čísla, jinak v Booleových algebrách, ještě jinak v gramatikách (jako konkatenace) apod. Pokud napíšu "ab", jedná se syntakticky (v angl. se rozlišuje "syntactical" a "syntactic", zde myslím to první) o odlišný znak (chybí .), který je ale sémanticky ekvivalentní "a.b".
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 35 862×
Přečteno 25 082×
Přečteno 23 524×
Přečteno 19 973×
Přečteno 17 293×