Na konci února se v Krakowě konala dvoudenní konference o funkcionálních jazycích, Lambda Days, což byla skvělá příležitost udělat si výlet, proszwisztit szi szlowiczka a dozvědět se něco nového.
Dva hlavní motivy konference byly Erlang a Scala, což není tak překvapivé, projdeme-li si seznam sponzorů (což nijak nesnižuje kvalitu přednášek). Na druhou stranu, akce byla zdarma, takže dík. Celá konference byla v angličtině, kromě jedné přednášky, což jsme dali s klukama pořadatelům pořádně sežrat (na twitteru), nakonec jsme si ale vzpomněli, že jsme bratři Slovani a že polštině vlastně rozumíme, zvlášť když je v IT polovina výrazů stejně anglicky ("V Scale jest bardzo mocny pattern matching"). Za ten sprdung na twitteru se nám pak pořadatelé pomstili svým národním nápojem, vařenou řepou. Abych se přiznal, vzal jsem si kelímek jen proto, že se tam něco rozdávalo zdarma, a teprv pak jsem zjistil, že je to řepa. No nakonec to bylo celkem dobré a aspoň jsem si rozšířil obzory. Ale teď už k obsahu:
Erlang je hrozně zajímavá věc. Nemyslím teď samotný jazyk, ale celou platformu (OTP) pro tvorbu distribuovaných, masivně paralelních, odolných (fault-tolerant) aplikací, které mají mít minimální down-time. Na rozdíl od mnoha jiných populárních platforem je prověřen praxí, a to ne jen tak ledajakou: Vyvinul ho Ericsson, používá ho T-Mobile a další telekomunikační společnosti, Basho, Facebook nebo WhatsApp.
Jak uvedl ve své přednášce o výhodách Erlangu z pohledu businessu Torben Hoffmann (CTO Erlang Solutions), po akvizici WhatsApp Facebookem je 19 miliard důvodů, proč ho používat (tolik dolarů za WhatsApp Facebook zaplatil). Business hledisko stálo přímo u zrodu Erlangu: Ericsson potřeboval platformu, která by byla spolehlivá, umožňovala upgrade za běhu, měla minimální downtime a zároveň nabízela větší produktivitu než C++ nebo Java. Tři základní principy, ze kterých Erlang jako platforma vychází, jsou "fail fast", "failure handling" a "share nothing".
"Share nothing" je dnes stále důležitější. Rychlost procesorů přestala růst někdy kolem roku 2006, místo toho roste počet jader na čipu. Díky tomu se stále častěji budeme potkávat s "manycore" a "megacore" počítači. Aby naše programy dokázaly na plno využít síly takových počítačů, budou muset být masivně paralelní. Příklad: Aby program opravdu využil kapacitu 64 jádrového stroje, musí být paralelizovatelný z více než 90%. Existuje totiž zákon, který stanovuje maximální teoretické zrychlení algoritmu podle míry jeho paralelizace - Amdahlův zákon. Takže i když bude algoritmus paralelizovatelný ze 75%, což se může zdát hodně, maximální teoretické zrychlení je čtyřnásobné, a od 128 jader přestane rychlost růst (viz graf). Masivní paralelizace lze dosáhnout pouze tehdy, pokud program rozdělíte na malé nezávislé jednotky, které mezi sebou nic nesdílí.
"Share nothing" má i další výhodu - pokud nastane neošetřená chyba v monolitické aplikaci, může se dostat do nekonzistentního stavu a nejlepší je ji celou restartovat. Pokud nastane chyba v jedné z mnoha oddělených jednotek, zbytek aplikace není ovlivněn. V Erlangu každou takovou jednotku (worker) spravuje supervizor, který ji při chybě prostě zahodí a vytvoří novou. Supervizory tvoří strom, takže když selže supervizor, jeho nadřazený supervizor ho zahodí a vytvoří znovu. To je druhý princip - "failure handling" - díky kterému je Erlang tak robustní. No a to umožňuje třetí princip - "fail fast". Když nastane chyba, nemá cenu ji řešit, postará se o to supervizor. Díky tomu je podíl kódu, který ošetřuje chyby, v Erlangu velmi malý. Torben Hoffmann to nazval "agressive/offensive programming - don't be defensive, just fail fast".
Když jsem to tak poslouchal, říkám si, proč je Erlang tak málo rozšířený? Může za to dominance PHP a Javy, nezvyklá syntaxe, nebo neexistence webhostingu? Bude to určitě kombinace více faktorů. Pokud vám vadí syntax, zkuste Elixir, který na konferenci prezentoval přímo jeho tvůrce, José Valim (záznam podobné přednášky z jiné konference najdete zde). Je to jazyk trochu podobný Ruby, který umožňuje vytvářet vlastní DSL. José zmínil jednu zajímavou teorii z lingvistiky (Sapir-Whorfovu hypotézu), která ve zkratce tvrdí asi tolik, že jazykové pojmy které používáme ovlivňují naše vnímání reality. Prostě pro co nemáme slovo, o tom se velmi těžko dá přemýšlet a naopak: Když existuje pojmenování nějakého konceptu (například "thread-safe"), považujeme tento koncept za přirozený a nutný, i když tomu tak nemusí nutně být. Více k tématu by měl obsahovat text Growing a Language, který napsal jeden z autorů Javy, Guy Steele.
Princip workerů a supervizorů používá také Akka. Je inspirovaná Erlangem, ale běží nad JVM a umožňuje programovat ve Scale, Javě nebo Groovy.
Další hodně zajímavou přednášku měl Kevin Hammond o již zmíněných "megacore" počítačích (zřejmě je autorem tohoto termínu). Počítače (blízké) budoucnosti budou mít zřejmě desítky až stovky jader, ale budou to jádra heterogenní - nebudou všechna stejná. Budou mít pár "heavyweight general-purpose" jader, tak jak je známe dnes, stovky matematických jader pro operace s plovoucí čárkou (tak jak dnes fungují GPU), několik specializovaných jader pro grafiku, bezpečnost, síťové přenosy apod. Také zřejmě budou obsahovat jádra s různou frekvencí - první vlaštovkou v tomto směru je mobilní telefon (jak příznačné) Samsung Exynos, který má jádra s různou frekvencí - a různou spotřebou elektřiny. Stále více počítačů funguje (alespoň částečně) na baterku, a tak bude spotřeba energie stále důležitější faktor. Procesorová jádra zřejmě nebudou všechna sdílet paměť jako dnes, protože to není dobrá abstrakce a zpomalovala by fungování počítače. Možná že se objeví nativní message-based systémy v rámci jednoho čipu.
Funkcionální programování se zdá být vhodnějším nástrojem pro výzvy blízké budoucnosti než objektově orientovaný přístup. Kevin Hammond vyvíjí poloautomatický způsob refaktoringu - paraforming - který má kód udělat více paralelizovatelným. Pokud vás zajímá víc, projděte si slidy z jiné konference, které najdete zde.
Zajímavých přednášek bylo na Lamda Days více, tohle je můj subjektivní výběr toho nejlepšího. Když to shrnu, organizátorům se povedlo sehnat výborné zahraniční řečníky, často přímo autory zmíněných technologií a uspořádat dvoudenní konferenci o funkcionálním programování zdarma, na půdě místní univerzity. Přál bych si, aby se to stalo inspirací pro naše lokální Hradubické univerzity - podobnou akci, byť i polovičního rozsahu, bych považoval za velký úspěch.
Na závěr bych chtěl poděkovat Vendavu za podporu a financování tohoto príma výletu:)
(0) Comments
Leave a Response