Trust me, I am an engineer

Funkcionális nyelvek: Mik is ezek, és mire szolgálnak?

2016. július 15. - Annamária Árvai

A Clojure, a Scala és az F# mögött álló emberek elmagyarázzák, mi is valójában a funkcionális programozás, és hogyan fejlődnek e nyelvek.

f.jpg

Miközben néhányan arról vitatkoznak, pontosan mi is a funkcionális programozás, e paradigma folyamatosan vonzza a fejlesztőket. A három legnépszerűbb funkcionális nyelv – a Clojure, a Scala és az F# – készen állnak a fejlesztésekre.

A Scala megalkotója, Martin Odersky szerint néhány fejlesztő számára alapvetően vonzó a funkcionális programozás: „A programozók azért szeretik adott szegmensben a funkcionális programozást, mert tisztább, jobban strukturált kódot eredményez, és sokféle hibatípust kiküszöböl.” Azonban sokan azt állítják, hogy a funkcionális programozás kevésbé hatékony szoftverhez vezet.

A funkcionális programozáshoz másképp kell gondolkodni a programozásról, állítja David Stephens, a Microsoft .Net keretrendszerének programmenedzsere és az F# szóvivője. Gondot okozhatnak az absztrakciók: „Amikor el kell vonatkoztatnunk, a bitszintű gondolkodástól eltávolodva, ciklusokkal kódolunk, akkor ezen absztrakciók megértése több időt vehet igénybe.”

Pontosan mi is a funkcionális nyelv?

A legegyszerűbben megfogalmazva, a funkcionális programozás során a programozás matematikai függvények segítségével történik. A kezdetektől funkcionálisként emlegetett nyelvek mellett a Java, a C# és társaik is funkcionálisabbá váltak a lambda-kifejezések támogatásának megjelenésével.
Azonban a funkcionális programozás pontos definícióját nehéz megadni. A Clojurefun blog számos helytelennek vélt definíciót idéz, többek között a funkcionális programozást a magasabb rendű függvényekkel történő funkcionális stílussal lehetővé tevő vagy a lambdákat támogató programnyelvként történő meghatározást. Állításuk szerint a helyes meghatározás: egy olyan nyelv, amely a függvényekre és az állandó adatokra helyezi a hangsúlyt.

Ellenben mások azt mondják, a Clojure-blog definíciója nem feltétlenül helyes. „A szerző kiválaszt egy meghatározást, amelyik történetesen a legjobban illik a Clojure-re – nem csoda, hisz ez egy Clojure-blog – állítja Odersky a Scalától. – Van egy értelmezésem, amely hasonló ehhez, de nem ugyanaz.”

Odersky szerint a függvény egy kód, amely társítja az inputot az outputhoz, és ezen túl más hatása nincs. „Itt a függvény matematikai definícióját használjuk. Ezeket néha „tiszta” függvénynek nevezik, hogy megkülönböztessék – mondjuk – a C-beli függvényektől.” Egy funkcionális nyelv pusztán függvényekkel végzi a programozást, ezáltal egyszerűvé és hatékonnyá téve azt, állítja Odersky, a korábbi Typesafe (ma: Lightbend), a Typesafe JVM alkalmazásfejlesztő-platform szolgáltatójának megalapítója. Hozzáteszi, hogy a funkcionális programozás kombinálható egyéb paradigmákkal. „Például jól illeszkedik az objektumorientált programozáshoz. A Scala ebből a szempontból funkcionális nyelv. Egyetértek, hogy pusztán a lambdák nem tesznek egy nyelvet funkcionálissá; ez egy szükséges, de nem elégséges feltétel.”
A Clojure-fejlesztő Rich Hickey, aki egyben a Cognitect rendszerfejlesztő műszaki igazgatója is, egyetért a Clojure-blog fő állításával. „A cikk helyesen emeli ki, hogy a funkcionális programozás az elsőfokú függvényekről és a magasabb rendű függvényekről szól. A funkcionális programozás lényege, hogy a matematikához hasonlóbbá teszi a programozást” – mondja. Hickey állítása szerint ezáltal még számos definíciója van a funkcionális programozásnak.

