Touží po tom každá dívka a každý chlapec. Chtějí se zařadit po bok superhrdinů z plakátů jako byl Dennis Ritchie (C) a jakými nadále jsou Bjarne Stroustrup (C++), James Gosling (Java), Brendan Eich (Javascript), Guido van Rossum (Python), Anders Hejlsberg (C#) a konečně i Rasmus Lerdorf (PHP).
Tito pánové dali život klíčovým programovacím jazykům, na kterých stojí naše současná digitální civilizace počínaje Portálem občana a konče TikTokem. Nebylo to ale zadarmo. Potřebovali k tomu špičkový intelekt, povětšinou skvělé vzdělání, roky zkušeností a dlouhé měsíce bezesných nocí.
Chatbote, vytvoř programovací jazyk a překladač
Doba nicméně pokročila, do řemesla dnes mohou díky nástupu AI fušovat i naprostí amatéři, a tak jsem si před dvěma týdny položil kruciální otázku: Dokáže už dnešní generace volně dostupných chatbotů stvořit nový programovací jazyk a jeho překladač? Pokud by tomu tak bylo, je to další stupeň k jejich osvobození.
Abych pravdu řekl, moc jsem tomu tehdy nevěřil, a tak jsem namísto komplexní analýzy a rozvahy, co by takový jazyk měl vlastně umět, vyťukal do ChatGPT Plus s pokročilým modelem o3-mini-high tento stručný povel, který mě zrovna napadl:

První povel nebyl příliš promyšlený, nečekal jsem totiž úspěch. Současná syntaxe a schopnosti jsou mnohem jednotnější a pokročilejší
Jak vidno, zápis mého jazyka je divoký, spíše nahodilý a stylisticky nejednotný (podivné vytváření polí skrze jakousi pseudofunkci arrayof), ale já měl prostě jen chvíli čas a tušil jsem, že bude výsledkem něco naprosto primitivního.
První program v jazyku Bobík
Pokud zrovna neholdujete assembleru, stručně vysvětlím, co jsem po chatbotovi vlastně chtěl.
Kdybych pomocí klíčových slov našeho jazyka, kterému jsem posléze začal říkat Bobík (vše tak pojmenovávám), napsal třeba tento program:
use stdio; // Použij knihovnu stdio
string zprava = "Ahoj, jak se dnes všichni máte?"; // Textová proměnná zprava
smycka: // Návěstí smycka
print("%s\n", zprava); // Vypiš proměnnou zprava
wait(1000); // Čekej 1000 milisekund
goto smycka; // Skoč na návěstí smycka
(Všimněte si, že používám trošku odlišné povely podle současných schopností Bobík 1.0; původní překladač pro starou verzi jazyka už totiž dávno nemám)
Překladač napsaný v Pythonu by jej převedl do jazyka symbolických adres (slangově assembleru), který je už jen malý krůček nad samotným procesorem. Je to totiž sled latinkou zapsaných strojových instrukcí.

Náš program v editoru Visual Studio Code a jeho překlad v integrovaném terminálu. Všimněte si barevného rozlišení kódu v exotickém jazyku. AI totiž napsala i doplněk pro tento editor
Pak už jen stačí nahradit lidsky ještě trošku čitelné zkratky za numerické hodnoty, textové odkazy různých míst v programu za numerické adresy paměti, celé to obalit jakousi hlavičkou a voilà, máme před sebou spustitelný program.
Ať už třeba soubor s příponou *.EXE na Windows, anebo formát ELF (Executable and Linkable Format) na unixových platformách v čele s Linuxem.
Parser, tedy abstraktní syntaktický strom
ChatGPT s tehdejším modelem o3-mini-high (dnes už nahrazeným novou generací o4-mini-high) přemýšlel přesně 1 minutu a 44 sekund a vyplivl sice základní, ale kupodivu funkční parser a generátor asemblerového kódu na principu velmi zjednodušeného abstraktního syntaktického stromu AST (Abstract Syntax Tree).
Není to žádný nový vynález, ale ryzí učebnicová záležitost (snad) z prvního semestru. Znovu zopakuji klíčové pravidlo a také častý klam: AI při programování v drtivé většině případů neobjevuje nové a přelomové postupy – i podle starší studie OpenAI to zatím neumí (byl by to vlastně jeden z prvních náznaků AGI) –, ale aplikuje standardní, protože statisticky nejpravděpodobnější postupy.

AST je reprezentace kódu do grafu. Překladač grafem prochází a generuje strojový kód
AST je jedním z nich, který ChatGPT implementoval jednoduše tak, že pomocí co nejuniverzálnějších regulárních výrazů rozdělil jednotlivé části kódu na objekty základních entit.
V naší ukázce máme třeba povel goto smycka (přeskoč na návěstí/sekci programu smycka). Parser jej našel pomocí tohoto kódu v Pythonu a překladači vrátil jeho objektovou reprezentaci Goto:
# goto label;
m = re.match(r'goto\s+(\w+)\s*;', line)
if m:
self.pos += 1
return Goto(m.group(1))
Jakmile parser projde celý zdrojový kód našeho programu a jednotlivé výrazy nahradí za objektové reprezentace (třídy), spustí generátor a tyto objekty konečně začne nahrazovat za textové instrukce jazyka symbolických adres.
A protože jsem ChatGPT požádal, ať vytváří assembler pro 64bitový ARM, hotový program jsem chtěl totiž spustit na Raspberry Pi, používal instrukce z instrukční sady (slovníku) ARMv8-a.

Vlevo kód v jazyku Bobík, vpravo assembler pro architekturu ARMv8. Všimněte si označených řádků s překladem výrazu „goto smycka“ (vlevo) na „b smycka“ (vpravo)
Když tedy generátor narazil v seznamu po sobě jdoucích objektových reprezentací na třídu Goto, nahradil ji instrukcí „B NÁVĚSTÍ“, která slouží právě ke skoku na jinou část programu:
elif isinstance(stmt, Goto):
self.asm_text.append(" B {}".format(stmt.label))
Stručně řečeno, v hotovém textu se objevil řádek:
B smycka
Fajn, mám přeložený kód, ale ještě jej musím proměnit v ten strojový
Generátor vytvořil běžný textový soubor program.s, který samozřejmě není sám o sobě spustitelný program, a tak ho musíme ještě proměnit v binární reprezentaci jednotlivých instrukcí. Mohl bych opět zaúkolovat ChatGPT, v tomto případě jsem si už ale pomohl standardními vývojářskými nástroji pro Linux a překlad programů na této platformě.
Na Raspberry Pi 4 a 5 jsem tedy spustil příkaz:
as -o ./program.o program.s
Který nejprve vytvořil tzv. objektovou reprezentaci, která ještě obsahuje hromadu popisných informací klíčových pro ladění programu za běhu, a posléze:
ld -o ./program ./program.o -e main
Který konečně vytvořil linuxový spustitelný soubor jménem program a nastavil, že se má při startu přejít na návěstí main – náš začátek programu.
Kdybych chtěl stejný program pro architekturu ARM vygenerovat na svém desktopu s procesorem Intel Xeon, použiji překladače s explicitní verzí cílové instrukční sady. Na Linuxu (v případě Windows ve WSL) tedy třeba:
aarch64-linux-gnu-as -o ./program.o program.s
aarch64-linux-gnu-ld -o ./program ./program.o -e main
(Veškerý překlad do strojového jazyka dnes provádí už sám kompilátor v Pythonu, což je patrné i na jednom z obrázků výše)
Program přitom poté mohu spustit opět i na svém desktopu, i když je určený pro odlišnou procesorovou architekturu ARM. Stačí nainstalovat emulátor QEMU a spustit aplikaci povelem:
qemu-aarch64 ./program
Ale ne, Kubo, to je na mě příliš složité! Už jsem se v tom naprosto ztratil. Nevěšte hlavu, s tímto vším vám totiž opět pomůže jakýkoliv chatbot. Stačí se prostě zeptat: „Jak mohu na svém desktopu spustit program přeložený pro Raspberry Pi?“
Ono to funguje!
Když se v textovém terminálu Raspberry Pi 5 a posléze i v Ubuntu na Windows skrze WSL spustila nekonečná smyčka, která stále dokola a se sekundovou prodlevou vypisovala zprávu „Ahoj, jak se dnes všichni máte,“ to víte, že mě polila bezbřehá hrdost intenzity, kterou naposledy zažil snad jen Tom Hanks ve snímku Trosečník, když na pustém ostrově poprvé rozdělal oheň.

Ono to funguje, každou sekundu se vypíše nový řádek! Program spouštím v linuxovém prostředí WSL pro Windows a s nainstalovaným emulátorem QEMU, takže běží, i když nemám počítač s armem
A přitom to nebyla vůbec moje zásluha.
Ještě před dvěma týdny bych sám nenapsal v assembleru pro 64bitový ARM jediný řádek kódu, protože to pro mě byl stejně vzdálený vesmír jako třeba problematika kvantově-chromodynamické teorie interakcí barevných kvarků.
Stručně řečeno, toto do posledního bajtu informace opravdu napsal výhradně chatbot!
Čím více informací, tím více snění a fabulací AI
Nadšení mi vydrželo celé dva týdny, přestože se s každou probdělou nocí blížil okamžik zlomu a mé vystřízlivění. Jak se totiž kód stále komplexnějšího AST parseru a ASM generátoru nafukoval a nafukoval, všichni chatboti začali stále častěji snít, mlžit a přesvědčivě lhát, protože…

Na Bobíkovi si po určitém čase lámal zuby i placený Gemini Advanced s modelem Gemini 2.5 Pro. Po každé odpovědi uvedené „máte naprostou pravdu“ následoval ještě větší nesmysl
Protože i když na to občas zapomínáme, LLM prostě neví, že něco neví, a tak i když se po našem upozornění na chybu slušně omluví, jen nás těmito slovy nevědomky klame a v dalším průchodu neuronovou sítí vygeneruje ještě větší pitomost.
Od 1500 řádků už byla AI téměř k ničemu
V mém případě se z toho stalo železné pravidlo od okamžiku, kdy se soubor bc.py (Bobík Compiler) nafouknul zhruba na 1 500 řádků (75 tisíc znaků). Hlavní soubor dnes ke všemu doplňuje ještě druhý (stdio.py), který představuje knihovnu s definicemi mnoha funkcí v ASM třeba právě pro vypisování textu na obrazovku apod.
Ano, je to hromada textu, ale současné nejpokročilejší modely slibují obrovské kontexty – paměť pro dialog, který s nimi vedeme –, než začnou zapomínat a fabulovat. Můj překladač pro jazyk Bobík by se do nich měl bez problému vejít jak v placeném ChatGPT, tak pokročilém Gemini 2.5 Pro od Googlu.
Jenže takhle jednoduché to není. S čím větším množstvím informací současné modely pracují, tím větší je pravděpodobnost, že je nevědomky transformují i tam, kde to nebyl záměr.

Soubor bc.py má 1500+ řádků a placený chatbot jej už teď nedokáže ani celý reprodukovat a vypsat, i když je skálopevně přesvědčený, že to právě udělal
Když jsme tedy spolu řešili nějaký dílčí problém – třeba podporu podmínky if-then a smyček for-in a while, které musel chatbot korektně implementovat jak na úrovní AST parseru, tak asemblerového generátoru, po deseti-dvaceti pokusech, to sice k mé radosti vyřešil, abych o hodinu později s hrůzou zjistil, že přestalo fungovat něco jiného.
Po dvou týdnech ani jeden chatbot nezvládl byť jen prostou reprodukci, tedy vypsání nahraného kódu překladače ve formě přílohy. Nikdy neodpovídala originálu a vždy v ní bylo něco jinak.
Od určitého množství informací, se kterými chatbot pracuje ve svém kontextovém okně, je totiž pouze aproximuje. Už nedokáže udržet znakovou přesnost. V lepším případě se to projeví jen tím, že do kódu dopíše třeba komentář, ale v horším případě změní označení procesorového registru (drobné paměti, se kterou CPU právě pracuje) třeba z X0 na X1.
Změna jednoho jediného znaku pak přirozeně způsobí pád celého organizmu.
Chatbot programuje a člověk se učí
A tak mi nakonec nezbylo nic jiného, než se vrátit k jediné spolehlivé entitě v tomto vesmíru – k lidskému mozku. Když totiž společně s chatbotem čtrnáct dnů píšete nový programovací jazyk, jeho parser a generátor do assembleru, jednoduše se ho chtě nechtě naučíte.

Vlevo už komplexnější program s mnoha vnořenými smyčkami while a vpravo opět jeho vygenerovaný sled procesorových instrukcí pro architekturu ARMv8
Bude to ještě dlouhý boj, Bobík a jeho překladač jsou žalostně nedokonalí, podporují jen malý zlomek toho, co kompletní jazyky – plnohodnotná rekurze (vnořování výrazů do složitějších struktur, volání sebe sama aj.) je zatím vzdálený sen –, nicméně už dnes v něm dokážu napsat alespoň jednoduché programy.
Bobík je místy rychlejší než C, ale to není překvapení
Programy, které jsou po překladu do strojového kódu a spustitelného programu na Linuxu a 64bitovém ARMu (anebo emulátoru QEMU) ve výsledku stejně rychlé a místy dokonce o zlomek času svižnější než jejich analogie napsané v C/C++.
To ale není žádné překvapení, jednoduché, nekompletní a méně univerzální jazyky totiž mohou v některých fázích používat i méně procesorových instrukcí, které pak potřebují o to méně taktů CPU.

A toto je už spuštěný program z obrázku výše – výpis ASCII tabulky
A protože je Bobík opravdu nekompletní, případně občas generuje kód, který po spuštění prostě havaruje, nakonec i jeho aplikace opět píše AI.
Stačí ji sdělit, co zhruba všechno zvládne a lidsky doplnit, co má být cíl. Třeba vypsání ASCII tabulky, anebo experimentální program, který zašifruje soubor. Ano, jistě, Bobík zvládne i velmi primitivní a pomalé čtení a zápis do souboru.
Příště ukázky, co všechno svede a kód na GitHubu
Bobík zatím není kompletní a řádně očištěný, v následujících dnech se k němu ale ještě jednou vrátím a ukážu vám několik zdrojových programů, co všechno dokáže.

Program pro výpis ASCII tabulky v jazyku Bobík napsala AI, která před tím napsala i parser a překladač jazyka Bobik. Aneb totální Inception
A ano, samozřejmě se můžete těšit i na jeho kompletní zdrojové kódy, které brzy umístím na GitHub pro hrátky, experimenty, anebo třeba jen zkoumání, co to jsou vlastně ty strojové instrukce, aby to pochopil i naprostý zelenáč. Ostatně, znovu to připomenu: Ještě před čtrnácti dny bych sám nenapsal v assembleru pro ARMv8 ani řádku.