it-swarm-eu.dev

Výběr funkčního programovacího jazyka

V poslední době jsem četl mnoho vláken o funkčních programovacích jazycích (ve skutečnosti téměř v minulém roce). Opravdu bych si jednu vybral a důkladně se to naučil.

Poslední [kurz] semestr jsem byl představen do Scheme. Miloval jsem to. Miloval extrémní jednoduchost syntaxe, princip homoikonicity , makra ( hygienická a nehygienická), n-arita procedur atd.

Problém se schématem je v akademickém jazyce. Nemyslím si, že je skutečně používán v produkčním prostředí. Ani já nevěřím, že je zvlášť dobré mít na našem životopisu. Takže jsem hledal alternativy. Je jich mnoho a zdá se, že všichni mají podobnou popularitu.

Několik myšlenek na některé další funkční jazyky, které jsem dosud zvažoval:

  • Clojure: Zní to skvěle, protože může přistupovat ke světu Java, je orientován na škálovatelnost a souběžnost, ale není to svět Java na pravém okraji). Teď už vím Java docela dobře, ale bylo by moudré přidat ještě více energie v závislosti na JVM?
  • Haskell: Vypadá to jako velmi oceňovaný jazyk, ale z toho, co jsem četl, je to spíše akademický jazyk.
  • LISP: Je tu už navždy. Zdá se, že většina z toho, co se mi ze schématu líbí. Má velkou komunitu. Podle toho, co [myslím] vím, je to pravděpodobně nejpoužívanější funkční programovací jazyk v průmyslu (?).
  • F #: To jsem opravdu neuvažoval. Nejsem velký fanoušek věcí MS. Nemám peníze na to, abych mohl platit za svůj software (mohl bych je nechat osvobodit od univerzitních aliancí, ale jsem více nakloněn řešení komunitních řešení). I když ... myslím, že by to byla nejlepší volba zaměřená na kariéru.

Dnes večer se přikláním k LISP. Před týdnem to byl Haskell. Před tím to byl Clojure. V minulém roce jsem dělal nějaký program pro zábavu, netlačil jsem ho z důvodu, který znáte. Teď bych se chtěl brát vážně (o učení jednoho, o tom, jak s ním dělat skutečné projekty, možná o tom, že s ním nakonec profesionálně pracujeme). Můj problém je, že bych se je musel všechny naučit do hloubky, než si budu moci vybrat.

49
Joanis

Protože chcete praktický jazyk:

alt text

Všimněte si, že Haskell a LISP se v průmyslu používají více než ostatní, i když v poslední době existuje zájem o Clojure a F #.

Ale podívejte se, co se stane, když přidáme Scheme do mixu:

alt text

Hmm, teď už nevypadá tolik jako akademický jazyk, že?

Ve skutečnosti je výše uvedený graf pravděpodobně lež; slovo „schéma“ se může objevit v reklamách hledaných v jiných kontextech kromě programovacích jazyků. :)

Tady je další graf, který je pravděpodobně (trochu) reprezentativnější:

alt text

Pokud chcete prozkoumat opravdu diabolský dialekt Scheme, podívejte se na Raketa.

36
Robert Harvey

Pokud se chcete naučit funkční programování, může vám být lépe posloužit, že se nejprve naučíte Haskell, pak použijte jakýkoli požadovaný jazyk. Funkční programování se můžete naučit pomocí jiných jazyků, ale stále umožňují imperativní a objektově orientovaný kód. Pokud v Haskell píšete skutečný program, naučíte se funkční programování rychleji, protože ostatní paradigmata nebudou k dispozici.

Po napsání programu Haskell budete mít nástroje, jako jsou monády a techniky, jako je bodové kódování, které vám přinesou požadovaný jazyk. Zdá se, že tyto koncepce mapují zvlášť dobře do schématu.

18
Larry Coleman

Vlastně, pokud jste byli schopni implementovat přiměřeně komplexní systém ve schématu, byli byste docela žádoucí ve společnostech, kde byste pravděpodobně chtěli pracovat. Dříve jsem v mé kariéře narazil na některé studenty, kteří odvedli v systému velké množství práce, a jediná doba, kdy to bylo nevýhodou, byla situace, kdy nedokázali vysvětlit svou práci nebo ve skutečnosti tomu nerozuměli dostatečně dobře na implementaci základních údajů. struktury a algoritmy v přiměřeném čase. Vždy jsem nechal kandidáty na takové otázky odpovědět v jejich preferovaném jazyce; Narazil jsem na některé lidi, kteří si mysleli, že jsou nejlepší ve Schématu, kterým se podařilo trochu bojovat s věcmi, které by měly být snadné, jako je přidání prvku do propojeného seznamu, který mě zmatil.

Ale pokud jste byli schopni „dostat“ schéma dostatečně dobře, abyste mohli napsat i průměrnou webovou aplikaci, bylo by to docela dobré místo prodeje ve většině vážných softwarových společností.

Pokud jste vedli rozhovor v obchodě s "blubem" a vývojáři si prostě mysleli, že jste divní kvůli vaší odbornosti ve Scheme nebo Haskell nebo F #, pravděpodobně byste tam nechtěli pracovat. Ve většině případů si kompetentní vývojáři vybírají koncerty, takže se nemusíte potit „praktičností“, pokud jedinými možnostmi, které si ve své budoucnosti dokážete představit, jsou firemní. Pracujte na tom, abyste byli kompetentní, flexibilní a prolomili problémy.

Vysoká škola není o praktičnosti. Jde o vytvoření bezpečného prostředí, které se dá prozkoumat a naučit se. To je ve skutečnosti užitečné, i když po zbytek své kariéry napíšete běžný software.

Jak už bylo řečeno, nechápu, proč byste se chtěli omezit na jednu z těchto možností tak brzy. Během čtyř týdnů byste mohli snadno získat představu o všech čtyřech jazycích a poté si vybrat ten, který se nejlépe soustředí na tuto síť s vašimi současnými rozmary. Poté se vraťte k další z vašich možností a zkuste implementovat něco podobného. Přejděte k něčemu složitějšímu a znovu zvažte své možnosti. Experimentování je dobré. Pokud se nepokoušíte příští měsíc vydělat na živobytí, nemusíte se ještě stát specialistou.

Napsal jsem nějaké do Schéma, F #, Emacs LISP a Common LISP a v posledních několika letech jsem alespoň trochu Haskell četl. Nemohu říci, že jsem odborníkem na některý z nich, ale každá exkurze do těchto jazyků mi prospěla ve všech ostatních jazycích, v nichž pracuji profesionálně (C #, Java, Ruby a občas Boo, Perl a Python). Zvědavost vám zajistí trvalejší a naplňující kariéru než cokoli jiného.

16
JasonTrue

Chvíli jsem se ponořil do Haskell, ale došel jsem k závěru, že je to příliš akademické. Bylo velmi těžké dělat cokoli praktického. V čistě funkčním jazyce věci jako IO prostě do modelu úplně nezapadají, takže se musíte vypořádat s monadami. Rozhodl jsem se, že budu muset věnovat obrovské množství času být jen stěží kompetentní, tak jsem se vydal dál.

Schéma jsem udělal na vysoké škole. Může to znít triviálně, ale všechny pareny skutečně ruší/otravují. Těžko se k tomu vrátit po použití jazyků, jako je Python.

Nedávno jsem zkoumal F #. Je funkční, ale může být také imperativní a objektově orientovaný, pokud chcete. To spolu s možností používat jakékoli .NET knihovny umožňuje snadno kombinovat vaše čistě funkční části s praktičtějšími věcmi, jako jsou GUI, IO a síťování.) Můžete získat samostatnou verzi F#.

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

10
Erik

Zhodnotil jsem všechny hlavní funkční jazyky rok nebo dva zpět, z pohledu potřeby praktického, univerzálního funkčního programovacího jazyka.

Nakonec jsem vybíral Clojure , což se následně ukázalo jako vynikající volba.

