Programování

Funkční jazyky: Co jsou, kam jdou

I když někteří tvrdí, co přesně to je, funkční programování stále přitahuje vývojáře. A tři z nejpopulárnějších funkčních jazyků - Clojure, F # a Scala - jsou k dispozici pro vylepšení.

Funkční programování má pro některé vývojáře hlavní přitažlivost, říká zakladatel Scaly Martin Odersky: „Programátoři v tomto segmentu mají rádi funkční programování, protože činí kód jasnějším, lépe strukturovaným a brání mnoha třídám chyb.“ Někteří však tvrdí, že funkční programování vede k méně efektivnímu softwaru.

Funkční programování také vyžaduje přemýšlení o programování novým způsobem, říká David Stephens, manažer programu Microsoft pro .Net a mluvčí F #. Problémem může být abstrakce: „Když uděláte kód abstraktnějším, když se budete vzdalovat od manipulace s bity a explicitně procházíte smyčkami, pochopení těchto abstrakcí může trvat déle.“

Co je to funkční jazyk?

V nejzákladnějších termínech je funkční programování o tom, jak s výpočtem zacházet jako s matematickými funkcemi. Kromě jazyků účtovaných jako funkční od samého začátku se verze Java a C # staly funkčnější přidáním podpory pro výrazy lambda.

Přesnou definici funkčního programování však lze jen těžko určit. Blog Clojurefun uvádí několik definic, které považuje za nesprávné, včetně definování funkčního programování jako povolení funkčního stylu s funkcemi vyššího řádu nebo jazyka podporujícího lambdy. Říká, že správnou definicí je jazyk zdůrazňující funkce a neměnná data.

Ale upřednostňovaná definice blogu Clojure nemusí být nutně správná, říkají ostatní. „Autor si vybere jeden, který mimochodem nejlépe zapadá do Clojure - není divu, toto je blog Clojure,“ říká Oderský od Scaly. „Mám výklad, který je mu blízký, ale ne stejný.“

Funkce, říká Odersky, je část kódu, která mapuje vstupy na výstupy a kromě toho nemá žádné další efekty. „Jedná se o matematickou definici funkce, kterou zde používáme. Někdy se tyto funkce nazývají„ čisté “, abychom je odlišili od řekněme funkcí v C.“ Funkční jazyk se zaměřuje na programování s čistými funkcemi, takže je snadné a výkonné, říká Odersky, který založil společnost Typesafe, poskytovatele platformy pro vývoj aplikací Typesafe JVM.

Funkční programování lze kombinovat s jinými paradigmaty, poznamenává. „Například funkční jde opravdu dobře s objektově orientovaným. Scala je v tomto smyslu funkční jazyk. Souhlasím s tím, že pouhé použití lambdas neznamená, že je jazyk funkční; je to nutné, ale nestačí.“

Vývojář Clojure Rich Hickey, který je také CTO ve vývojáři systémů Cognitect, souhlasí s hlavním tvrzením blogu Clojure. „Článek správně poukazuje na to, že funkce prvotřídního nebo vyššího řádu nejsou tím, o čem je funkční programování. Funkční programování je o tom, aby se programování více podobalo matematice,“ říká. To znamená, že stále existuje spektrum definic funkčního programování, říká Hickey.

Společnost Stephens společnosti Microsoft vidí, že funkční funkce přesahují samotné jazyky. „Nejoblíbenějším funkčním programovacím jazykem na světě je Excel,“ říká. Jednoduchý list aplikace Excel může obsahovat sloupec s hromadou hodnot, například A1 X 2. „To je čistá funkce pro A1 a A1 se nemění, takže počítáte hodnoty z těchto existujících dat.“

Technologie Microsoft Language-Integrated Query (Linq) také poskytuje funkční programování, říká. „Téměř každý programovací jazyk nyní přijímá funkce z funkčních jazyků.“

Stephens uvádí neměnná data jako kritická pro funkční programování. Souběžnost - programy s více vlákny pracující na datech současně - těží také z neměnných dat, poznamenává. „Říkáme [F #] jazyk první funkcionality, protože pochází z dědictví jiných jazyků.“ Podporuje také objektově orientované programování a pracuje s C # a Visual Basic, říká.

Clojure's Hickey vnímá přijetí funkčních jazyků jako reakci na rostoucí tlak, kterému čelí vývojáři, kteří dnes musí čelit větším problémům. "K tomu musí snížit náhodnou složitost svých programů. Nyní se všeobecně uznává, že všudypřítomný stav a vedlejší účinky jsou primárním zdrojem složitosti a chyb v programech," říká Hickey. „I když je možné snížit úroveň stavu v programech napsaných v nefunkčních jazycích, je to dramaticky snazší a rychlejší v jazyce, který dělá funkční programování idiomatickým a výchozím.“

Co dál pro tři hlavní funkční jazyky

Třináctiletý Scala je primárním jazykem v oblasti datové vědy, říká zakladatel Scala Odersky. Podporováno na JVM má odhadem 400 000 až 500 000 uživatelů. Plány v krátkodobém horizontu vyžadují jeho optimalizaci pro prostředí Java 8, ve které by instrukce bytecode z nejnovější standardní aktualizace Java umožnily Scale generovat efektivnější kód.

Z dlouhodobého hlediska Scala získá systém vyčištěného typu, bezpečnější makra a další podporu platformy s uvažovaným back-endem kompilátoru LLVM. Plánují se další vylepšení s cílem zlepšit použitelnost Scala.js pro kompilaci Scala do JavaScriptu.

Devět let starý Clojure, rovněž založený na JVM, se podle Hickeye používal ve financích, maloobchodu, softwaru a zábavě. „Používá se v různých aplikačních oblastech, jako je zpracování a analýza transakcí, velká data, síťové operace, prediktivní analýza, vyhledávání, zabezpečení a spotřebitelské nabídky.“

11letý F # byl založen společností Microsoft Research Don Syme a dohlíží na něj F # Foundation. Používá se v široké škále aplikací a běží na Linuxu, OS X, Androidu, iOS, Windows a prohlížečích. „Na čem nyní pracujeme je to, aby to fungovalo s .Net Core,“ otevřená, multiplatformní modulární verze .Net Framework, říká Stephens. Řetězcová interpolace, která usnadňuje psaní řetězců, je na rýsovacím prkně.