Nedávno jsem se dostal k vývoji softwaru pro satelitní přijímače. Protože mi používané řešení přijde poměrně zajímavé a ne zrovna všeobecně známé, rozhodl jsem se napsat o něm pár poznatků.
K experimentům jsem použil Clarktech ET9000. Ten má procesor MIPS (na 400 MHz), 128MB úložiště na desce (flash) a 512MB operační paměti (a ještě 8 MB pro bootloader). Operačním systémem je upravený Linux a nad ním Enigma.
Samotný systém (aspoň ten, co tam byl původně) není příliš stabilní. Po několika počátečních experimentech se přijímač zaseknul a po restartu už nenabootoval. Po rutinním flashnutí nového bootloaderu (přes USB) taky nenabootoval, tak nezbylo než flashnout celý nový image. Takto jsem poněkud nedobrovolně updatoval na nejnovější verzi Enigmy a mohl začít s vývojem.
Enigma je napsaná v C++ a původně se v něm psaly i pluginy. Jenže kompilovat pro MIPS je neskutečný vopruz, a tak se vývojáři rozhodli (ve verzi Enigma2) poskytnout pro pluginy jen nativní rozhraní a psát jen v nějakém (interpretovaném) jazyce na vyšší úrovni. Volba padla na Python.
O Pythonu jsem do té doby nevěděl téměř nic. Naštěstí je snadný na naučení a navíc dost dobře navržený. Jedná se o dynamický jazyk výrazně inspirovaný Smalltalkem, ovšem s několika vychytávkami navíc. Předně má něco na způsob doesNotUnderstand, takže v něm snadno napíšete proxy. Má generátory (yield), iterátory a „správu kontextů“ (tím je myšleno něco na způsob using a IDisposable v C# pro korektní správu nepaměťových zdrojů). Python, ač primárně objektově orientovaný, podporuje také funkcionální styl programování. A v neposlední řadě moderní překladače podporují JIT.
Zajímavě je řešena správa paměti. Používá se čítač referencí a navíc klasický mark-and-sweep GC pro cykly referencí. Pokud jste dobří a referenčním cyklům se umíte vyhnout, můžete GC vypnout. Toto chování bylo důležité pro volbu Pythonu jako jazyka pro pluginy v Enigmě, protože tehdy byla operační paměť v běžných přístrojích opravdu malá a latence byla znát.
Celé řešení tak trochu připomíná Windows Phone 7 posazený na prastarém Windows Mobile. Aplikace sice píšete ve verzi Silverlightu, ale ten jen obaluje staré dobré (nebo špatné?) COM objekty. V Enigmě máte jádro v C++ a nad ním Python. Vzhledem k tomu, že typický plugin tak nanejvýš zobrazí seznam programů, umožní vám přidat časovač pro nahrávání, případně zobrazí obraz v obraze, není nic výkonnějšího potřeba. Navíc pro Python existuje množství knihoven, takže nic vám nebrání v pár řádcích načíst data, např. předpověď počasí, z nějaké webové služby a zobrazit je na obrazovce přes právě běžící program.
„...výrazně inspirovaný Smalltalkem, ovšem s několika vychytávkami navíc.“ Smalltalk má doesNotUnderstand; generátor je možno se stejnou složitosí přepsat na collection collect: s funkcí, takže se jeví jako syntaktická zkratka nebo balast; iterátory jsou takovou samozřejmostí, že se o nich ani nemluví; neobjektová data nepoužívá, takže srovnání nemá smysl; funkcionální zápis výpočtu se běžně užívá. Nějak mi unikly ty „vychytávky“.
Vychytavka navic je treba citelny zapis matematickych vyrazu. Udelejte si aproximaci nejake funce Taylorem a napiste prvni tri cleny ve smalltalku. Potom to nekomu ukazte a zeptejte se ho, co to je. Pak to same udelejte v Pythonu a porovnejte, jak dlouho na to ten clovek musel zirat.
[2] Moduly nejsou vlastností jazyku, ale např. implementace. O té Zboj nemluvil.
[3] V pořádku, to beru, ale já jsem reagoval na Zbojem uvedený seznam za slovy „Předně má“. Dá se očekávat, že jiný jazyk bude mít jiné věci, ale ty ze seznamu k nim zrovna nepatří. Píšu to proto, že z textu to vypadalo, že Python „to vymyslel“. Nevymyslel.
Autor se zabývá vývojem kompilátorů a knihoven pro objektově-orientované programovací jazyky.
Přečteno 36 200×
Přečteno 25 361×
Přečteno 23 795×
Přečteno 20 177×
Přečteno 17 874×