Volba funkčního programovacího jazyka [uzavřeno]

Uzavřeno. Tato otázka je mimo téma . Momentálně nepřijímá odpovědi.

Komentáře

  • Ať si vyberete cokoli, napište spoustu kódu, který pro něco v něm použijete.
  • ' nemyslím na Scala ?
  • @ykombinator: I ' ve slyšel jsem o tom, ale dále jsem nepátral. Nevím ' nevím, jestli by měl co nabídnout nad těmi, které jsem uvedl, nebo by to přinášlo kombinaci zajímavých možností od každého z nich … Don ' nevím. Zní to jako docela nízký profil jazyka, i když se zdá, že získává na popularitě.
  • Nevím ' nevím, kde jste slyšeli, že svět Javy je " na okraji " – v současné době prochází velkou renesancí, a to především díky a) OpenJDK se stává standardní implementací b) nové jazyky JVM jako Scala a Clojure ac) skutečnost, že velké datové / cloudové projekty zvyšují výběr JVM jako cílové platformy ad) Android. Počátkem roku 2012 je to ' pravděpodobně ta nejzajímavější platforma na …..
  • @mikera: Souhlasím. Je to více než rok staré, těsně poté, co společnost Oracle získala Sun Microsystems, a bylo vše znepokojující a spekulace o tom, že budoucnost Javy bude ohrožena ovládající společností, která převzala kontrolu … JVM se v tuto chvíli zdá být celkem bezpečný!

Odpověď

Protože chcete praktické   jazyk:

alternativní text

Všimněte si, že Haskell a Lisp se v průmyslu používají více než ostatní, i když v poslední době se zajímal o Clojure a F #.

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

alternativní text

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

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

Takže tady je další graf, který je pravděpodobně (trochu) reprezentativnější:

alternativní text

Chcete-li prozkoumat opravdu nakopnutý dialekt schématu, podívejte se na Raketa.

Komentáře

  • Páni, pěkný příspěvek. Raketa je přesně to, co jsem ' m používal … když jsem se ji začal učit, jmenoval se PLT-Scheme. Ta červená čára v poslední grafice mě znepokojuje. Nikdy mě nenapadlo, že Schéma může být tak použito. A zdá se, že Clojure vzlétá. Hmm …
  • @M. Joanis: Vezměte poslední dva grafy s rezervou; vzhled schodiště a volatilita posledního grafu naznačují, že v grafu není mnoho datových bodů, i když to naznačuje, že si někdo myslí, že za jazyky stojí za to platit.
  • @Robert Harvey, co změněn z druhého na třetí graf?
  • @Geoffrey: Podívejte se na titulky; K hledaným výrazům jsem přidal slovo " developer ".
  • Upozorňujeme, že Haskell a Lisp jsou také homonyma a že data ve skutečnosti ' se nezobecňují na zbytek světa. ITJobsWatch uvádí 79 úloh Scala, 55 F #, 47 Haskell, 30 úloh Lisp a 7 Clojure.

Odpověď

Pokud se chcete naučit funkční programování, může vám lépe posloužit nejprve naučit se Haskell, pak použijte libovolný jazyk, který chcete. 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 napíšete skutečný program v Haskellu, naučíte se funkční programování rychleji, protože ostatní paradigmata nebudou k dispozici, aby se vám vrátila zpět.

Po napsání vašeho programu Haskell budete mít nástroje jako monády a techniky jako bodové kódování, které přináší jazyk, který si vyberete. Zdá se, že koncepty jsou pro Scheme obzvláště dobře mapovány.

Komentáře

  • Myslím, že vy ' mám pravdu v tom, že nejprve vyberu čistý funkční jazyk. Velmi by mě zajímalo, kdybych viděl pořadí funkčních jazyků podle čistoty.
  • @M. Joanis: of jazyky uvedené ve vaší otázce, řekl bych, že Haskell je nejčistší, následovaný Clojure, F # a Lisp.

Odpověď

Pokud byste ve schématu dokázali implementovat rozumně složitý systém, měli byste být docela žádoucí ve společnostech, kde byste pravděpodobně chtěli pracovat. Dříve v mé kariéře jsem narazil na některé studenty, kteří ve schématu odvedli slušné množství práce, a jedinou nevýhodou bylo, když nebyli schopni vysvětlit svou práci nebo jí nerozuměli dost dobře na implementaci základních údajů struktury a algoritmy v rozumném čase. Vždy jsem nechal kandidáty odpovědět na takové otázky v jejich preferovaném jazyce; narazil jsem na některé lidi, kteří si mysleli, že jsou nejlepší ve Schématu, kteří dokázali trochu bojovat s věcmi, které by měly být snadné, jako přidání prvku do propojeného seznamu, což mě mystifikovalo.