Hlavními důvody byly:

  • Ekosystém knihoven - pro to, aby byl jazyk užitečný, potřebujete přístup k dobrým knihovnám. Být na JVM znamená, že máte snadný přístup k největšímu ekosystému s otevřeným zdrojovým kódem a nástrojům, takže jít o jazyk JVM byl z pragmatického hlediska neochvějný. Scala také skóroval velmi dobře.

  • Makro-metaprogramování - Tento aspekt LISP se mi vždy líbil, zvláště proto, že jsem očekával, že budu dělat trochu kódu. Velmi jsem ocenil argumenty učiněné v krátké eseji Paula Grahama " Bití The A Průměr ". Různé Lisps zde všechny skóroval silně.

  • Výkon byl „dost dobrý“ - Clojure je vždy kompilován a získává výhody optimalizátoru JIT JIT a vynikající GC. Jako vždy existuje určitá režie v používání funkčního jazyka, ale s Clojure bylo jasné, že každý z nich se může blížit rychlosti Java s trochou úsilí (Clojure podporuje Java primitivy a volitelné statické psaní pro situace, kdy to potřebujete). Můj odhad je, že Clojure je 2–5x pomalejší, než to, čeho byste dosáhli s optimalizovaným kódem Java nebo C++, což je v souladu s tím, co vidíte v vadná měřítka a dále čas očekávám, že se tato mezera dále zužuje. Je také dost snadné jen napsat čistý kód citlivý na výkon v čistém Java a zavolat z Clojure.

  • Concurrency - Clojure má poměrně jedinečný a výkonný přístup ke shodě, zejména u vysoce vícesložkových souběžností. Je to trochu těžké to vysvětlit, ale toto video je vynikající dát vkus principům. Myslím, že Clojure má v současné době nejlepší odpověď na komplikovanou otázku „jak byste měli spravovat sdílený, souběžný a proměnlivý stav ve funkčním programovacím jazyce?“.

  • Jazykový design - Clojure je IMO velmi dobře promyšlený jazykový design. Příkladem jsou vektorové [] a mapové {} literály kromě pravidelných závorek LISP, použití neměnných perzistentních datových struktur, podpora lenivosti v celém jazyce prostřednictvím abstrakce sekvence a programátorům poskytuje řadu ortogonálních funkcí k řešení různých problémů . Viz mění abstrakce a jednoduché snadné .

  • Komunita - vždy subjektivní, ale líbilo se mi, co jsem viděl v komunitě Clojure. Postoj byl velmi vstřícný, konstruktivní a pragmatický. Důraz je kladen na důraz „udělejte věci“, který může odrážet skutečnost, že mnoho lidí z Clojure (včetně samotného Rich Hickeye) pochází z pozadí budování komplexních podnikových systémů. Skutečnost, že komunita Clojure má také silné vazby na komunitu Java, byla důležitá při přesvědčení, že Clojure by se nevystavilo riziku uvíznutí v „výklenku“.

Kdybych měl pojmenovat několik menších nevýhod Clojure, byly by to:

  • Dynamické psaní - často je to výhoda z hlediska produktivity, ale v průměru si myslím, že bych to vyměnil za silnější kontrolu typu a odvození. Většinou se to zmírní dobrým automatizovaným testovacím balíčkem, ale pokud se vám líbí vaše typy staticky ověřené kompilátorem, pak Haskell nebo Scala může být váš šálek čaje.

  • Cutting Edge - Clojure se vyvíjí velmi rychle a probíhá spousta inovací - nevýhodou je, že existuje hodně experimentování, některé knihovny a nástroje jsou stále nezralé a mezi hlavními verzemi Clojure se občas vyskytují změny, které musíte sledovat.

Celkově si ale nemyslím, že s Clojure se můžete pokazit, pokud chcete vynikající a pragmatický moderní funkční jazyk!

9
mikera

Vypadá to, že jste si udělali domácí úkoly, takže to pravděpodobně již víte, ale schéma je dialektem LISP, stejně jako obyčejný LISP. Pokud se vám na Scheme líbí hodně věcí, ale nelíbí se vám jeho akademický charakter, zkuste Common LISP. Podle index TIOBE je to 13. nejoblíbenější jazyk vs Schéma na pozici 26.

V popisech úkolů, které jsem nedávno viděl, se objeví jen málo z jazyků, které jste zmínili, i když to může být jen můj malý vzorek. Osobně se budu učit Haskellu, i když neočekávám, že tento jazyk použiji přímo ve své práci. Koncepce funkčního programování jsou pro budoucí návrhy programů cennější než přímá prodejnost samotného jazyka.

6
Zeke