V serialu o programovacich jazycich z pekla mi chybi jazyk, ve kterem jsou psane PDF dokumenty :-D
1) Cituji ze specifikace PDF: „A type 4 function (PDF 1.3), also called a PostScript calculator function, is represented as a stream containing code written in a small subset of the PostScript language.“ Samozřejmě se můžeme dohadovat s jakou pravděpodobností se s tím lze v reálu potkat, ale faktem zůstává, že PDF může obsahovat kód v jazyce PostScript.
2) „PDF je datový formát…“ – nikdy jsem netvrdil, že je to programovací jazyk
Prosím, neberte mé příspěvky osobně a nehrajme si teď se slovíčky. Reakci jsem přidal pod váš příspěvek, protože dostatečně naplnil klišé o "PDF tvořeném PostScriptem", a zároveň jsem reagoval na původní příspěvek. (K němu bych teď dodal úvodní větu z odstavce, ze kterého citujete: "PDF is not a programming language, and a PDF file is not a program".)
Je-li cílem, aby PDF obsahovalo skutečný PostScript, pak je pouze jediná možnost – vložit tam PostScriptový dokument jako přílohu nebo jako nepoužitý objekt :-).
Funkce, o které píšete, je náhrada za obrovské tabulky převodních funkcí u mnohobarevných dokumentů (hexachrom -> cmyk, na vstupu 6 reálných čísel, na výstupu 4), používá se u barevných profilů a polotónů. V žádném případě nejde o plnohodnotný Postscript: "Although the semantics are those of the corresponding PostScript operators, a PostScript interpreter is not required." Jinými slovy - je to primitivní funkce bez vedlejších efektů s numerickým vstupem a numerickým výstupem. Toť vše, žádné cykly, proměnné ani řízení běhu... "There are no composite data structures such as strings or arrays, no procedures, and no variables or names." "This construct (if, ifelse) is purely syntactic; unlike in PostScript, no “procedure objects” are involved."
Jak jsem narazil v článku o šíleným programování na nadpis o zápisu čísly, tak nevím proč, ale hned jsem si vzpomněl na ZX Spectrum a jeho Basic. To je taky zajímavý jazyk (resp. lehce ujetý systém):
- každý řádek má povinně svůj label, reprezentovaný číslem
- každý příkaz je v paměti uložen jako číslo
- proměnný mají jenom dva typy, číslo a string
- délka názvu proměnné je omezena tuším na dva znaky
- funkce může být jenom matematický výraz
- fakt, že čísla příkazů jsou převedeny na pseudoanglický slova je dostatečně šíleně kompenzován klávesnicí, kde je 40 tlačítek a každý má tuším šest funkcí.
A když si představím, že v tom jsem napsal svůj první program... Brr :D
Ten BASIC byl spíše agilní než moderní :-) Pokud se použil TURBO BASIC, pak se uživatel dostal na zcela jinou úroveň programování – byla tam spousta syntaktického pozlátka (jakože procedury a cykly..), lepší kontrola chyb, větší množství volné paměti (!) a především vyšší rychlost. Jak bylo možné zrychlit provádění programu? Snadno. ATARI BASIC při každém skoku opakovaně vyhledával cílový řádek, a to vždy od začátku programu. Opravdu se vyplatilo dát déle prováděné smyčky na začátek programu.
- každý řádek má povinně svůj label, reprezentovaný číslem
Jo, to je BASIC. Viz ECMA-55. Jinak Kurtz číslování řádků opustil už v sedmdesátých letech, ale tradice je tradice.
- každý příkaz je v paměti uložen jako číslo
Dneska se tomu říká bytekód, tenkrát tokeny.
- proměnný mají jenom dva typy, číslo a string
Číslo s plovoucí desetinnou čárkou nebo string libovolné délky, s velikostí omezenou dynamickým přidělováním paměti.
- délka názvu proměnné je omezena tuším na dva znaky
Délka názvu číselné proměnné je neomezená, pole a řetězce můžou být jednoznakové.
- funkce může být jenom matematický výraz
Jo, to je BASIC. Viz ECMA-55. Také můžou být logické i s rekurzí, ale v každém případě jenom jednořádkové.
- fakt, že čísla příkazů jsou převedeny na pseudoanglický slova je dostatečně šíleně kompenzován klávesnicí, kde je 40 tlačítek a každý má tuším šest funkcí
To existovalo dávno před Sinclairem (třeba Wang 2200), a když se to člověk naučí zpaměti, tak ten program píše neuvěřitelně rychle. I velmi dlouhá slova jako RANDOMIZE se dají napsat na maximálně tři stisky kláves. Kromě toho to geniálně zjednoduší editor, protože se nemusí parsovat text, ale z klávesnice se zadávají přímo tokeny, což přesně odpovídá Sinclairově konstrukční filozofii - maximálně to ojebat, aby to ještě fungovalo. Například oddělení sběrnic Spectra rezistory místo hromady drahých hradel... :-D
Jsem si vzpomněl jak mne vlastně dementní Basic od vilika brány v2.0 na c64 vlastne naučil low level veci a asm ještě dementnejsiho procesoru. Njn. Vzpomínky na první a druhou třídu. Nechápu na co si spectristi ztezovali. Vždyť ten basic uměl I kreslitka I pipatka. Nemuseli hned honit peeky a pokemony. I když ovládání horší než německý kalkulačky to zas jo.
I tento Pavlův seriál sleduji a musím říct, že peklo je mnohem temnější, než jsem si původně myslel při sledování televizních hororů.
Pro mě je už i takový jazyk Lisp, nebo Closure dostatečně kryptický, abych se jim vyhnul, i když určitý půvab mají a můj obdiv mají i programátoři, kteří ho používají.
Jinak, pokud by nás čtenáře chtěl Pavel dostat z pekla, ocenil bych povídání třeba o programovacím jazyku Ceylon.
Taky jsem se Lispu bál, ale nějak mi to nedalo. Některý dialekty jsou celkem fajn, třeba knížka Realm of Racket (http://realmofracket.com/), která mě zabavila na celkem dlouhou dobu. To jen tak, aby řeč nestála. :)
Doufam, ze se dostane i na ArnoldC!
http://lhartikk.github.io/ArnoldC/
IT'S SHOWTIME
TALK TO THE HAND "hello world"
YOU HAVE BEEN TERMINATED
Ja zase očakávam Šaral.
Pre českých čitateľov (ale koneckoncov aj pre vaščšinu slovákov) nepochopiteľný ;o)
https://github.com/laciKE/saral/blob/master/specifikacia.md
http://www.trsek.com/pascal/%C5%A0aral_-_nov%C3%BD_programovac%C3%AD_jazyk
Někdo to sem kdysi dával
https://github.com/tkohout/OSTRAJava
Jo a moc se omlouvam: samozrejme priste bude i Lingua::Romana::Perligata