Pokud byste ale dokázali „dostat“ schéma dostatečně dobře na to, abyste mohli napsat i průměrnou webovou aplikaci, byla by to nanejvýš docela dobrá prodejní cena. seriózní softwarové společnosti.

Pokud jste pohovorovali v „blub“ obchodě a vývojáři si jen mysleli, že jste divní kvůli své znalosti 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 „nepotírejte“ praktičnost “, pokud jedinou možností, kterou si v budoucnu dokážete představit, jsou korporátní. Pracujte na tom, abyste byli kompetentní, flexibilní a abyste odstranili problémy.

Vysoká škola není o praktičnosti. Jde o vytvoření bezpečného prostředí k prozkoumání a učení. To je ve skutečnosti užitečné, i když po zbytek své kariéry skončíte s psaním běžného softwaru.

To je řečeno, ne “ Nechápete, proč byste se tak brzy chtěli omezit pouze na jednu z těchto možností. Snadno získáte představu o všech čtyřech jazycích asi za 4 týdny, pak si vyberte ten, který se nejlépe soustředí na to, co nejlépe odpovídá vašim současným rozmarům. vraťte se k další ze svých možností a zkuste implementovat něco podobného. Přejděte na něco složitějšího a znovu zvažte své možnosti. Experimentování je dobré. Pokud se příští měsíc nesnažíte vydělat si na živobytí, nemusíte staňte se dosud specialistou.

Některé z nich jsem napsal v programech Scheme, F #, Emacs Lisp a Common Lisp a četl jsem alespoň trochu Haskella, alespoň příležitostně za posledních několik let. Nemohu říci, že jsem odborníkem na kterýkoli z nich, ale každá exkurze do těchto jazyků mi prospěla ve všech ostatních jazycích, ve kterých profesionálně pracuji (C #, Java, Ruby a občas Boo, Perl a Python). Zvědavost vám přinese trvalejší a naplňující kariéru než cokoli jiného.

Komentáře

  • " Zvědavost vám vytvoří trvalejší a naplňující kariéru než cokoli jiného. " Toto prohlášení je velmi inspirativní. Máte ' pravdu. ' příliš spěchám. Vždy mám pocit, že to všechno bude trvat příliš dlouho, než se učím … Kdybych se mohl vrátit o 12 let zpět, když jsem začínal, ' vím, že nebudu plýtvat všemi svými čas na VB a C ++. Mám pocit, že tyto roky byly docela špatně promarněné. Nebyl jsem ' dost zvědavý. Chtěl jsem kódovat věci. Používání jazyků, které jsem znal, stačilo. V té době jsem si myslel, že vím slušnou částku, ale to tak strašně ' vůbec nebylo.

Odpověď

Na chvíli jsem se ponořil do Haskellu, ale dospěl jsem k závěru, že to bylo trochu příliš akademické. Bylo velmi těžké udělat něco praktického. V čistě funkčním jazyce se věci jako IO do modelu úplně nehodí, takže se musíte vypořádat s monadami. Rozhodl jsem se, že budu muset věnovat obrovské množství času, abych byl jen stěží kompetentní, a tak jsem pokračoval .

Schéma jsem vytvořil na vysoké škole. Může to znít triviálně, ale všechny rodiče jsou opravdu rušivé / otravné. Těžko se k tomu vracet po použití jazyků jako Python.

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

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

Komentáře

  • Skutečnost, že F # a Clojure nejsou čistě funkční, hrají v jejich prospěch důležitou roli. Možná by F # mohl být mým vstupním bodem v Síťová rodina jednoho dne …
  • @MJoanis, uvedli jste cenu jako bod proti F #, ale jak zdůrazňuje Erik, můžete ji získat zcela zdarma.
  • Pokud čtu podmínky správně, v zásadě je zdarma jeho nepoužívání (nebo nákup licencí). Ale chápu, že to může být velmi dobrá věc, kterou se naučit v případě, že skončím ve společnosti používající Visual Studio.' Pravděpodobně to zkusím, jakmile budu ' funkční s volnějším funkčním programovacím jazykem.
  • @M. Joanis: Ne, F # je dokonce open source a můžete se pokusit spustit na Mono na jiných platformách.
  • Možná se časy od roku 2010 změnily, ale jako někdo, kdo se v posledních několika měsících začal učit haskell, don ' si nemyslím, že dělat IO v haskell je vůbec obtížné. Pro základní věci se musíte naučit nějakou novou do-syntaxi Získání skutečného základního porozumění trvá několik týdnů, ale opravdu nechápu, co je fuzz o monadách. Nemyslím si ', že by bylo těžší se je naučit než třídy, instance, statické členy a veškerý další jazz související se státem v OOP.

Odpověď

Vyhodnotil jsem všechny hlavní funkční jazyky rok nebo dva zpět, z hlediska potřeby praktického funkčního programovacího jazyka pro všeobecné použití.

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

