Funkcionális programozási nyelv kiválasztása [zárt]

Zárt. Ez a kérdés témán kívüli . Jelenleg nem fogadja el a válaszokat.

Megjegyzések

  • Bármit is választasz, írj egy sok kódot, amelyet valamihez használsz.
  • Nem ' nem gondol a Scala ról?
  • @ykombinator: I ' ve hallottam róla, de nem kerestem tovább. Nem tudom, hogy ' nem tudna-e valamit felajánlani az általam felsoroltakon felül, vagy esetleg érdekes lehetőségek kombinációját hozná mindegyiküktől … Don ' nem tudom. Nekem meglehetősen alacsony profilú nyelvnek tűnik, bár úgy tűnik, egyre népszerűbb.
  • Nem tudom, hol hallottad, hogy a Java világa van.

div id = “1bed94541f”>

a szélén " – ez ' jelenleg nagy reneszánszon megy keresztül, nagyrészt köszönöm a) az OpenJDK válik a standard megvalósítássá; b) új JVM nyelvek, például a Scala és a Clojure és c) az a tény, hogy a nagy adat / felhő projektek egyre növekszenek, a JVM-et választják célplatformnak, és d) az Androidot. 2012 elejétől valószínűleg ' ez az egyetlen legizgalmasabb platform, ahol …..

  • @mikera: Egyetértett. Ez már több mint egy éves, nem sokkal azután, hogy az Oracle megvásárolta a Sun Microsystems rendszert, és minden aggasztó és spekuláns volt a Java jövőjét illetően, amelyet egy irányítóbb vállalat veszélyeztetett az irányítás alatt … A JVM jelenleg elég biztonságosnak tűnik, szerencsére!
  • Válasz

    Mivel praktikus   nyelv:

    alt szöveg

    Vegyük észre, hogy a Haskell és a Lisp többet használ az iparban, mint a többi, bár vannak nemrégiben érdeklődött a Clojure és az F # iránt.

    De nézze meg, mi történik, ha a Sémát hozzáadjuk a keverékhez:

    alt text

    Hmm, most nem hasonlít annyira egy akadémiai nyelvre, igaz?

    Valójában a fenti grafikon valószínűleg hazugság; a “séma” szó megjelenhet a segítségben keresett hirdetéseket a programozási nyelveken kívül más kontextusokban is. 🙂

    Tehát itt van egy másik grafikon, amely valószínűleg (egy kicsit) reprezentatívabb:

    alt szöveg

    Ha a rendszer igazán rugdaló nyelvjárását szeretné felfedezni, nézze meg a Ütő.

    Megjegyzések

    • Hú, szép bejegyzés. Az ütő pontosan az, amit ' használok … A PLT-Scheme volt a neve, amikor elkezdtem megtanulni. Az a piros vonal az utolsó grafikában aggaszt. Soha nem gondoltam volna, hogy a Séma ennyire felhasználható. És Clojure biztosan felszállni látszik. Hmm …
    • @M. Joanis: Vegyük az utolsó két grafikont egy szem sóval; a lépcsőzetes megjelenés és az utolsó grafikon volatilitása arra utal, hogy a grafikonon nincs sok adatpont, bár ez azt jelzi, hogy valaki úgy gondolja, hogy a nyelvekért érdemes fizetni.
    • @Robert Harvey, mi megváltozott a másodikról a harmadikra?
    • @Geoffrey: Nézd meg a feliratokat; Hozzáadtam a " developer " szót a keresési kifejezésekhez.
    • Ne feledje, hogy Haskell és Lisp is homonimák és hogy Valóban ' adatai nem általánosítják a világ többi részét. Az ITJobsWatch 79 Scala-munkát, 55 F #, 47 Haskell, 30 Lisp és 7 Clojure feladatot sorol fel.

    Válasz

    Ha funkcionális programozást szeretne megtanulni, akkor jobban szolgálhat, ha először megtanulja Haskellt, majd használja a kívánt nyelvet. Megtanulhatja a funkcionális programozást a többi nyelv használatával, de ezek továbbra is lehetővé teszik az imperatív és az objektum-orientált kód használatát. Ha valódi programot ír a Haskellben, akkor gyorsabban megtanulja a funkcionális programozást, mert a többi paradigma nem lesz elérhető, hogy visszaléphessen.

    A Haskell program megírása után olyan eszközök állnak rendelkezésére, mint monádok és technikák. mint a pont nélküli kódolás, hogy eljusson az Ön által választott nyelvhez. Úgy tűnik, hogy a fogalmak különösen jól illeszkednek a rendszerhez.

    Megjegyzések

    • Szerintem ön ' igaza van abban, hogy először egy tiszta funkcionális nyelvet válasszon ki. Nagyon érdekelne, hogy a funkcionális nyelvek tisztaság szerint rendeződnének-e.
    • @ M. Joanis: a kérdésedben felsorolt nyelveken azt mondanám, hogy a Haskell a legtisztább, őt követi a Clojure, az F # és a Lisp.

    Válasz

    Valójában, ha képes voltál egy ésszerűen összetett rendszert megvalósítani a Sémában, akkor meglehetősen kívánatos azoknál a vállalatoknál, ahol valószínűleg dolgozni szeretne. Pályafutásom során korábban összefutottam néhány hallgatóval, akik elég sok munkát végeztek a Scheme-ben, és csak akkor volt hátrány, amikor nem tudták megmagyarázni a munkájukat, vagy nem értették meg elég jól az alapadatok megvalósításához. struktúrák és algoritmusok ésszerű időn belül. Mindig hagytam, hogy a jelöltek válaszoljanak az ilyen kérdésekre az általuk preferált nyelven; összefutottam néhány olyan emberrel, aki úgy gondolta, hogy ők a legjobbak a Scheme-ben, akiknek elég sokat sikerült megküzdeniük olyan dolgokkal, amelyeknek könnyűnek kellett lenniük mint egy elem hozzáadása egy összekapcsolt listához, ami engem misztifikált.

    De ha elég jól “megszerezhetné” a Sémát, hogy akár egy átlagos webalkalmazást is megírhasson, az legfeljebb nagyon jó értékesítési pont lenne komoly szoftvercégek.

    Ha egy “blub” üzletben interjúkat folytatna, és a fejlesztők csak furcsának gondolták volna, ha a Scheme-ben vagy a Haskellben vagy az F # -ben jártas vagy, valószínűleg nem akarsz ott dolgozni. A legtöbb esetben az illetékes fejlesztők választják a koncerteket, ezért ne “izzadjon” a gyakorlatiasságra, hacsak az egyetlen lehetőség, amelyet elképzelhet a jövőben, nem vállalati. Dolgozzon azon, hogy kompetens, rugalmas és lebontsa a problémákat.

    A főiskola nem a praktikumról szól. A felfedezés és a tanulás biztonságos környezetének megteremtéséről van szó. Ez tulajdonképpen hasznos, még akkor is, ha karrierje hátralévő részében rendes szoftvert ír.

    Ennek ellenére nem mondom ” Nem látja, miért akarna csak egy ilyen választásra korlátozni ilyen hamar. Könnyen megértheti mind a négy nyelvet körülbelül 4 hét alatt, majd válasszon egyet, amelyre a jelenlegi szeszélyeihez a legjobban összpontosíthat. térj vissza egy másik lehetőségedhez, és próbálj meg valami hasonlót megvalósítani. Lépj tovább valami összetettebbre, és fontold meg újra a lehetőségeidet. A kísérletezés jó. Hacsak nem próbálsz megélni a következő hónapban, akkor nem kell lettem még szakember.

    Írtam néhányat a Scheme-ben, az F # -ben, az Emacs Lisp-ben és a Common Lisp-ben, és elolvastam legalább egy kis Haskell-t, legalábbis alkalmanként az elmúlt néhány évben. Nem mondhatom, hogy egyikükben sem vagyok szakértő, de ezekre a nyelvekre tett minden egyes kirándulás előnyös volt számomra az összes többi nyelven, amelyen professzionálisan dolgozom (C #, Java, Ruby, és esetenként Boo, Perl és Python). A kíváncsiság tartósabb, teljesebb karriert hoz létre, mint bármi más.

    Megjegyzések

    • " mindennél kitartóbb, teljesebb karriert hoz létre. " Ez az állítás nagyon inspiráló. ' igazad van. Én ' túlságosan is siettem. Mindig úgy érzem, hogy mindez túl sok időbe telik a tanuláshoz … Ha 12 évvel visszamehetnék, amikor elkezdtem, akkor ' nem tudom, hogy ne pazaroljam el az összes idő a VB-n és a C ++ -on. Úgy érzem, hogy ezek az évek nagyon csúnyán elpazaroltak. Nem voltam ' elég kíváncsi. Kódolni akartam cuccokat. Az általam ismert nyelvek használata elég volt. Akkor azt hittem, hogy tisztességes összeget tudok, de ez olyan borzalmasan egyáltalán nem volt ' az eset.

    Válasz

    Egy ideig Haskellbe merültem, de arra a következtetésre jutottam, hogy egy kicsit túl akadémikus volt. Nagyon nehéz volt valami praktikusat megtenni. Tiszta funkcionális nyelven olyan dolgok, mint az IO, egyszerűen nem illenek bele a modellbe, ezért monádokkal kell megküzdenie. Elhatároztam, hogy óriási időt kell töltenem, hogy csak kompetens legyek, ezért továbbléptem .

    A Scheme-et az egyetemen csináltam. Triviálisnak tűnhet, de az összes szülő valóban zavaró / idegesítő. Nehéz erre visszatérni, miután olyan nyelveket használtam, mint a Python.

    Nemrégiben F # felfedezése. Funkcionális, de elengedhetetlen és objektumorientált is lehet, amikor csak akarja. Ez, valamint bármilyen .NET könyvtár használata, lehetővé teszi a tiszta funkcionális részek könnyebb összekeverését praktikusabb dolgokkal, például GUI-k, IO és hálózat. Az F # önálló verzióját kaphatja meg.

    http://www.microsoft.com/downloads/en/details.aspx?FamilyID=effc5bc4-c3df-4172-ad1c-bc62935861c5&displaylang=en

    Megjegyzések

    • Az a tény, hogy az F # és a Clojure nem pusztán funkcionális, fontos szerepet játszik számukra. Talán az F # lehet a belépési pontom a .Net család valamikor …
    • @MJoanis, a költséget pontként tüntetted fel az F # -val szemben, de ahogy Erik rámutat, teljesen ingyen kaphatod.
    • Ha jól olvasom a feltételeket, akkor alapvetően ingyen kapod meg a feltételt. nem használja (vagy vásárol licenceket). De megértem, hogy még mindig nagyon jó dolog megtanulni, ha a Visual Studiót használó társaságba kerülök.Valószínűleg kipróbálom ', ha egyszer funkcionál ' m szabadabb funkcionális programozási nyelvvel.
    • @M. Joanis: Nem, az F # még nyílt forráskód is, és megpróbálhatsz más platformokon befutni a Mono-ban.
    • Lehet, hogy 2010 óta változtak az idők, de mint aki az elmúlt hónapokban kezdett el haskellet tanulni, én ne ' ne gondolja, hogy az IO-t haskellben egyáltalán nehéz elvégezni. Az alapvető dolgokhoz csak meg kell tanulnod néhány új do-szintaxist. A valódi alapvető megértés eltartása néhány hétig tart, de valójában nem látom ', hogy mi a fuzz a monádokról. Nem gondolom, hogy ' szerintem nehezebb volt megtanulni őket, mint az OOP osztályai, példányai, statikus tagjai és az összes többi államhoz kapcsolódó jazz.

    Válasz

    Az összes főbb funkcionális nyelvet egy-két évvel ezelőtt értékeltem abból a szempontból, hogy gyakorlati, általános célú funkcionális programozási nyelvet szeretnék.

    Végül a Clojure-t választottam , amely később kiváló választásnak bizonyult.

    A legfontosabb okok a következők voltak:

    • Könyvtári ökoszisztéma – ahhoz, hogy egy nyelv hasznos legyen, hozzáférésre van szükség a jó könyvtárakhoz. A JVM-en való részvétel azt jelenti, hogy könnyen hozzáférhet a legnagyobb nyílt forráskódú könyvtárhoz és eszköz-ökoszisztémához, így a JVM nyelvre való törekvés gyakorlatias szempontból nem gond. Scala itt is magas pontszámot ért el.

    • Makro-metaprogramozás – Ez a szempont a Lisp-től mindig felhívott engem, főleg, hogy számítottam arra, hogy meglehetősen kevés kódot generálok. “Nagyra értékeltem Paul Graham rövid esszéjében” Az átlagok legyőzése elhangzott érveket. A különféle Lisps itt mind erősen gólt szerzett.

    • A teljesítmény “jó” elég “- A Clojure mindig össze van állítva, és kihasználja a JVM JIT optimalizáló és a kiváló GC előnyeit. Mint mindig, van némi rezsi a funkcionális nyelv használatában, de a Clojure használatával egyértelmű volt, hogy mindegyik kis erőfeszítéssel megközelítheti a Java sebességét (a Clojure támogatja a Java primitíveket és az opcionális statikus gépelést azokban a helyzetekben, ahol szüksége van rá). Becslésem szerint a Clojure 2-5x lassabban futballpark, mint amit optimális Java vagy C ++ kóddal érhet el, ami összhangban áll azzal, amit a hibás referenciaértékekben látni , és idővel arra számítok, hogy ez a rés tovább szűkül. Ezenkívül elég egyszerűen megírni a kifejezetten teljesítményérzékeny kódokat tiszta Java-ban, és hívni a Clojure-ból.

    • Párhuzamosság – A Clojure meglehetősen egyedi és erőteljes megközelítést alkalmaz a párhuzamosságra, különösen a nagyon sok magot tartalmazó párhuzamosság esetén. Ezt “kicsit nehéz megmagyarázni, de ez a videó kiváló , hogy ízelítőt adjon az alapelvekből. Úgy gondolom, hogy a Clojure-nak van a legjobb válasz arra a trükkös kérdésre, hogy “hogyan kell kezelni a megosztott, egyidejű és mutábilis állapotot egy funkcionális programozási nyelven?”.

    • Nyelvtervezés – A Clojure az IMO nagyon átgondolt nyelvterve. Ilyenek például a vektoros [] és a térképes {literálok a szokásos Lisp zárójel mellett, a megváltoztathatatlan állandó adatstruktúrák használata, a szekvencia-absztrakció révén a nyelv egészében való lustaság támogatása, valamint a programozó számára számos ortogonális tulajdonság biztosítása különböző problémák megoldására . Lásd: az absztrakció művészete és a egyszerű, egyszerű .

    • Közösség – mindig szubjektív, de tetszett, amit a Clojure közösségben láttam. A hozzáállás nagyon hasznos, konstruktív és pragmatikus volt. Jelentős hangsúlyt kap a “végezzen dolgokat”, ami valószínűleg azt tükrözi, hogy sok Clojure-ember (beleértve Rich Hickey-t is) összetett vállalati rendszerek kiépítésének hátteréből származik. Az a tény, hogy a Clojure közösségnek szoros kapcsolatai vannak a Java közösséggel is, fontos volt abban, hogy meggyőzzek arról, hogy a Clojure nem kockáztatja meg, hogy elakadjon egy “fülkében”.

    Ha meg kellene neveznem a Clojure néhány kisebb hátrányát, ezek a következők lennének:

    • Dinamikus gépelés – ez gyakran előnyt jelent a termelékenység szempontjából, de átlagosan azt hiszem, hogy ezt erősebb típusellenőrzésre és következtetésre cserélném. Többnyire ezt enyhíti egy jó automatizált tesztcsomag, de ha tetszik, hogy típusait a fordító statikusan érvényesítette, akkor inkább Haskell vagy Scala lehet a teáscsésze.

    • iv

    élvonal – A Clojure nagyon gyorsan fejlődik, és ott “sa rengeteg újítás folyik – ennek hátránya, hogy sok a kísérletezés, egyes könyvtárak és eszközök még kiforratlanok, és a Clojure főbb verziói között időnként megtörő változások vannak, amelyeket szemmel kell tartanod.

    Összességében azonban nem hiszem, hogy tévedhet a Clojure-szal, ha kiváló és gyakorlati modern funkcionális nyelvre vágyik!

    Megjegyzések

    • Köszönöm! Remek poszt! Mostanában éppen azt fontolgattam, hogy egy vállalat belső projektjéhez használom, amely nagymértékben fákon és rekurzivitáson alapul. Ráadásul elég sok Java-kód van itt, amelyet újból felhasználhatunk a Clojure szolgáltatással.

    Válasz

    úgy néz ki, mintha megcsináltad volna a házi feladatodat, tehát valószínűleg már tudod ezt, de a Scheme Lisp dialektusa, csakúgy, mint a Common Lisp. Ha sok mindent szeretsz a Scheme-ről, de nem tetszik annak tudományos jellege, próbáld ki a Common-ot Selypít. A TIOBE index szerint ez a 13. legnépszerűbb nyelv vs séma a 26. pozícióban.

    Kevés a használt nyelv az említettek megjelennek a munkaköri leírásokban, amelyeket a közelmúltban láttam, bár ez talán csak az én kis mintacsoportom. Én személy szerint megtanulom Haskellt, annak ellenére, hogy nem számítok arra, hogy ezt a nyelvet közvetlenül a munkám során fogom használni. A funkcionális programozás koncepciói értékesebbek számomra a jövőbeli programtervek szempontjából, mint maga a nyelv közvetlen piacképessége.

    Megjegyzések

    • Köszönöm a TIOBE-t link, ez egy érdekes hivatkozás. Gondolom, a funkcionális programozás tisztasága miatt választja a Haskellt?
    • @ M.Joanis: Nagyjából, bár én ' arra gondolok, hogy később felvegyem Lisp is. Lásd: programozók.stackexchange.com/questions/18838/…
    • A választ választ sok értelme. Úgy tűnik, a tisztaság addig jár, amíg valóban felfogtam az egész funkcionális paradigma dolgot.

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük