středa 16. října 2019

Zajímavost: nadace

V češtině, jak tomu již u neizolovaných jazyků bývá dobrým zvykem, je nezanedbatelné množství cizích slov. Velká část těchto slov má latinský původ; jsou to slova jako operace, pozice, gravitace, exekuce, populace, fixace apod. (a samozřejmě i jinak zakončená slova, ale přípona -ce je pro tento článek momentálně relevantní).

Přípona spojující všechna tato slova měla v latině podobu -tio a používala se pro vytvoření podstatného jména představujícího nějakou činnost či její výsledek. Etymologie jí dokonce přisuzuje příbuznost s českou slovesnou koncovkou -t/-ti a její ekvivalenty se dají najít i v jiných indoevropských jazycích, byť pouze ve slovanských a románských jazycích je stále produktivní (pokud není přejatá).

Jak již název tohoto článku napovídá, zaujalo mě slovo nadace. Díky latinské příponě zní velmi vznešeně, ba skoro odborně, ale přesto, když se nad ním zamyslím, něco mi na něm nesedí. Výše uvedený seznam cizích slov má totiž svoje (zpravidla téměř doslovné) ekvivalenty i v jiných jazycích, kam se dostaly podobně jako do češtiny (např. anglické operation, position, gravitation atd.), ale nadace je anglicky foundation (tomu by byl český ekvivalent fundace) a neznám ani jiná příbuzná slova např. ve vztahu podobném jako operaceoperovat. K jakému spiknutí zde dochází?

Inu, ukradneme-li slovu nadace jeho latinskou příponu, odhalíme za ní skryté zcela obyčejné české sloveso nadáti (z nějž známe dnes nadávat nebo nadání), které bylo pouze účinně zamaskováno (Rejzek uvádí, že tak vzniklo nejspíš kontaminací se slovem donace). Všem puristům natruc tak v češtině máme slovo s domácím kořenem, ale cizí koncovkou a nikomu to nevadí. Koneckonců to není jediný příklad, houslista je na tom stejně („správně“ by to byl houslař nebo violinista), patrně opět kontaminací se slovy pianista, basista či podobnými.

I napadlo mě zjistit, jestli se někdo náhodou nedopustil toho překladatelského hříchu, že omámen iluzí mezinárodního slova nepoznal český původ slova nadace a jal se ho překládat doslovně. Nu... dopustil a nejen jednou. Trochu mně z toho krvácejí oči, byť to je hezký pokus o export českého slova, ale pramení z ignorance a lenosti a to nemůže ospravedlnit. Dokonce jsem našel i zmínky o die Nadation v němčině, ale ani celkově toho moc není (a všechno samozřejmě na cizojazyčných verzích českých stránek).

sobota 17. srpna 2019

Programovací a skriptovací jazyky

Počítačových jazyků dnes existuje nepřeberné množství, proto bývá užitečné je seskupovat do různých kategorií podle míry abstrakce, využití, způsobu běhu apod. Jedním z nich je i rozdělení jazyků na programovací a skriptovací (pojem "programovací jazyky" může být brán obecně jako všechny jazyky i konkrétně jako opak skriptovacích).

Jak už to tak bývá, i toto rozdělení je vcelku vágní. Už jsem viděl situace, kdy byl třeba jazyk C (drtivě programovací) použit pro psaní skriptů nebo kdy v JavaScriptu (převážně skriptovacím jazyce) byly napsány velké programy. Obecně se dá říct, že jazyky programovací jsou určené pro psaní programů, zatímco skriptovací jsou určené pro psaní skriptů, ale některé lze použít i pro druhý účel.

Jenomže jsme si tím moc nepomohli, neboť už ani samotné pojmy program a skript nejsou dobře definované. Program bývá tradičně izolovaný kus kódu, který může běžet samostatně, zatímco skript běží v rámci nějakého prostředí. Problém ale nastane, když si uvědomíme, že i programy vlastně běží pod operačním systémem, se kterým musejí komunikovat (pomocí API), takže i v jejich případě existuje nějaké prostředí. Můžeme z možných prostředí odstranit operační systém, ale co virtuální běhové prostředí .NET a JRE pro C# a Javu? Je kód v Lue, PHP či Haskellu, spuštěný v korespondujícím interpretru, stále program, či už skript? A co kus JavaScriptu spuštěný prohlížečem na webové stránce?