Obecně řečeno, hlavní důvody byly:

  • Ekosystém knihovny – aby byl jazyk užitečný, potřebujete přístup do dobrých knihoven. Být na JVM znamená, že máte snadný přístup k největší open source knihovně a ekosystému nástrojů, takže jít na jazyk JVM bylo z pragmatického pohledu samozřejmostí. Scala zde také vysoko bodovala.

  • Makro-metaprogramování – tento aspekt Lispu mě vždycky lákalo, zvláště proto, že jsem předpokládal, že udělám docela dost generování kódu. Velmi jsem ocenil argumenty uvedené v krátké eseji Paula Grahama „ Beating The Aders „. Různé Lispy zde všechny silně bodovaly.

  • Výkon byl „dobrý“ dost “- Clojure je vždy kompilován a získává výhody optimalizátoru JVM JIT a vynikajícího GC. Jako vždy existuje určitá režie při používání funkčního jazyka, ale s Clojure bylo jasné, že každý se můžete trochu přiblížit rychlosti Java s trochou úsilí (Clojure podporuje primitiva Java a volitelné statické psaní pro situace, kdy to potřebujete). Můj odhad je, že Clojure je ballpark 2-5x pomalejší než to, čeho byste mohli dosáhnout pomocí optimalizovaného kódu Java nebo C ++, což je v souladu s tím, co vidíte v chybných benchmarcích a postupem času očekávám, že se tato mezera bude dále zmenšovat. Je také snadné jednoduše napsat kód citlivý na výkon v čisté Javě a volat jej z Clojure.

  • Souběžnost – Clojure má poměrně jedinečný a účinný přístup k souběžnosti, zejména pro vysoce vícejádrovou souběžnost. Je to trochu těžké vysvětlit, ale toto video je vynikající , aby bylo možné ochutnat zásady. Myslím, že Clojure má v současné době nejlepší odpověď na záludnou 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 a velmi dobře promyšlený jazykový design. Jako příklady lze uvést literály vektorů [] a map {} kromě běžných závorek Lisp, použití neměnných trvalých datových struktur, podpora lenosti v celém jazyce prostřednictvím abstrakce sekvence a poskytnutí programátoru celou řadu ortogonálních funkcí k řešení různých problémů . Prohlédněte si umění abstrakce a jednoduché a 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 „hotové věci“, což pravděpodobně odráží skutečnost, že mnoho lidí Clojure (včetně samotného Richa Hickeyho) pochází z prostředí budování komplexních podnikových systémů. Skutečnost, že komunita Clojure má silné vazby také na komunitu Java, byla důležitá pro to, aby mě přesvědčil, že Clojure nebude riskovat, že se zasekne ve „výklenku“.

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

  • 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í tím, že budete mít dobrou automatizovanou testovací sadu, ale pokud máte rádi své typy staticky ověřené kompilátorem, pak Haskell nebo Scala mohou být vaším šálkem čaje.

  • Špička – Clojure se vyvíjí velmi rychle a je tu probíhá spousta inovací – nevýhodou je, že je zde spousta experimentů, některé knihovny a nástroje jsou stále nezralé a mezi hlavními verzemi Clojure občas dochází ke změnám, které musíte sledovat.

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

Komentáře

  • Díky! Skvělý příspěvek! Právě jsem v těchto dnech zvažoval, že ho použiji pro interní projekt společnosti, který bude silně založen na stromech a rekurzivitě. Navíc tu máme docela dost Java kódu, který můžeme s Clojure znovu použít.

Odpovědět

To Vypadá to, že jste si udělali domácí úkol, takže to už pravděpodobně víte, ale Schéma je dialekt Lispu, stejně jako je Common Lisp. Pokud se vám na Scheme líbí hodně věcí, ale nelíbí se vám jeho akademická povaha, zkuste Common Lisp. Podle indexu TIOBE je to 13. nejpopulárnější jazyk vs Schéma na pozici 26.

Několik jazyků, které máte zmíněné se objevují v popisech práce, kterou jsem nedávno viděl, i když by to mohla být jen moje malá ukázková sada. Já osobně se budu učit Haskell, i když neočekávám, že bych tento jazyk použil přímo ve své práci. Koncepty funkčního programování jsou pro budoucí návrhy programů cennější než přímá prodejnost samotného jazyka.

Komentáře

  • Díky za TIOBE odkaz, to je zajímavý odkaz. Myslím, že jste si vybrali Haskell pro jeho čistotu z hlediska funkčního programování?
  • @ M.Joanis: Docela hodně, i když ' přemýšlím o pozdějším vyzvednutí Lisp také. Viz programmers.stackexchange.com/questions/18838/…
  • zvolená odpověď hodně smyslu. Zdá se, že čistota je správná cesta, dokud opravdu nepochopím celou věc funkčního paradigmatu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *