Keresés

Új hozzászólás Aktív témák

  • ddekany

    veterán

    válasz tocsa #29 üzenetére

    "A LISP-nek és a tiszta funkcionális nyelveknek annyi értelme lehet, hogy a kód helyessége könnyebben bizonyítható."

    Ez így úgy hangzik, mintha gyakorlati értelme nem lenne, mert nem sűrűn állunk le program helyességet bizonyítani (a tesztelés nem bizonyítás, általában). Valójában a nemmódosítható-adatstruktúrák használata rengeteg gyakorlati előnnyel jár (bár a kizárólagos használatuk nekem igen meredeknek tűnik). Sokszor karbantarthatóbb kódot adnak, meg akár áttekinthetőbbet is, pláne ha konkurens (sok szálas) programot írsz. Aztán hatékonyabbak lehetnek, ha sok konkurens szálad van, mert nem kell (annyiszor) zárolni, meg a tranzakciós memóriakezelés is könnyebben elérhetővé válhat (lásd Clojure-ban alap is). Másfelől persze, vannak feladatok, amiket elég megterhelő tisztán funkcionálisan megírni (legalábbis legtöbbünknek biztosan...), vagy épp lassú lesz az eredmény. Így mostanában van egy ilyen törekvés, hogy az imperatív nyelvek ill. azok standard API-ja támogassa a nemmódosítható-adatstruktúrákat (ill. a final változókra is újabb nyelveben sokszor kényelmes, sőt néha kényelmesebb szintaxis van, mint hagyományosakra). Így azt a módszert választod adott részfeladathoz, ami odaillik. Persze ebben az a kompromisszumos, hogy innentől nem igazán látható át, hogy mi az ami teljes mélységében tényleg állapot nélküli (mert nem pure functional a cucc), ami neked is rossz lehet, meg a fordító kezét is megköti.

    Mellékesen szerintem akit érdekel a programozói szakma, az jól teszi ha Clojure-vel vagy Haskell-el (vagy egyéb tisztán funkcionális nyelvet) próbálkozik. Nem mintha reális esély lenne arra, hogy munkában használni fogod ezeket, de vannak jó szokások/meglátások ezekben a nyelvekben, meg másfajta alapműveletek (pl. mapping, left/right folding, stb.), amik átragadnak rád és az imperatív nyelvekben is használni fogod őket. Mellékesen megtudhatod velük, hogy mennyire béna vagy még rekurzióból. :)

    Hasonlóképpen, a Scala arra jó, hogy megtudd, mennyire hülye vagy még típusokból (mi minek az alosztálya, stb). Már a Java generics is remek interview kérdések forrása lehet ;], de kutya f*sza ahhoz képest, mint ami Scala-ban van.

  • ddekany

    veterán

    válasz ROBOTER #20 üzenetére

    Most is "enterprise idők" vannak, vagy nem tudom mit jelent az. Amúgy az 50-es évekből eredő, afféle matematikusok által kitalált nyelv, magas szintű meg durván dinamikus és persze erősen jelen van benne a funkcionális programozás paradigma. Még ma sem teljesen halott, sőt van relatív felkapott új leszármazottja is, a Clojure. De szerintem nem egyszerű földi halandók a célközönség...

  • ddekany

    veterán

    Az logikusan hangzik, hogy tisztán funkcionális nyelvet használjunk GPU-ra, vagy legalábbis arra törekvőt. Azokban lehet ugyanis legtöbb párhuzamosítható feladatot találni automatizáltan.

    De... LISP szintaxis... Hiába kap minden LISP-fan agyvérzést attól, hogy a sok zárójel miatt fújnak rá, mert ez tényleg nem emberi agynak való. Kb. arról szól a cucc, hogy fordító örül magának, hogy ő jobban tudja mikor hagytál ki egy zárójelet, mint te. ;] Nanonjó játék... kabbe fordító. Neked tök olvasható a forrás a kifelejtett/felesleges zárójellel (hiszen azt se látod hol maradt ki), csak ő nem érti. Tudom, meg kell szokni... ja... Az van, hogy megtanulhatod túlélni a sok zárójelet, mint pl. szép behúzásokat raksz, így végül lényegében ignorálod őket, mert a behúzást nézed csak. Tehát a zárójelek ekkor csak zajnak vannak, ami a fordító vágyait elégíti ki, nem téged szolgál, mert te az nem is nézed. A fordító meg a behúzást nem... fasza. (És... lásd Python.) Nem érződik, hogy tán magát a szintaxist kéne megváltoztatni? Egy kis konceptuális egyszerűség feladásáért? Na? Nem, hát nem... (Az sem nyom feltétlenül a népszerűség irányába, hogy minden matematikai műveletet úgy írjunk ahogy, kifordítva a megszokotthoz képest. De mondjuk ezzel legalább elvi szinten ki tudok békülni.)

Új hozzászólás Aktív témák