A Microsoft-munkatárs Stephens a nyelveken túlmutatónak tartja a funkcionalitás lehetőségeit. „A világ legnépszerűbb funkcionális programozási nyelve az Excel” – mondja. Egy egyszerű Excel-munkalapon lehet egy oszlop számos értékkel, például A1 X 2. „Ez egy valódi függvény az A1-re vetítve, és az A1 nem változik, így meglévő adatokból számolhatunk értékeket.”

A Microsoft Language-Integrated Query (Linq) technológiája alkalmas a funkcionális programozásra, árulja el Stephens. „Majdnem minden programozási nyelv alkalmaz a funkcionális nyelvekből származó jellemzőket.”

Stephens az állandó adatokat kritikus fontosságúnak tartja a funkcionális programozás számára. Hozzáteszi, hogy a konkurens programok – vagyis az olyan programok, amelyek különböző szálakon egyszerre dolgoznak fel adatokat – számára is hasznosak az állandó adatok. „Az F# ot a funkcionális nyelvek előfutárának tartjuk, mert egyéb nyelvek örökségéből származik.” Megemlíti azt is, hogy támogatja az objektumorientált programozást is, és működik C# és Visual Basic nyelvekkel is. 
Hickey a Clojure-től a funkcionális nyelvek alkalmazását az egyre nagyobb problémákkal megküzdő fejlesztőkre háruló növekvő nyomásra adott válasznak tulajdonítja be. „Ahhoz, hogy ezekkel megküzdjenek, csökkenteniük kell a programjaik járulékos komplexitását. Széles körben elfogadott tény, hogy a mindenütt jelen lévő állapot és a mellékhatások a programokban lévő komplexitás és bugok elsődleges forrásai – mondja Hickey. „Habár lehetséges a nem funkcionális nyelvekben az állapotok mennyiségének csökkentése, mindez sokkal egyszerűbben és gyorsabban elvégezhető egy olyan nyelvben, amely a funkcionális programozást idiomatikussá és alapértelmezetté teszi.

Mi vár a top három funkcionális nyelvre?

A tizenhárom éves Scala az elsődleges nyelv az adattudományokban, árulja el a Scala megalkotója, Odersky. 400.000 és 500.000 közé becsülik a JVM által támogatott nyelv felhasználóinak számát. A rövidtávú tervek között szerepel a Java 8-ra történő optimalizálása, amelyben a legújabb Java-frissítésbeli bájtkódos parancsok lehetővé tennék a Scala számára a még hatékonyabb kódgenerálást.
Hosszútávon a Scala kapni fog egy frissített típusrendszert, biztonságosabb makrókat és több platformot. Megfontolás tárgyát képzi egy LLVM fordítóprogramú back end. Tervezik a Scala JavaScriptbe történő fordítására alkalmas Scala.js használatának javítását is.

Hickey szerint a szintén JVM-alapú, kilencéves Clojure-t a pénzügy, a kiskereskedelem, a szoftver és a szórakoztatás területén népszerű. „Sokféle területen alkalmazzák, például a tranzakció feldolgozás és elemzés, a big data, a hálózatműködtetés, a prediktív analitika, a keresés, a biztonság és a vásárlói ajánlatok területén.

A tizenegy éves F#-ot a Microsoft Research munkatársa Don Syme hozta létre, és az F# Foundation nevű alapítvány felügyeli. Számos területen alkalmazzák, és fut Linux, OS X, Android, iOS és Windows és böngészők alatt. „Azon dolgozunk most, hogy működjön a .Net Core-ral”, ami a .Net keretrendszer egy nyílt forráskódú, platformfüggetlen verziója, mondja Stephens. A sztring-interpoláció, vagyis a sztringek írásának megkönnyítése is szerepel a tervek között.

(Forrás)

***
Ha Te is kreatív, kihívásokkal teli mérnök állást keresel minőségi munkáltatónál, jó helyen jársz, mert a Schönherz Bázis épp azért jött létre, hogy Neked segítsen.

Gyere, nézz szét aktuális állásaink között!

A bejegyzés trackback címe:

https://bazis.blog.hu/api/trackback/id/tr298892066

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása