Není nad pořádný flame o programovacích jazycích…
Promiňte, ale dva a půl roku jsem vedl magazín Zdroják, tehdy ještě pod stejným vydavatelem, jako má Lupa, a v komentářích jsem se dozvídal naprosto skvělé myšlenky. Třeba že vymýšlet cokoli po Javě nemá smysl, protože Java je univerzální stříbrný projektil, zlaté kladívko a neprůstřelný pancíř, univerzálně vhodná pro bankovní systémy, webové aplikace i jednočipy. Všechno ostatní je proto jen hype, reklamní bublina a nesmysl, módní vlna, kterou stejně nikdo používat nebude. Jakmile se takový fundamentalista objevil v komentářích, bylo o zábavu postaráno.
Já popravdě přiznávám, že netuším, jaký jazyk se bude používat za pět let. Natož jaký budu používat já. Před pěti lety to vypadalo na JavaScript, před deseti na PHP, ale upřímně: nevím. Možná bych měl v tomto roli jednodušší, kdybych taky věřil na všespásnost Javy, ale k tomu bych musel mít trošku sklony k náboženskému myšlení, a to nemám.
Když se mě ptají lidé, co tedy bude tím budoucím jazykem pro IoT, odpovídám: Nevím. Moje “nevím” je velmi kvalifikované a fundované, není to proto, že bych o tom byl líný přemýšlet, ale proto, že jsem o tom přemýšlel opravdu důkladně.
Je téměř jisté, že za pět let bude stále ten nejmainstreamovější jazyk připomínat svou syntaxí Céčko. Budou tam složené závorky a středníky a tečková notace a tak. Není to proto, že by tahle syntax byla nejlepší (to není), nebo že by byla skvěle parsovatelná (to taky není), ale je to proto, že ji skoro všichni programátoři znají, protože se s ní setkali. Vezměte si: C, C++, C#, Java, JavaScript, PHP – všechno má velmi podobný kód. S trochou fantazie do toho můžeme započítat i Python, když si k odsazení domyslíme složené závorky.
Budou to jazyky, co budou vládnout IoT? Velmi pravděpodobně ano, ale je potřeba říct jednu zásadní věc: Internet věcí má dva konce, totiž “internet” a “věci”, jestli to takto můžu zjednodušit. Na jednom konci jsou malé elektronické věcičky, s malými procesory a se specifickými požadavky, a na druhé straně jsou velké cloudové aplikace s obrovskými datovými toky. Na té “internetové” straně se asi žádných překvapení nedočkáme – tam se dál pojedou webové technologie jako dřív, jazyky zůstanou stejné, jen se budou vyvíjet stejně jako web.
Co ale na té “věcné” straně? Tam už to dnes vypadá na poměrně velký chaos a na bonanzu nových jazyků, které (ve velké většině) zazáří a pak pohasnou, oprašovány malou skupinkou nadšenců. Tato strana IoT má totiž specifické požadavky a většinou k nim patří: nízká spotřeba, málo RAM, málo ROM, jednojádro, relativně nízké frekvence.
Samozřejmě můžete stavět systémem “co čidlo, to BeagleBoard s ARMem a Linuxem”, a pak je jedno, v čem se to bude ovládat, jestli v Pythonu, JavaScriptu nebo třeba ve Scale. Ale když přijde řeč na menší procesory, zní odpověď jednoznačně: Céčko, popřípadě assembler. Jenže céčko je pro moderního programátora pořád velký low level a assembler ještě horší. Takže se jako houby po dešti vyrojily nové jazyky a každý z nich doufá, že dokáže prorazit.
Příkladem může být jazyk B# (čtěte B sharp). Jak název napovídá, bude mít cosi společného s C#, a je tomu přesně tak: B# je v podstatě C#, ořezané o některé vymoženosti, které nejsou moc kompatibilní s “low power small footprint” systémy. Běží nad virtuálním strojem EVM (Embedded Virtual Machine), který potřebuje ke svému běhu 24 kB FLASH a 2 kB RAM (tedy i malé ARMy mají dostatečnou kapacitu). S tímto jazykem je ale drobný problém: můžete najít seriál “jak programovat v B#”, ale tím to docela hasne a dál nic.
Zajímavé mohly být i jazyky BitC, Cyclone – takové “bezpečné C”, nebo Timber, založený na reaktivním paradigmatu. Všechny se tvářily tak, že jsou dobrým řešením pro embedded zařízení, ale všechny nějak tak po pár letech zemřely.
Drží se jazyk D a má i nějaké reálné aplikace. Google s Nestem navrhují Brillo, Apple nabízí Swift, ale nakonec rozhodne trh, a pravděpodobně rozhodne opět tak, jako rozhodl vždy, totiž že nezvítězí technicky nejlepší a nejvyspělejší řešení, ale to, co budou používat “skoro všichni”, ačkoli na to budou nadávat.
Šanci má třeba Lua, která není moc náročná na hardware, dá se snadno propojit se systémem v C (je napsaná v ANSI C) a je docela snadno naučitelná a použitelná. Hraje pro ni fakt, že se ji podařilo implementovat do malých jednočipů, a například pro ESP8266 existuje implementace NodeMCU, kdy nepotřebujete kromě malého čipu už nic víc a máte programovatelné zařízení, připojené přes WiFi… Ze stejné líhně je MicroPython s implementací pro ESP8266 i pro STM32.
Výhodou těchto jazyků je, že jim stačí relativně malé “běhové prostředí”, které jednak může zabránit určitým chybám a zajistit bezpečné zotavení, ale zároveň může sloužit jako abstraktní vrstva, která pomůže snadněji přenášet aplikace mezi různými platformami.
V souvislosti s embedded aplikacemi na mne vždy čas od času vykoukne jazyk FORTH. Jeho výhodou je minimální běhové prostředí a vysoký výkon, nevýhodou pak to, že FORTH byl navržen tak, aby byl jednoduchý pro počítač, ne pro programátora, takže jeho příkazy připomínají něco jako “programátorský těsnopis”. Ale přesto se používá poměrně často, protože je to ověřený a docela “starý” jazyk.
Objevují se i různé vizuální editory či generátory aplikací, které vycházejí z přístupu “vy si napište jen těch 10 řádků, co vás živí, zbytek zařídíme my”, a jejich výsledkem je zákazníkova byznys logika a kotel souborů .C a .H, které po přeložení vytvoří kýžený firmware.
Ale který z těchto přístupů a jazyků bude tím budoucím mainstreamem, to si netroufám odhadnout.