Napadlo mě, že bych tyto pojmy definoval přesněji, což by možná pomohlo při klasifikaci některých jazyků. Podle mé nové definice je program kód, jehož části mohou být vykonávány jen současně s jeho tělem. Tělo je pak hlavní procedura celého programu, s jejímž začátkem program vzniká a s jejímž koncem program zaniká. Když skončí tělo programu, už z něj nic nezbyde.

Oproti tomu skript po sobě často něco zanechává. Obsluha webové stránky v JavaScriptu či herní kód v Lue často reaguje na určité podněty generované prostředím, jejichž kód bývá vyvolán i poté, kdy skončí tělo skriptu.

Kupříkladu aplikace, která při spuštění vytvoří okno kalkulačky, reaguje na stisknutí tlačítek a počítá výsledky operací, je program, pokud součástí kódu je nějaká hlavní procedura, na jejímž začátku okno ještě neexistuje a na jejímž konci je už okno definitivně zavřené. Pokud hlavní procedura chybí (uživatelský kód jej neinicializuje), musí logicky existovat nějaké řídící prostředí, které se postará o jeho vytvoření. To zní trochu ezotericky, ale webová kalkulačka je perfektní příklad takového případu: webový prohlížeč (zde program) vytvoří reprezentaci stránky (pomocí deklarativního HTML) a poté spouští různé kusy kódu v JavaScriptu v závislosti na tom, co uživatel na stránce udělal. Pokud by existovalo nějaké newebové prostředí, které by fungovalo stejně (např. WPF neumožňující metodu Main), nebyl by v tom žádný rozdíl.

Pokud bych do své kalkulačky přidal podporu pluginů/zásuvných modulů, které bych informoval o všem, co se v kalkulačce děje (pomocí událostí), stává se moje aplikace prostředím pro skripty, ať jsou psané v C++ nebo Lue. Pokud by ale nějaký plugin převzal řízení nad aplikací (např. vytvořil modální okno), kde by kupříkladu kreslil grafy, stane se z něj program. Řízení klidně může předávat aplikaci zpět (koneckonců to samé dělá multitasking v OS), ale jeho průběh musí být jasně určen tělem.

Toto rozlišení nám umožní definovat jazyky ryze programovací (musí obsahovat tělo, které podmiňuje běh kódu programu) a ryze skriptovací (nemohou obsahovat tělo; vše je řízeno obsluhou událostí). Pokud bych vynutil v jazyce C funkci main, bude to jazyk ryze programovací, neboť vše v něm definované musí na jejím konci zaniknout. Naopak pokud bych v Lue zabránil vykonávat příkazy mimo funkci (např. tím, že globální prostředí poskytnu až po skončení těla skriptu) kromě inicializace se nebude moci takový skript nijak navenek projevovat, a tedy takový jazyk bude ryze skriptovací.

Jak je patrné z příkladů, reálné jazyky zapadají někam mezi tyto dvě kategorie. I programovací jazyk C++ mohu použít jako skriptovací v jiném programu tak, že spustím kompilátor, za běhu dynamicky načtu výsledek a zavolám v něm exportované funkce, a stejně tak interpretr JavaScriptu můžu spustit na kódu tak, že zanikne, jakmile skončí jeho tělo.

Skutečnost se má tak, že mnohdy to, zdali je nějaký jazyk programovací či skriptovací, závisí na konfiguraci prostředí. Operační systém či interpretr Luy jsou programy určené ke spouštění jiných programů a tak s nimi zacházejí, zatímco webový prohlížeč či hra je prostředí určené ke spouštění skriptů.

Příklad jazyka, který by se dal označit za hybridní, je Pawn. Ačkoliv je staticky typovaný, kompilovaný a má funkci main (tedy obsahuje rysy programovacích jazyků), je primárně určen pro psaní vnořeného kódu pro existující systémy, tedy pro psaní skriptů. Vstupní body v Pawnu jsou všechny veřejné (exportované) funkce a funkce main, přičemž má-li kód pouze veřejné funkce (a nikoliv main), jeho běh je zcela řízen prostředím a tudíž se jedná o skript, zatímco pokud kód má pouze funkci main, má jen jediný možný průběh a jedinou možnost, jak se projevit, a tudíž se jedná o program.

Tato definice není nikterak absolutní a jako podobné definice těchto termínů nemusí být ani tak užitečná, ale podle mého názoru je rozhodně zajímavé přemýšlet o návrzích jazyků z různých úhlů pohledu, zvláště když to určuje, na co se jazyky dají použít a na co nikoliv.

Na závěr je ještě nutno dodat, kam patří jazyky jako HTML či XML. Nikam, protože to nejsou aktivní jazyky, tedy jazyky umožňující zápis kódu, který něco vykonává. Pokud by programy byly na jedné straně škály a skripty na druhé, kód v HTML by přečníval dál za skripty, protože v takovém případě má prostředí absolutní moc nad tím, jak jej interpretovat.
 
Dodatek: Mluvit o webových stránkách v rámci tohoto srovnání je možná trochu nešikovné, protože každá stránka se skládá z mnoha komponent, kde ty aktivní nemají zdaleka tak velkou váhu, jako tomu bývá u klasických programů. Kód v HTML, CSS i JS existuje v rámci jednoho celkového programu, který vzniká otevřením stránky a zaniká jejím zavřením, ale ačkoliv zde prohlížeč figuruje podobně jako OS spuštěním tohoto programu, zároveň ho i (narozdíl od OS) také vytváří z poskytnutých součástí.

Druhý dodatek: Mimo toto rozdělení stojí i některé kódy, které se též tradičně nazývají programy, například lineární programy. Ty stojí na stejném místě jako XML, protože pouze popisují proměnné a jejich vztahy a slouží jen k vybudování nějakého objektu.

úterý 14. května 2019

Tolerance

Na úvod obligatorní informace, že se neztotožňuji s názory, které vedou k nadřazování skupin obyvatelstva nad jiné ani které legitimizují trestné činy. Pokud by to nebylo zřejmé.

Říkám si, kdy to začalo. Kdy se ve společnosti něco změnilo, co způsobilo, že tolerance, respekt a úcta mezi lidmi se už přestala nosit. Či jsem možná jen naivní a bylo to takhle vždycky... nevím.

Začal jsem o tom přemýšlet už v době, kdy začala kampaň MeToo, jejímž cílem bylo poukázat na sexuální obtěžování. S uplynulým časem ale mám stále větší a větší pocit, že ačkoliv důvody pro její vznik mohly být ctnostné, bylo by lepší ji spíš přirovnat k atomové pumě, kterou může každý její člen shodit na kohokoliv, s kým má nějaký problém, bez nějakých důkazů nebo soudu, bez čehokoliv. To není spravedlnost ani morálka, to je pouze msta.

Nedávno zase došlo k jakémusi „odhalení“ zpěváka Michaela Jacksona ze sexuálního obtěžování dětí. Ponechme stranou, zdali k tomu opravdu došlo; to by měl rozhodnout soud a ne já. Reakce některých lidí na tuto událost mi ale přišly naprosto odporné. Jako lavina se začaly odstraňovat Jacksonovy písničky, různé zmíňky o něm, dokonce i díl Simpsonových, kde byla jeho postava. Jako by lidi zapomněli, čím přispěl ke kultuře a k rozvoji hudby. Když už neměl přežít on, jeho dílo mělo.

Asi je jasné, proč tyto odstavce píši. Nesouhlasím s premisou, že každý člověk musí být svatý, aby měl nárok na respekt. Pokud ve společnosti stačí pouze někoho obvinit, aby se z něj stal veřejný nepřítel číslo jedna, aby mu bylo znemožněno vystupovat a být pro společnost prospěšný, pak taková společnost není soudná ani spravedlivá. Je dobře, že státy východní Evropy si už takovou dobou prošly, takže si snad jejich občané zachovají rozum, ale o budoucnost západu se upřímně bojím.

Kdyby jenom zůstalo u skutků, které mohou být trestné činy, tak budiž. Skutečnost nám však bohužel ukazuje, že i odlišnost názorů mnohdy k odstranění osoby bohatě postačí. Nedávno byl tvůrce populární hry Minecraft, známý jako Notch, odstraněn z různých textů ve hře jen kvůli tomu, že má názory, které by se daly označit jako kontroverzní. Ať jsou jeho názory jakékoliv, má na ně přeci svaté právo a to, že je ve hře zmíněno jeho jméno, jim přeci nedává žádnou větší váhu. Vždyť o tom Minecraft vůbec není.

Kdyby jenom zůstalo u názorů... Internetový tvůrce PewDiePie nemá nijak „závadné“ názory, ale přesto se už poněkolikáté média snažila vést různé kampaně na jeho zničení, přisuzujíce mu různé názory a přesvědčení podložené chabými a vymyšlenými důkazy. Opět se ukazuje, jak lehké je šířit svoji vlastní moc, když ji skryjete morálkou a dobrými úmysly. Kdo nesouhlasí, je nepřítel, rasista, xenofob; kdo se přidá, ocitne se na výsluní, je mu dána popularita, protože on je přeci ten dobrý. Přitom důležitější jsou činy než slova. Jediný dobrý důsledek toho všeho je, že ukáže lidi, kteří nemají čest ani svědomí (že, Wile Wheatone?).

Kdy už si konečně lidi uvědomí, že jde někoho uznávat a zároveň s ním nesouhlasit? Že nic není černobílé a každý člověk má mnoho stránek, které nemůžeme přehlížet všechny jen kvůli jediné z nich?

čtvrtek 7. února 2019

Zajímavost: Paradox prajazyka

Okruh lidského poznání se neustále zvětšuje. Stále nacházíme nové a nové skutečnosti, které je potřeba pojmenovat a popsat, a tak se zdá být logické předpokládat, že tak se rozšiřuje a roste i náš jazyk. Ale ouha!

Čeština se možná rozšiřuje co do nových slov a pojmů, neboť je nutno popsat nové skutečnosti, ale jazyk jako takový neroste, ba naopak. Vždyť ve srovnání se staročeštinou jsme přišli o:
  • Tři minulé časy (aorist, imperfektum a antepréteritum).
  • Dvojné číslo (duál).
  • Předbudoucí čas (futurum exactum).
  • Přechodníky (tedy ještě ne, ale brzo o ně přijdeme).
Jiné slovanské jazyky jsou na tom ještě hůř, třeba vokativ (5. pád) se z mnoha vytrácí. Už jsem si jednou posteskl nad okleštěností angličtiny, která se z původního syntetického jazyka stala jazykem analytickým, ustrnulým a neohybatelným. A všude po Evropě dochází ke zjednodušování, mizí rody (vzniká jednotný mužský a ženský), mizí pády (vokativ, dativ), mizí a sjednocují se koncovky tvarů...

Když si srovnáme vývoj indoevropských jazyků, můžeme se pokusit rekonstruovat jejich společného předka – protoindoevropštinu. Podle stávajících teorií měl tento jazyk 9 pádů, 3 vidy, 4 způsoby a svojí komplexností byl na úrovni latiny či staré řečtiny.

Co od té doby indoevropské jazyky získaly? Napadá mě akorát budoucí čas a členy jako příklady prvků, které se v mnoha jazycích vyvinuly až po rozdělení onoho prajazyka.

Paradox spočívá v tom, že není zcela jasné, co nastartovalo proces zjednodušování jazyků a proč k tomu došlo. Očekávali bychom, že na začátku vznikala z různých pazvuků podstatná jména pro popis konkrétních věcí, pak přídavná jména pro abstrakce a slovesa pro změny stavu a mohli bychom jít dál a dál ve vývoji jazyka, ale je zvláštní, že kdysi dávno si patrně indoevropské národy řekly, že už mají moc složitý jazyk, a tak se jaly jej zjednodušovat.

Tuto změnu nelze ani spojovat s rozvojem písma či s kodifikací jazyků, neboť k ní došlo nejspíš už před 4000 lety. Jedno možné vysvětlení by bylo, že jazyk byl vynálezem úzké skupiny rozumově pokročilých lidí, kteří jej rozšířili do celého svého národa, protože v jakékoliv větší skupině lidí by už žádné pokročilosti samy od sebe neprošly.

Další vysvětlení je možnost, že inteligence lidstva se v průměru spíš snižuje než zvyšuje, ale tomu moc neodpovídá očekávaná primitivita lidí v době, kdy tento jazyk vznikl.

Třetí vysvětlení je, že nám jazyk dal Stvořitel.

středa 30. ledna 2019

Nejoptimálnější článek

Tento spor se táhne historií české lingvistiky už po desetiletí. Není-li to patrno z nadpisu tohoto článku, myslím tím spor o to, zdali slovo "nejoptimálnější" (a slova jemu podobná) vůbec dávají smysl.

Po rychlém hledání lze najít mnoho argumentů pro i proti. Napřed bych se rád podíval na některé z nich:

Nedává to smysl, protože slovo "optimální" je vlastně samo o sobě ve 3. stupni.
V latině je opravdu optimus ve třetím stupni (slova bonus – dobrý), ale ani tento fakt není dobrým argumentem. Jednak jsme v češtině, kde to slovo žije vlastním životem, ale ani tak to nemůže zcela dobře být navrhovaný gramatický pleonasmus, protože to slovo samotné se vztahuje k jinému slovu, a sice k podstatnému jménu optimum (to nejlepší). Původní třetí stupeň už není relevantní.

Dává to smysl, protože nic optimálního vlastně ve skutečnosti neexistuje; můžeme se tomu pouze blížit a tedy určovat, jak moc se daná věc blíží optimu.
Nic nám nebrání mluvit o věcech, které nejsou reálné, pak můžeme docela dobře mluvit i o absolutním optimu. Krom toho vybíráme-li si ze dvou věcí, z nichž jedna je pro nás špatná a druhá dobrá, je vcelku evidentní, že v tomto souboru existuje optimální věc. Navíc tento argument skrývá i logický spor – můžeme-li se optimu pouze blížit, věc nejoptimálnější nemůže existovat, protože by vždy existovala věc optimálnější a tedy by ona původní nebyla ve skutečnosti ta nej.

Nedává to smysl, protože pokud je něco už optimální, nemůže být nic lepšího.
Zde se porovnávají špatná slova. "Optimální" a "lepší" nejsou synonyma. Tak jako "lepší" neznamená "dobré", tak ani "optimálnější" neznamená "optimální". Přeci není ani záruka, že věc nejlepší je vůbec dobrá.


Abychom se dobrali nějakého závěru, napřed je potřeba podívat se, co vlastně věc optimální je. Věc optimální je optimum, stejně tak jako věc ideální je ideál či věc maximální je maximum, v dané skupině věcí. Optimum jest něco, co nám vyhovuje nejvíce (pro daný účel), tedy vyhovuje více než všechny alternativy (jako maximum je větší než všechny ostatní prvky).

Teď přejdeme k druhému stupni. Zatímco první stupeň (pozitiv) prostě stanovuje určitou vlastnost, druhý stupeň (komparativ) porovnává míru dané vlastnosti mezi dvěma objekty. Věc optimálnější je tedy doslova to, co je více optimální než něco jiného. Třetí stupeň (superlativ) je pak už lehký, věc nejoptimálnější je optimálnější než všechny ostatní (nebo, mám-li zabrousit do matematiky, k ní neexistuje optimálnější věc, což ale není úplně ekvivalentní).

Vše nyní stojí na tom, zdali může něco být "více optimální". Vrátíme-li se zpět k našemu spojitému adjektivu "dobré", jeho míry můžeme lehce najít. Věci mohou být dobré, hodně dobré, málo dobré, trochu dobré, ne zcela dobré, vůbec dobré atd., tedy alespoň vágně lze určitou míru stanovit. Oproti tomu může být něco "málo optimální"? Podle mě taková věc není optimální vůbec, stejně tak i věc "ne zcela optimální". "Hodně optimální" už je teprve nesmysl, přeci když jsme něco už označili za optimální, máme hotovo, už není co dodat.

Míra slova "optimální" je triviální. Jsou jen dvě možnosti, buď něco optimální je, nebo není, 0/1. Stejné chování je na první pohled vidět i u slova "maximální".

A verdikt? Míra je triviální, ale existuje. Tím pádem optimálnější věc je pouze optimum (pokud existuje, vzhledem k neoptimu) nebo nic (vzhledem k optimu či pokud optimum neexistuje). Nejoptimálnější věc pak může být jedině nějaké neoptimum (neexistuje-li optimum) či nějaké optimum (všechna jsou si samozřejmě rovnocenná). Jak prosté.

Dá se tedy říct, že o věci nejoptimálnější se mluvit dá, ale zpravidla nám to nic neřekne. Když se budeme pohybovat jen v reálném světě a přijeme fakt, že optimum neexistuje, pak je nejoptimálnější všechno.

Dodatek: Při psaní tohoto článku jsem si vzpomněl na jeden dialog bůhvíodkud: "Ty jsi těhotná?!" "No trochu..."

Druhý dodatek: Matematika rozlišuje mezi největším prvkem a maximálním prvkem. Největší prvek je takový, který je větší než všechny ostatní prvky, zatímco maximální prvek je takový, ke kterému neexistuje prvek větší. U čísel obě definice splývají, ale pokud třeba porovnáváme množiny co do obsahu, může být více maximálních množin (a žádná největší).