A programozási nyelvek Turing-ekvivalensek, azaz ami az egyikben megvalósítható, az a másikban is az. Mégis, rengeteg programozási nyelv létezik és híveik gyakran bonyolódnak hitvitákba. Napjainkban egyértelműen reneszánszukat élik a funkcionális nyelvek, különösen a JVM-en futó Scala és Clojure nyer egyre nagyobb teret a nyelvtechnológia és a gépi tanulás területén, a kérdés az miért...
Tényleg jobb az FP?
Az egyik leggyakrabban hangoztatott érv a funkcionális nyelvek mellett az, hogy többmagos, elosztott rendszerekben könnyebb velük boldogulni. Mielőtt azonban valaki a fejlesztőit elzavarja egy tanfolyamra, érdemes elolvasnia Pankratius és tsai Combining functional and imperative programming for multicore software: An empirical study evaluating Scala and Java című tanulmányát, melyben empirikus módon kimutatják, hogy egy új paradigmában egyenesen romlik a programozók hatékonysága. Persze figyelemre méltó, hogy a munkaigényes feladat esetében minimálisan csökkent az erőráfordítás Scala-t használva. Nem feledkezhetünk meg arról sem, hogy egy évekig objektum-orientált nyelvvel dolgozó embereknek időbe telik megtanulni az új technológiát és csak kb. "egyenrangú" feleket érdemes igazán összehasonlítani.
Ha nem jobb, akkor miért használják?
Az Y Combinator startup akcelerátor és a bayesiánus spamszűrők atyja Paul Graham Beating the Averages című esszéjében amellett érvel, hogy egy funkcionális nyelv (esetében a Lisp) használata amolyan taktikai előnyt jelent elsősorban. Peter Naur Programming as Theory Building esszéjében amellett érvel, hogy a fejlesztő dolga az, hogy externalizálja, azaz külsővé és megfoghatóvá tegye tudását egy adott problémával kapcsolatban. Úgy tűnik itt kapcsolódhatunk Graham-hez! Ahogy az alábbi három videó szemlélteti, a funkcionális nyelvek általában a kutatás-intenzív területeken kerülnek bevetésre, olyan helyeken, ahol nagyon absztrakt elméleteket kell nagyon gyorsan "kódba önteni".
Kik és hogyan használják az FP nyelveket?
Caml Trading from Yaron Minsky on Vimeo.
A Jane Street algoritmikus kereskedéssel foglalkozó cég, s így hatalmas adatmennyiséget kell valós időben elemeznie rendszereinek. Akinek túl hosszú az előadás (ami tkp. úgy 45 perces csak, a kérdések töltik ki a többi időt), annak nagyon röviden összefoglalva az OCaml-et szoftverfejlesztési megfontolások (kompaktabb kód, nagyobb kifejezőerő stb.) és a statikus típusossággal járó robosztusság miatt választották.
A Prismatic-et nem kell bemutatni a nyelvtechnológia iránt érdeklődőknek. Érdekes módon a cég Clojure-t használ, de nem a Java interoperabilitás miatt! A cég szinte minden eszközét maga fejlesztette ki (ezek egy részét nyílttá is tette), ami a mai programozási trendek tükrében nagyon meglepő lépés, hiszen miért akarna valaki nulláról indulni, amikor sok nagyon jó minőségű könyvtárat lehet használni. A Prismatic válasza erre annyi, hogy persze sok jó könyvtár van, de egyik sem annyira skálázható és adat-orientált, mint amire egy modern, gépi tanulással és nyelvtechnológiával operáló cégnek szüksége van.
[nyc-haskell] Practical Data Processing With Haskell and Putting Cloud Haskell to Work with Ozgun Ataman and Gershom Bazerman from Richard Minerich on Vimeo.
Köztudott, hogy az ún. MapReduce paradigmát a funkcionális nyelvek ihlették, azonban a Hadoop menthetetlenül a Java környezet szülötte, még akkor is ha ma már gyakorlatilag minden nyelvvel használható. A Haskell közösségen belül a Cloud Haskell egyre nagyobb teret nyer, mint a Hadoop alternatívája, mivel a Scadling-hez és a Cascalog-hoz hasonlóan lehetővé teszi, hogy mintegy a nyelvbe beágyazva egyszerű konstrukcióként használhassunk elosztott rendszereket. Az OCaml ökoszisztémában is megtalálható hasonló elosztott fájlrendszer és MapReduce implementáció, a Plasma Project. A fenti videón bepillantást nyerhetünk abba, miképp használják ki a Haskell előnyeit a Soostone analitikai cégnél, ill. a Cloud Haskell-ről kaphatunk átfogó képet a S&P Capital IQ pénzügyi elemző cég tapasztalatai alapján.
Összegezve
A funkcionális nyelvek használata akkor tűnik jó választásnak, ha kutatás-vezérelt fejlesztést végzünk. Ilyen területen gyakran találkozunk az ún. szoftver-szakadékkal, azaz a kutatásra használt programok és a módszeres ipari fejlesztés során használt metodológiák közötti hatalmas különbségekkel. A funkcionális paradigma előnye éppen az, hogy a hagyományos fejlesztők és a kutatók a segítségével megtalálhatják a közös hangot.
Olvasnivaló
- Buddha and Popper: The Processless Process
- Startup Hypothesis Testing and Premature Execution
- Research-Driven Startups
- Philosophy and Machine Learning Workshop
- Machine Learning as Philosophy of Science
- A Software Chasm: Software Engineering and Scientific Computing - (korlátozott hozzáférés!) remekül összefoglalja a két terület alapvető különbségeit
- A Survey of the Practice of Computational Science
- Proofs Are Programs (technikai oldalról mutatja be miért vannak oda sokan a funkcionális nyelvekért)
- Beating the Averages (Graham kult esszéje pedig a humán faktort fogja meg)