www.wikidata.uk-ua.nina.az
Clojure vimovlyayetsya priblizno klozher tak samo yak angl closure Zamikannya suchasnij dialekt movi programuvannya Lisp Ce mova zagalnogo priznachennya sho pidtrimuye interaktivnu rozrobku zoriyentovanu na funkcionalne programuvannya sproshuye bagatopotokove programuvannya ta mistit risi suchasnih skriptovih mov ClojureParadigma funkcionalna multiparadigmatichnaData poyavi 2007Tvorci Rich HickeyRozrobnik Richard HikkiOstannij reliz 1 11 1 5 kvitnya 2022 18 misyaciv tomu 2022 04 05 Sistema tipizaciyi dinamichna tipizaciya suvora tipizaciyaPid vplivom vid Common Lisp Scheme Prolog ML Haskell Erlang 1 Mova realizaciyi Java 2 Platforma JVM CLRLicenziya Eclipse Public LicenseZvichajni rozshirennya fajliv clj cljs cljc edn abo cljrRepozitorij vihidnogo kodu github com clojure clojureVebsajt Oficijnij sajt Clojure u VikishovishiClojure pracyuye na Java Virtual Machine i Common Language Runtime Yak i inshi Lisp podibni movi Clojure rozglyadaye kod yak dani i maye potuzhnu sistemu makrosiv Vihidnij kod kompilyatora Clojure bibliotek i runtime komponentiv rozpovsyudzhuyetsya v ramkah licenziyi Eclipse Public License Zmist 1 Filosofiya 2 Sintaksis 3 Makrosi 4 Mozhlivosti movi 5 Varianti 6 Prikladi 7 Vidminnosti vid inshih dialektiv Lisp 8 Primitki 9 Literatura 10 PosilannyaFilosofiya RedaguvatiRichard Gikki rozrobiv Clojure oskilki jomu buv potriben suchasnij Lisp dlya funkcionalnogo programuvannya rozrahovanij na integraciyu z rozpovsyudzhenoyu platformoyu Java j rozroblenij dlya paralelnogo programuvannya 3 4 Pidhid Clojure do paralelnosti harakterizuyetsya koncepciyeyu totozhnostej 5 sho predstavlyayut seriyu nezminnih staniv protyagom chasu Oskilki stani ye nezminnimi znachennyami bud yaka kilkist obrobnikiv mozhe paralelno obroblyati yih i konkurenciya zvoditsya do pitannya keruvannya zminami vid odnogo stanu do inshogo Z ciyeyu metoyu Clojure nadaye dekilka tipiv zminyuvanih posilan kozhen z yakih maye dobre viznachenu semantiku perehodu mizh stanami Sintaksis RedaguvatiYak i inshi Lisp podibni movi sintaksis Clojure pobudovano na S virazah angl S expression yaki v procesi sintaksichnogo rozboru spershu peretvoryuyutsya na strukturi danih za dopomogoyu funkciyi chitacha angl reader persh nizh kompilyuyutsya Clojure s reader pidtrimuye literalnij sintaksis dlya hesh tablic mnozhin ta vektoriv na dodatok do spiskiv i voni peredayutsya kompilyatoru yak ye Inshimi slovami kompilyator Clojure kompilyuye ne lishe spiskovi strukturi danih ale j bezposeredno pidtrimuye vsi nazvani vishe tipi Clojure Lisp 1 i ne ye sumisnim za kodom z inshimi dialektami movi Lisp Makrosi RedaguvatiSistema makrosiv Clojure duzhe shozha na vikoristovuvanu v Common Lisp z tiyeyu vidminnistyu sho versiya sintaksichnogo cituvannya Clojure z vikoristannyam znaku dopovnyuye simvoli yihnimi prostorami imen Ce dopomagaye zapobigti nenavmisnomu perehoplennyu imen oskilki priv yazka do imen dopovnenih prostorom imen zaboronena Ye mozhlivist forsuvati take zahoplennya imen ale ce maye buti zrobleno yavno Clojure takozh ne dozvolyaye perepriv yazku globalnih imen z inshih prostoriv imen yaki buli importovani v potochnij prostir Mozhlivosti movi RedaguvatiKompilovana mova sho generuye bajtkod dlya JVM Tisna integraciya z Java vidkompilovani v bajtkod JVM programi na Clojure mozhut pakuvatisya ta zapuskatisya na JVM serverah bez dodatkovih uskladnen Mova takozh nadaye makrosi yaki polegshuyut vikoristannya nayavnogo Java API Vsi strukturi danih Clojure realizuyut standartni interfejsi Java sho robit prostim zapusk Java kodu rozroblenogo na Clojure Dinamichna rozrobka z vikoristannyam REPL Funkciyi yak ob yekti pershogo klasu Nagolos na rekursiyi zamist cikliv z pobichnim efektom Linivi poslidovnosti Nadaye shirokij nabir nezminyuvanih persistentnih struktur danih Paralelne programuvannya z vikoristannyam programnoyi tranzakcijnoyi pam yati sistema agentiv sistema dinamichnih zminnih Multimetodi analog perevantazhennya angl overloading funkcij sho pidtrimuyut dinamichnij vibir metodu za tipami ta znachennyami dovilnogo naboru argumentiv por zvichajnij ob yektnooriyentovanij polimorfizm de vibir zdijsnyuyetsya za tipom faktichno pershogo argumentu Varianti RedaguvatiRealizaciyi Clojure dlya vidminnih vid JVM platform ClojureCLR 6 ClojureScript 7 las3r 8 clojure py 9 rouge 10 Prikladi RedaguvatiHello world println Privit svite Hello World z grafichnim interfejsom koristuvacha javax swing JOptionPane showMessageDialog nil Privit svite Thread bezpechnij generator unikalnih serijnih nomeriv let i atom 0 defn generate unique id Povertaye unikalnij chislovij ID pri kozhnomu vikliku swap i inc Anonimnij subklas a href http java sun com javase 6 docs api java io Writer html java io Writer a sho ne pishe nikudi i makros sho vikoristovuye ce dlya vidklyuchennya druku v svoyih mezhah def bit bucket writer proxy java io Writer write buf nil close nil flush nil defmacro noprint Obchislyuye zadani virazi z vidklyuchenim drukom v out amp forms binding out bit bucket writer forms noprint println Privit nihto 10 trediv sho manipulyuyut odniyeyu spilnoyu strukturoyu danih yaka skladayetsya z 100 vektoriv kozhen z yakih mistit 10 pochatkovo poslidovnih unikalnih chisel Kozhen tred bagato raziv obiraye dvi vipadkovi poziciyi u dvoh vipadkovih vektorah i obminyuye yih Usi zmini vektoriv vidbuvayutsya v tranzakciyah shlyahom vikoristannya sistemi programnoyi pam yati tranzakcij Clojure Os chomu navit pislya 100 000 iteracij kozhnogo treda zhodne chislo ne vtracheno defn run nvecs nitems nthreads niters let vec refs vec map comp ref vec partition nitems range nvecs nitems swap let v1 rand int nvecs v2 rand int nvecs i1 rand int nitems i2 rand int nitems dosync let temp nth vec refs v1 i1 alter vec refs v1 assoc i1 nth vec refs v2 i2 alter vec refs v2 assoc i2 temp report do prn map deref vec refs println Distinct count distinct apply concat map deref vec refs report dorun apply pcalls repeat nthreads dotimes niters swap report run 100 10 10 100000 Vivid poperednogo prikladu 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 990 991 992 993 994 995 996 997 998 999 Distinct 1000 382 318 466 963 619 22 21 273 45 596 808 639 804 471 394 904 952 75 289 778 484 216 622 139 651 592 379 228 242 355 Distinct 1000 Hanojska vezha Funkciya sho generuye rozv yazok zadachi u viglyadi linivoyi poslidovnosti ta formatovanij vivid rezultatu defn lazy hanoi n a b c lazy seq when not zero n lazy cat lazy hanoi dec n a c b a b lazy hanoi dec n c b a defn print hanoi n a b c doseq from to lazy hanoi n a b c printf s gt s t from to Makros sho zdijsnyuye obmin dvoh globalnih zminnih Pri kozhnomu vikliku makrosa zamist temp pidstavlyayetsya novij unikalnij identifikator defmacro swap a b do def temp a def a b def b temp Vidminnosti vid inshih dialektiv Lisp RedaguvatiClojure mova chutliva do registru simvoliv Clojure Lisp 1 dlya zminnih ta funkcij vikoristovuyetsya spilnij prostir imen tak samo yak u Scheme ale ne v Common Lisp ne te zh same sho j nil Rider vilnij vid pobichnoyi diyi Klyuchovi slova ne ye simvolami Simvoli ne ye miscem zberigannya danih div zminni nil ne simvol t nema u sintaksisi jogo funkciyu vikonuye true Tablicya chitannya zaraz koli nedostupna dlya koristuvackih program let zdijsnyuye zv yazuvannya poslidovno do ne operator ciklu Hvostova rekursiya ne pidtrimuyetsya dlya yiyi zamini mozhna vikoristati recur yaksho procedura viklikaye sama sebe chi trampoline yaksho dekilka procedur viklikayut odna odnu recur yavlyaye soboyu perehid na pochatok proceduri chi ciklu z prisvoyennyam novih znachen parametriv Obov yazkovo maye buti u hvostovij poziciyi sho kontrolyuyetsya translyatorom trampoline funkciya sho zabezpechuye vzayemnij viklik funkcij bez perepovnennya steku Funkciyi sho vzayemodiyut cherez trampoline ne viklikayut odna odnu bezposeredno a povertayut funkciyu zamikannya sho mistit viklik Yaksho rezultatom funkciyi ye funkciya trampoline viklikaye yiyi povtoryuye cikl vzhe z yiyi rezultatom i t d yaksho zh rezultat maye inshij tip trampoline zavershuye robotu i povertaye jogo Sintaksichne cituvannya syntax quote operator zdijsnyuye rozv yazku simvoliv dopovnyuyuchi yih prostorami imen tomu x ne te zh same sho x Sintaksichni citati dozvolyayut avtomatichno generuvati simvoli tilda rozcitovuvannya unquote todi yak koma vvazhayetsya probilom Isnuye sintaksis na rivni ridera dlya asociativnih tablic maps mnozhin ta vektoriv cons first ta rest manipulyuyut z abstrakciyeyu poslidovnosti neobov yazkovo z elementami cons Bilshist struktur danih nezminyuvani Zamist lambda vikoristovuyetsya fn sho mozhe mati dekilka metodiv predikat rivnosti equality sho mozhe porivnyuvati ne lishe chisla a j inshi ob yekti Vsi globalni zminni mozhna dinamichno perepriv yazuvati bez konfliktu z leksichnimi lokalnimi priv yazkami Specialni ogoloshennya dlya rozriznennya dinamichnih ta leksichnih priv yazok ne potribni Oskilki Clojure Lisp 1 globalni funkciyi mozhut dinamichno perepriv yazuvatis pereviznachatis Nema letrec labels chi flet dlya posilannya na sebe vikoristovuyetsya fn im ya argumenti dlya vzayemnih posilan letfn U Clojure nil poznachaye vidsutnist znachennya bud yakogo tipu i ne priv yazanij do spiskiv chi poslidovnostej Porozhni kolekciyi ne ye ekvivalentom nil Clojure ne pririvnyuye nil do false odne z dvoh mozhlivih bulevih znachen inshe true Sered kolekcij ye ne lishe spiski Mozhut isnuvati porozhni kolekciyi deyaki z nih pidtrimuyutsya literalami ta Tomu ne mozhe buti yakogos storozhovogo znachennya porozhnoyi kolekciyi Porivnyuyuchi zi Scheme nil mozhna rozglyadati yak analog f Najbilsha vidminnist Clojure poslidovnosti Ce ne yakijs okremij tip kolekcij osoblivo vrahovuyuchi sho yim neobov yazkovo buti same spiskami Pri sprobi otrimati z porozhnoyi kolekciyi poslidovnist yiyi elementiv viklikom seq povertayetsya nil Pri sprobi otrimati z poslidovnosti na yiyi ostannomu elementi zalishok rest bude povernuto inshu logichnu poslidovnist Pereviriti chi cya poslidovnist porozhnya mozhna shlyahom vikliku seq Ce dozvolyaye poslidovnostyam ta protokolu poslidovnostej buti linivimi Deyaki funkciyi dlya roboti z poslidovnostyami vidpovidayut funkciyam zi Scheme ta CL sho manipulyuyut lishe z parami cons spiskami i povertayut storozhove znachennya abo nil yake predstavlyaye porozhnij spisok Yih rezultat u Clojure vidriznyayetsya tim sho povertayetsya ne specifichna porozhnya kolekciya a insha logichna poslidovnist Chastina funkcij dlya roboti z poslidovnostyami ne mayut vidpovidnikiv u Scheme CL i yavlyayut soboyu Haskell ML podibni funkciyi Deyaki z nih povertayut neskinchenni abo obchislyuvani poslidovnosti de analogiya z konkretnimi strukturami danih takimi yak spiski u Scheme CL lishe priblizna Ce dopomagaye vidokremiti kolekciyi strukturi danih vid poslidovnostej iteracij Yak u CL tak i u Scheme voni ob yednani u Clojure vidokremleni Primitki Redaguvati Rich Hickey 30 chervnya 2009 Books that influenced Clojure Arhiv originalu za 18 kvitnya 2012 Procitovano 11 veresnya 2009 The clojure Open Source Project on Open Hub Languages Page 2006 d Track Q124688 Rationale Rich Hickey clojure org Arhiv originalu za 18 kvitnya 2012 Procitovano 17 zhovtnya 2008 Arhivovana kopiya Arhiv originalu za 9 listopada 2017 Procitovano 1 bereznya 2011 On State and Identity Rich Hickey clojure org Arhiv originalu za 12 lipnya 2013 Procitovano 1 bereznya 2010 clojure clojure clr GitHub Github com Arhiv originalu za 25 serpnya 2013 Procitovano 28 chervnya 2012 clojure clojurescript GitHub Github com Arhiv originalu za 18 travnya 2014 Procitovano 28 chervnya 2012 aemoncannon 30 grudnya 2010 Home aemoncannon las3r Wiki GitHub Github com Arhiv originalu za 2 sichnya 2015 Procitovano 28 chervnya 2012 halgari clojure py GitHub Github com Arhiv originalu za 23 sichnya 2016 Procitovano 10 lipnya 2012 rouge lang rouge GitHub Github com Procitovano 25 sichnya 2013 nedostupne posilannya z lyutogo 2019 Literatura RedaguvatiHalloway Stuart 21 travnya 2009 Programming Clojure vid 1st Pragmatic Bookshelf s 304 ISBN 1934356336 VanderHart Luke Sierra Stuart 7 chervnya 2010 Practical Clojure vid 1st Apress s 232 ISBN 1430272317 Arhiv originalu za 17 veresnya 2010 Procitovano 1 bereznya 2011 Fogus Michael Houser Chris 28 grudnya 2010 The Joy of Clojure vid 1st Manning s 300 ISBN 1935182641 Arhiv originalu za 4 sichnya 2011 Procitovano 1 bereznya 2011 Rathore Amit 28 bereznya 2011 Clojure in Action vid 1st Manning s 475 ISBN 1935182595 Arhiv originalu za 11 bereznya 2011 Procitovano 1 bereznya 2011 Posilannya RedaguvatiVikipidruchnik maye knigu na temu Clojure ProgrammingOficijnij sajt GitHub code repository for Clojure Arhivovano 5 zhovtnya 2010 u Wayback Machine A comprehensive overview of Clojure Arhivovano 28 chervnya 2011 u Wayback Machine An overview of Clojure 1 2 in reference format Arhivovano 28 kvitnya 2017 u Wayback Machine Full Disclojure Screencast Arhivovano 27 listopada 2011 u Wayback Machine Clojure talks on Blip tv clojuredocs org Community powered documentation and examples Arhivovano 7 serpnya 2011 u Wayback Machine Otrimano z https uk wikipedia org w index php title Clojure amp oldid 39777476