Clojure - Clojure

Clojure
Clojure logo.svg
Парадигмамультипарадигма:
ОтбасыЛисп
ЖобалағанБай Хикки
Бірінші пайда болды2007; 13 жыл бұрын (2007)
Тұрақты шығарылым
1.10.1[8] / 6 маусым 2019; 17 ай бұрын (2019-06-06)
Алдын ала қарау
1.10.2-альфа1 / 5 наурыз 2020 ж; 8 ай бұрын (2020-03-05)
Пәнді теру
Платформа
ЛицензияEclipse Public License
Файл атауының кеңейтімдері
  • .clj
  • .cljs
  • .cljc
  • .edn
Веб-сайтжабу.org
Әсер еткен
Әсер етті

Clojure (/ˈклʒер/, сияқты жабу)[15][16] заманауи, динамикалық, және функционалды диалект туралы Lisp бағдарламалау тілі үстінде Java платформа.[17][18] Лисптің басқа диалектілері сияқты, Клоуре де тәттілер деректер ретінде код және бар Лисп макросы жүйе.[19] Қазіргі даму процесі қоғамдастық -жүргізуші,[20] бақыланады Бай Хикки оның өмір бойы қайырымды диктатор (BDFL).[21]

Clojure қорғаушылары өзгермейтіндігі және өзгермейтін деректер құрылымдары және бағдарламашыларды сәйкестендіру мен оның күйлерін басқаруда айқын болуға шақырады.[22] Өзгермейтін құндылықтармен және уақыттың прогрессивті құрылымдарымен бағдарламалауға назар аудару неғұрлым берік дамуды жеңілдетуге арналған, әсіресе қатарлас, қарапайым және жылдам бағдарламалар.[23][24][15] Оның типтік жүйесі толығымен динамикалық, соңғы күш-жігер де іске асыруға ұмтылды біртіндеп теру.[25]

Clojure үшін коммерциялық қолдауды Cognitect ұсынады.[26] Clojure конференциялары жыл сайын бүкіл әлемде ұйымдастырылады, олардың ішіндегі ең әйгілі Clojure / conj.[27]

Тарих және даму процесі

Рич Хики, Clojure жасаушысы

Рич Хики - Клоуре тілінің жасаушысы.[17] Клоурге дейін ол dotLisp-ді әзірледі, ұқсас жобаны .NET платформа,[28] және Лисп пен арасындағы үйлесімділікті қамтамасыз етуге арналған үш ертерек әрекет Java: а Үшін Java шет тілінің интерфейсі Жалпы Лисп (jfli),[29] A Lisp үшін шетелдік объект интерфейсі (Фольга),[30] және а Java Servlets үшін Lisp-интерфейс (Lisplets).[31]

Хики Clojure-де оны жарияламас бұрын шамамен 2½ жыл жұмыс істеді, сол уақыттың көбі тек Clojure-де сырттан қаржыландырусыз жұмыс істеді. Осы уақыттың соңында Хикки электронды пошта арқылы Common Lisp қауымдастығындағы кейбір достарына тіл туралы хабарлама жіберді.

Даму процесі қоғамдастыққа негізделген[20] және Clojure-де басқарылады Джира жоба беті.[32] Жалпы даму талқылауы Clojure Google тобында өтеді.[33] Кез-келген адам сұрақтар мен идеяларды ask.clojure.org сайтына жібере алады,[34] бірақ патчтарды үлестіру үшін Clojure Contributor келісіміне қол қою керек.[35] JIRA мәселелерін скринерлер тобы өңдейді және соңында Рич Хики өзгерістерді мақұлдайды.[36]

Клоуренің аты, Хиккидің айтуы бойынша, а сөз бағдарламалау тұжырымдамасы туралы »жабу «үшін C, L және J әріптерін қосқанда C #, Лисп, және Java сәйкесінше - Клоурдің дизайнына үлкен әсер еткен үш тіл.[37]

Дизайн философиясы

Бай Хики заманауи болғысы келетіндіктен Клужураны дамытты Лисп үшін функционалды бағдарламалау, белгіленгенмен симбиотикалық Java платформасы, және арналған параллельдік.[23][24][38][15]

Клоураның көзқарасы мемлекет сәйкестілік тұжырымдамасымен сипатталады,[22] уақыт өте келе өзгермейтін күйлер тізбегі ретінде ұсынылған. Күйлер өзгермейтін құндылықтар болғандықтан, кез-келген жұмысшы саны олармен параллель жұмыс істей алады, ал параллельділік бір күйден екінші күйге ауысуды басқару мәселесіне айналады. Осы мақсатта Clojure бірнеше өзгергішті ұсынады анықтама түрлері, әрқайсысы мемлекеттер арасындағы ауысудың семантикасы жақсы анықталған.[22]

Тілдерге шолу

НұсқаШығару күніНегізгі ерекшеліктер / жақсартулар
16 қазан 2007 ж[39]Бастапқы жариялау
1.02009 жылғы 4 мамыр[40]Бірінші тұрақты босату
1.12009 жылғы 31 желтоқсан[41]Фьючерстер
1.219 тамыз, 2010 жыл[42]Хаттамалар
1.32011 жылғы 23 қыркүйек[43]Қарапайым қолдау
1.42012 жылғы 15 сәуір[44]Оқырман әдебиеті
1.52013 жылғы 1 наурыз[45]Редукторлар
1.5.12013 жылғы 10 наурыз[46]Жадтың ағып кетуін жою
1.625 наурыз, 2014 ж[47]Java API, жақсартылған хэштеу алгоритмдері
1.72015 жылғы 30 маусым[48]Түрлендіргіштер, оқырман кондиционалдары
1.82016 жылғы 19 қаңтар[49]Қосымша жолдық функциялар, тікелей байланыстыру, розетка сервері
1.92017 жылғы 8 желтоқсан[50]Spec, командалық жол құралдарымен интеграциялау
1.1017 желтоқсан, 2018 жыл[51]Қателер туралы есептер, Java үйлесімділігі жақсарды
Ағымдағы тұрақты нұсқа: 1.10.16 маусым, 2019[8]Java өнімділігінің регрессиясы бойынша жұмыс істеу және clojure.main-тен қателер туралы есептерді жақсарту
Аңыз:
Ескі нұсқа
Ескі нұсқасы, әлі де сақталған
Соңғы нұсқасы
Соңғы алдын ала қарау нұсқасы
Болашақ шығарылым

Клоуре жүгіреді Java платформа және нәтижесінде интеграцияланады Java және Clojure-ден Java кодын шақыруды толығымен қолдайды,[52][15] және Clojure кодын Java-дан да шақыруға болады.[53] Қоғамдастық пайдаланады Лейнинген қолдау көрсететін жобаны автоматтандыру үшін Maven интеграция. Leiningen жобалар пакетін басқару және тәуелділікті басқарады және Clojure синтаксисінің көмегімен конфигурацияланған.[54]

Басқа Лисптер сияқты, Клоурдің синтаксисі де негізделген S-өрнектер оларды оқырман құрастырмас бұрын, оларды деректер құрылымына талдайды.[55][15] Clojure's оқырман үшін сөздік синтаксисті қолдайды карталар, жиынтықтар және векторлар тізімдерге қосымша, және олар аталған құрылымдарға тікелей жинақталады.[55] Clojure - а Лисп-1 және Lisp-дің басқа диалектілерімен үйлесімді болуға арналмаған, өйткені ол басқа Lisps-пен үйлеспейтін мәліметтер құрылымының өзіндік жиынтығын қолданады.[19]

Лисп диалектісі ретінде Clojure қолдайды функциялары сияқты бірінші сынып объектілері, а оқу – бағалау – басып шығару циклі (REPL) және макро жүйе.[6] Clojure's Лисп макросы жүйесі онымен өте ұқсас Жалпы Лисп Clojure нұсқасының қоспағанда кері дәйексөз («синтаксистік дәйексөз» деп аталады) олардың белгілерін таңдайды аттар кеңістігі. Бұл атаудың жоспарланбаған жазылуын болдырмауға көмектеседі, өйткені аттар кеңістігіне сай аттармен байланыстыруға тыйым салынады. Макро кеңейтуді мәжбүрлеуге болады, бірақ оны нақты жасау керек. Clojure қолданушы анықтайтын оқырман макростарына жол бермейді, бірақ оқырман синтаксистік кеңейтудің шектеулі түрін қолдайды.[56] Clojure тіректері мультиметрия[57] және үшін интерфейс - сияқты абстракциялар а хаттама[58] негізделген полиморфизм және деректер типі жүйесі жазбалар,[59] болдырмауға арналған жоғары өнімді және динамикалық полиморфизмді қамтамасыз етеді өрнек мәселесі.

Clojure-ді қолдайды жалқау тізбектер және принципін қолдайды өзгермейтіндігі және деректердің тұрақты құрылымдары. Сияқты функционалды тіл, баса назар аударылады рекурсия және жоғары ретті функциялар жанама әсерлерге негізделген циклдың орнына. Автоматты қоңырау оңтайландыруға қолдау көрсетілмейді, өйткені JVM оны қолдамайды;[60][61][62] көмегімен нақты жасауға болады қайталану кілт сөз.[63] Үшін параллель және қатарлас бағдарламалау Clojure қамтамасыз етеді бағдарламалық жад,[64] реактивті агент жүйесі,[1] және арна -қатарлас бағдарламалау.[65]

Clojure 1.7 Clojure және ClojureScript кодтарын бірдей аттар кеңістігіне енгізуге мүмкіндік бере отырып, оқырман шарттарын енгізді.[48][55] Түрлендірулер құрудың әдісі ретінде түрлендіргіштер қосылды. Түрлендіргіштер сияқты жоғары ретті функцияларды қосады карта және бүктеу енгізу деректерінің кез-келген көздерін жалпылау. Дәстүрлі түрде бұл функциялар жұмыс істейді тізбектер, түрлендіргіштер олардың каналдарда жұмыс істеуіне мүмкіндік береді және пайдаланушыға өзінің түрлендіруге арналған модельдерін анықтауға мүмкіндік береді.[66][67][68]

Балама платформалар

Клоурдің негізгі платформасы болып табылады Java,[18][52] бірақ басқа мақсатты бағдарламалар бар. Олардың ішіндегі ең көрнектісі - ClojureScript,[69] компиляциялайды ECMAScript 3,[70] және ClojureCLR,[71] толық порт .NET платформа, оның экожүйесімен үйлесімді. 2013 жылы 1060 респондент қатысқан Клоуре қоғамдастығына сауалнама[72] респонденттердің 47% -ы Clojure-мен жұмыс жасағанда Clojure және ClojureScript қолданғанын анықтады. 2014 жылы бұл сан 55% дейін өсті,[73] 2015 жылы 2445 респонденттің негізінде 66% құрады.[74] ClojureScript-тің танымал жобаларына Реакция мысалы, реагент,[75] қайта жақтау,[76] Ром,[77] және Ом.[78][79]

Басқа бағдарламалар

Clojure-дің басқа платформалардағы басқа бағдарламаларына мыналар жатады:

  • CljPerl,[80] Жоғарғы қабат Перл
  • Клойерл,[81] Clojure қосулы Сәуле, Эрланг виртуалды машина
  • clojure-py,[82] Таза күйінде Python
  • Феррет,[83] микроконтроллерлерде жұмыс істей алатын өзіндік C ++ 11-ге жинақталады
  • Джокер,[84] аудармашы және линтер жазылған Барыңыз
  • Лас3р,[85] жұмыс істейтін Clojure жиынтығы ActionScript Виртуалды машина (Adobe Flash Player платформасы)
  • Пикси,[86] Клоурге шабыттандырылған Лисп диалектісі жазылған RPython
  • Руж,[87] YARV ішіндегі жоғарғы қабат Рубин

Танымалдылық

Функционалды бағдарламалауға деген үнемі қызығушылықпен, Clojure-ді Java платформасын қолдана отырып, бағдарламалық жасақтама жасаушылар қабылдауды жалғастыра берді. Тілді Брайан Гетц сияқты бағдарламалық жасақтама жасаушылар да ұсынған,[88][89][90] Эрик Эванс,[91][92] Джеймс Гослинг,[93] Пол Грэм,[94] және Роберт С. Мартин.[95][96][97][98] ThoughtWorks, технологиялық радиолокациялық функционалды бағдарламалау тілдерін бағалау кезінде,[99] 2010 жылы Clojure-ді «Lisp-ті JVM-де қарапайым, талғампаздықпен іске асыру» деп сипаттады және оның мәртебесін 2012 жылы «ADOPT» деңгейіне көтерді.[100]

Snyk және Java Magazine бірлесіп дайындаған «JVM Ecosystem Report 2018» (оны «Java әзірлеушілерінің ең үлкен сауалнамасы» деп атады), Clojure бағдарламасын JVM-де ең көп қолданылған 2-ші бағдарламалау тілі ретінде « негізгі қосымшалар ».[101] Clojure өндірісте фирмалар қолданады[102] сияқты алма,[103][104] Атласян,[105] Қаржыландыру шеңбері,[106] Netflix,[107] Қуыршақ,[108] және Walmart[109] сияқты мемлекеттік органдар сияқты НАСА.[110] Ол бейнелеу өнері, музыка, ойындар және поэзияны қоса, шығармашылық есептеулер үшін қолданылған.[111]

Құралдар

Клоурды дамытуға арналған құралдар бірнеше жылдар ішінде айтарлықтай жақсарды. Төменде кейбір танымал тізімі келтірілген IDE және мәтіндік редакторлар Clojure дамуын қосатын қондырмалармен:[112]

Қауымдастық ұсынған құралдардан басқа, ресми Clojure CLI құралдар[123] қол жетімді болды GNU / Linux, macOS, және Windows Clojure 1.9 бастап.[124]

Мысал бойынша ерекшеліктер

Келесі мысалдарды Clojure CLI құралдарымен басталған сияқты Clojure REPL-де келтіруге болады[123] немесе REPL.it сайтында қол жетімді сияқты онлайн REPL.[125]

Қарапайымдылық

Қарапайымдылыққа үлкен мән беретіндіктен, Clojure типтік бағдарламалары негізінен функциялардан және қарапайым мәліметтер құрылымынан тұрады (яғни тізімдер, векторлар, карталар мен жиындар):

;; Clojure бағдарламасының әдеттегі кіру нүктесі:;; «-негізгі» функция(defn -негізгі ; аты  [& доға] ; (айнымалы) параметрлер  (println «Сәлем Әлем!»)) ; дене

REPL-де бағдарламалау

Басқалар сияқты Лиспс, Clojure-дің бір ерекшелігі - интерактивті бағдарламалау REPL.[126] Келесі мысалдарда ;; жол түсініктемесін бастайды және ;; => күтілетін өнімді көрсетеді:

;; var анықтау(деф а 42);; => # 'user / a;; «+» деп аталатын функцияны шақырыңыз(+ а 8);; => 50;; функциясын «тіпті?» деп атайды(тіпті? а);; => шын;; 10-ға бөлгенде `n` қалдықтарын қайтаратын функцияны анықтаңыз(defn ақымақ [n] (рем n 10));; => # 'user / foo;; функцияны шақырыңыз(ақымақ а);; => 2;; «rem» доктринін басып шығарыңыз(док рем);; =>-------------------------clojure.core / rem([сан див]) қалдық туралы бөлу нумератор арқылы бөлгіш.;; «rem» көзін басып шығарыңыз(қайнар көзі рем);; =>(defn рем  «бөлгішті бөлгішке бөлудің қалған бөлігі.»  {: қосылды "1.0"   : статикалық шын   :кезекте (фн [х ж] `(. clojure.lang.Сандар (қалдық ~х ~ж)))}  [сан див]    (. clojure.lang.Сандар (қалдық сан див)))

Аттар жұмыс кезінде

Аттар жинақталатын басқа жұмыс уақытының орталарынан айырмашылығы, Clojure жұмыс уақыты қоршаған ортаны қарапайым Clojure деректер құрылымын пайдалану арқылы оңай қарастыруға болмайды:

;; var анықтау(деф а 42);; => # 'user / a;; пайдаланушы аттары кеңістігінде орналасқан барлық жалпыға қол жетімді карталардың картасын алыңыз(ns-publics «пайдаланушы);; => {a # 'пайдаланушы / a};; var-ға сілтеме «#» «(оқырман макросы) және;; оның аты, қолданушы / а` кеңістігіне сәйкес таңба#'user / a;; => # 'user / a;; сілтемені жою (мәнін алу) var(дереф #'user / a);; => 42;; функцияны анықтаңыз (доктринмен бірге);; 10-ға бөлгенде `n` қалдықтарын қайтарады(defn ақымақ «қайтарады '(rem n 10)» « [n] (рем n 10));; => # 'user / foo;; var '#' user / foo` метамәліметтерін алыңыз(мета #'user / foo);; =>{: арглисттер ([n]), : док «қайтарады '(rem n 10)» «, :түзу 1, : баған 1, : файл «user.clj», : аты ақымақ, : ns #аттар кеңістігі[пайдаланушы]}

Деректер ретінде код (гомойликность)

Басқаларына ұқсас Лиспс, Clojure болып табылады гомиконикалық (сонымен бірге деректер ретінде код ). Төмендегі мысалда біз кодтың өзін өзгертетін кодты жазудың қаншалықты оңай екенін көре аламыз:

;; функцияны шақыру (код)(+ 1 1);; => 2;; функционалдық қоңырауға баға ұсыну;; (кодты деректерге айналдыру, бұл шартты белгілер тізімі)(дәйексөз (+ 1 1));; => (+ 1 1);; тізімдегі бірінші элементті алыңыз;; (деректер ретінде код бойынша жұмыс)(бірінші (дәйексөз (+ 1 1)));; => +;; тізімдегі соңғы элементті алыңыз;; (деректер ретінде код бойынша жұмыс)(соңғы (дәйексөз (+ 1 1)));; => 1;; бастапқы тізімдегі белгілерді ауыстыру арқылы жаңа тізімді алыңыз;; (деректер ретінде кодты манипуляциялау)(карта (фн [форма]       (іс форма         1 'бір         + 'плюс))     (дәйексөз (+ 1 1)));; => (плюс бір)

Мәліметтерді түрлендіруге арналған экспрессивті операторлар

Бұрандалы макростар (->, ->>, және достар) синтаксистік жолмен деректердің жиынтығын абстракциясын бірқатар түрлендірулер арқылы білдіре алады:

(->> (ауқымы 10)     (карта Inc)     (сүзгі тіпті?));; => (2 4 6 8 10)

Бұған түрлендіргіштерді қолдану арқылы тиімдірек қол жеткізуге болады:

(жүйелі (комп (карта Inc)                (сүзгі тіпті?))          (ауқымы 10));; => (2 4 6 8 10)

Жеке басын және күйін қауіпсіз басқару

A жіптен қауіпсіз бірегей сериялық нөмірлердің генераторы (дегенмен, көптеген басқа лисп диалектілері сияқты, Clojure-де ендірілген) генсим іштей қолданатын функция):

(деф мен (атом 0))(defn generate-unique-id  «Әр қоңырау үшін нақты сандық идентификаторды қайтарады.»  []  (айырбастау! мен Inc))

Макростар

Белгісіз кіші класы java.io.Writer ол ешнәрсе жазбайды және оның ішіндегі барлық іздерді өшіру үшін оны қолданатын макро:

(деф бит-шелек жазушы  (сенімхат [java.io.Writer] []    (жазу [бұл] нөл)    (жабық []    нөл)    (жуу []    нөл)))(дефмакро noprint  «Берілген» пішіндерді «барлық басып шығарумен» * out * `susished« деп бағалайды. »  [& нысандары]  `(міндетті [* шығу * бит-шелек жазушы]     ~@нысандары))(noprint  (println «Сәлем, ешкім!»));; => нөл

Java-мен тілдік өзара әрекеттесу

Clojure өзінің дизайнерлік мақсаттарының бірі ретінде хост платформаларын қабылдау үшін басынан бастап жасалған және осылайша керемет мүмкіндік береді тілдік өзара үйлесімділік Java-мен:

;; даналық әдісті шақыру(.toUpperCase «алма»);; => «АЛМА»;; статикалық әдісті шақырыңыз(System / getProperty «java.vm.version»);; => "12+33";; «java.util.HashMap» және даналарын жасаңыз;; кейбір жазбаларды қосыңыз(дото (java.util.HashMap.)  (.қосу «алма» 1)  (.қосу «банан» 2));; => {«банан» 2, «алма» 1};; «java.util.ArrayList» және даналарын жасаңыз;; оның элементтерін «clojure.core / map» көмегімен көбейтіңіз(деф ал (дото (java.util.ArrayList.)          (.қосыңыз 1)          (.қосыңыз 2)          (.қосыңыз 3)))(map inc ал);; => (2 3 4);; Java Swing көмегімен хабарлама диалогын көрсету(javax.swing.JOptionPane / showMessageDialog  нөл  «Сәлем Әлем!»);; => нөл

Бағдарламалық жасақтаманың трансакциялық жады

Деректердің бір құрылымын басқаратын 10 ағын, олардың әрқайсысы 10 (бастапқы кезекпен) бірегей сандарды қамтитын 100 вектордан тұрады. Содан кейін әрбір жіп екі кездейсоқ вектордағы екі кездейсоқ позицияны бірнеше рет таңдайды және оларды ауыстырады. Векторлардағы барлық өзгерістер транзакцияларда Clojure's пайдалану арқылы жүреді бағдарламалық жад жүйе:

(defn жүгіру  [nvecs азоттар nthreads азоттар]  (рұқсат етіңіз [vec-refs        (->> (* nvecs азоттар)             (ауқымы)             (ішіне [] (комп (барлығы азоттар)                            (карта vec)                            (карта реф))))        айырбастау        #(рұқсат етіңіз [v1 (rand-int nvecs)               v2 (rand-int nvecs)               i1 (rand-int азоттар)               i2 (rand-int азоттар)]          (dosync            (рұқсат етіңіз [тм (nth @(vec-refs v1) i1)]              (өзгерту (vec-refs v1) доц i1 (nth @(vec-refs v2) i2))              (өзгерту (vec-refs v2) доц i2 тм))))        есеп беру        #(->> vec-refs              (ішіне [] (комп (карта дереф)                             (карта (фн [v] (прн v) v))                             мысық                             (айқын)))              (санау)              (println «Айқын:»))]    (есеп беру)    (->> #(нүктелер [_ азоттар] (айырбастау))         (қайталау nthreads)         (қолдану қоңырау)         (дорун))    (есеп беру)))(жүгіру 100 10 10 100000);; =>[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]Айқын: 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]Айқын: 1000нөл

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ а б «Агенттер және асинхронды әрекеттер». Clojure.org. Алынған 2019-07-07.
  2. ^ «Бір уақытта бағдарламалау». Clojure.org. Алынған 2019-07-07.
  3. ^ Хикки, бай; салымшылар. «core.async». GitHub.com. Алынған 2019-07-07.
  4. ^ «Функционалды бағдарламалау». Clojure.org. Алынған 2019-07-07.
  5. ^ Нолен, Дэвид; Хикки, бай; салымшылар. «core.logic». GitHub.com. Алынған 2019-07-07.
  6. ^ а б «Макростар». Clojure.org. Алынған 2019-07-07.
  7. ^ Эстерази, Паулус. «Ағымдағы макростарға арналған нұсқаулық». Clojure.org. Алынған 2019-07-07.
  8. ^ а б Миллер, Алекс (2019-06-06). «Clojure 1.10.1 шығарылымы». Clojure.org.
  9. ^ Фогус, Майкл (2011). «Rich Hickey сұрақ-жауаптары». CodeQuarterly.com. Архивтелген түпнұсқа 2017-01-11.
  10. ^ Хикки, бай. «Clojure кітап сөресі». Amazon.com. Архивтелген түпнұсқа 2017-10-03. Алынған 2019-07-07.
  11. ^ Боннер-сержант, Амброуз (2012). Clojure үшін практикалық қосымша типтік жүйе (Тезис). Батыс Австралия университеті.
  12. ^ «Clojure бағдарламалау» (PDF). OReilly.com. Алынған 2013-04-30.
  13. ^ Болдуридж, Тимоти. «Пикси». PixieLang.org. Алынған 2019-07-07.
  14. ^ Рамахандра, Рамкумар. «Рейн». GitHub.org. Алынған 2019-07-07.
  15. ^ а б c г. e Эдвардс, Кэтрин (2009-08-10). «Бағдарламалау тілдерінің A-Z: Clojure». Computerworld.com.au.
  16. ^ Хикки, бай (2009-01-05). «Clojure мағынасы мен айтылуы». Google.com.
  17. ^ а б Крилл, Павел (2012-03-22). «Clojure өнертапқышы Хики енді Android-ке бағытталған». InfoWorld.com.
  18. ^ а б «Клоур». Clojure.org. Алынған 2019-07-07.
  19. ^ а б «Басқа Лисптермен айырмашылықтар». Clojure.org. Алынған 2019-07-07.
  20. ^ а б «Даму». Clojure.org. Алынған 2019-07-07.
  21. ^ Хикки, бай (2018-11-26). «Ашық ақпарат көзі сіз туралы емес». GitHub.com.
  22. ^ а б c «Құндылықтар мен өзгеріс: Клоурдың жеке тұлғаға және мемлекетке көзқарасы». Clojure.org. Алынған 2019-07-07.
  23. ^ а б Хикки, бай. «Негіздеме». Clojure.org. Алынған 2019-07-07.
  24. ^ а б Торре, Чарльз (2009-10-06). «Сарапшыдан сарапшыға: Рич Хики және Брайан Бекман - Клоджер ішінде». MSDN.com.
  25. ^ «core.typed». GitHub.com. Алынған 2019-07-07.
  26. ^ «Жақсы жолмен инвестициялау». Cognitect.com. Алынған 2019-07-07.
  27. ^ «Clojure / conj». Clojure-Conj.org. Алынған 2019-07-07.
  28. ^ Хикки, бай (2002-10-16). «[ANN] dotLisp - .Net үшін Lisp диалектісі». Google.com.
  29. ^ Хикки, бай (2013-04-15). «jfli». SourceForge.net.
  30. ^ Хикки, бай (2013-04-03). «фольга - Lisp үшін шетелдік интерфейс». SourceForge.net.
  31. ^ Хикки, бай (2013-03-07). «Lisplets». SourceForge.net.
  32. ^ «Клоур». Atlassian.net. Алынған 2019-07-07.
  33. ^ «Клоур». Google.com. Алынған 2019-07-07.
  34. ^ «Clojure форумы». clojure.org. Алынған 2020-03-20.
  35. ^ «Салымшылар туралы келісім». Clojure.org. Алынған 2019-07-07.
  36. ^ «Жұмыс процесі». Clojure.org. Алынған 2019-07-07.
  37. ^ Рич, Хикки (2009-01-05). «Clojure тарату тізімі: Clojure мағынасы және айтылуы». groups.google.com. Мұрағатталды түпнұсқасынан 2020-01-09 ж. Алынған 2020-01-09.
  38. ^ Эльмендорф, Дирк (2010-04-01). «Экономика өлшемі - Гик-Рич Хикимен сұхбат, Clojure жасаушысы». LinuxJournal.com.
  39. ^ Хикки, бай (2007-10-16). «Clojure is Two!». BlogSpot.com.
  40. ^ Хикки, бай (2009-05-04). «Clojure 1.0». BlogSpot.com.
  41. ^ Хикки, бай (2009-12-31). «Clojure 1.1 шығарылымы». BlogSpot.com.
  42. ^ Хикки, бай (2010-08-19). «Clojure 1.2 шығарылымы». Google.com.
  43. ^ Редингер, Кристофер (2011-09-23). «[ANN] Clojure 1.3 шығарылды». Google.com.
  44. ^ Диперт, Алан (2012-04-17). «[ANN] Clojure 1.4 шығарылды». Google.com.
  45. ^ Хэллоуэй, Стюарт (2013-03-01). «ANN: Clojure 1.5». Google.com.
  46. ^ Хэллоуэй, Стюарт (2013-03-10). «Clojure 1.5.1». Google.com.
  47. ^ Миллер, Алекс (2014-03-25). «[ANN] Clojure 1.6». Google.com.
  48. ^ а б Миллер, Алекс (2015-06-30). «Clojure 1.7 енді қол жетімді». Clojure.org.
  49. ^ Миллер, Алекс (2016-01-19). «Clojure 1.8 енді қол жетімді». Clojure.org.
  50. ^ Миллер, Алекс (2017-12-08). «Clojure 1.9 қол жетімді». Clojure.org.
  51. ^ Миллер, Алекс (2018-12-17). «Clojure 1.10 шығарылымы». Clojure.org.
  52. ^ а б «JVM-де хостинг». Clojure.org. Алынған 2019-07-07.
  53. ^ «Java Interop». Clojure.org. Алынған 2019-07-07.
  54. ^ Хагельберг, Фил; салымшылар. «Лейнинген». Leiningen.org. Алынған 2019-07-07.
  55. ^ а б c «Оқырман». Clojure.org. Алынған 2019-07-07.
  56. ^ Хикки, бай. «edn». GitHub.com. Алынған 2019-07-07.
  57. ^ «Мультиметрия және иерархия». Clojure.org. Алынған 2019-07-07.
  58. ^ «Хаттамалар». Clojure.org. Алынған 2019-07-07.
  59. ^ «Деректер типтері: деформация, деформация және реификация». Clojure.org. Алынған 2019-07-07.
  60. ^ Гетц, Брайан (2014-11-20). «Басқару: тұрақты бөліктер». YouTube.com.
  61. ^ Роуз, Джон (2007-07-12). «VM-дағы қоңыраулар». Oracle.com.
  62. ^ Роуз, Джон (2009-02-11). «Кейбір тілдер құйрық қоңырауларын орындай алуы керек». Java.net.
  63. ^ «Арнайы бланкілер». Clojure.org. Алынған 2019-07-07.
  64. ^ «Сілтемелер және транзакциялар». Clojure.org. Алынған 2019-07-07.
  65. ^ Хикки, бай (2013-06-28). «Clojure core.async арналары». Clojure.org.
  66. ^ Хикки, бай (2014-09-17). «Түрлендіргіштер». YouTube.com.
  67. ^ Хикки, бай (2014-08-06). «Түрлендіргіштер келеді». Cognitect.com.
  68. ^ Хикки, бай (2014-11-20). «Ішіндегі түрлендіргіштер». YouTube.com.
  69. ^ «ClojureScript». ClojureScript.org. Алынған 2019-07-06.
  70. ^ «ClojureScript - Сұрақ-жауап (JavaScript әзірлеушілері үшін)». ClojureScript.org. Алынған 2018-02-04.
  71. ^ «ClojureCLR». GitHub.com. Алынған 2012-06-28.
  72. ^ Эмерик, Час (2013-11-18). «2013 жылғы Clojure & ClojureScript сауалнамасының нәтижелері». CEmerick.com.
  73. ^ «Клужер штаты-2014 сауалнамасының нәтижелері». WuFoo.com. Алынған 2015-09-17.
  74. ^ Гехтланд, Джастин (2016-01-28). «Клужер штаты-2015 сауалнамасының нәтижелері». Cognitect.com.
  75. ^ «Реагент». GitHub.io. Алынған 2019-07-06.
  76. ^ «қайта жақтау». GitHub.com. Алынған 2019-07-06.
  77. ^ Прокопов, Никита. «Ром». GitHub.com. Алынған 2019-07-06.
  78. ^ Нолен, Дэвид. «Ом». GitHub.com. Алынған 2019-07-06.
  79. ^ Купленд, Том (2014-01-17). «Om: Facebook-тің реакциясын өзгермейтіндігімен жақсарту». InfoQ.com.
  80. ^ Ху, Вэй. «Перл туралы лисп». MetaCPAN.org. Алынған 2019-07-06.
  81. ^ Факорро, Хуан. «Клойерл». GitHub.com. Алынған 2019-07-06.
  82. ^ Болдуридж, Тимоти. «clojure-py». GitHub.com. Алынған 2019-07-06.
  83. ^ Аккая, Нурулла. «Феррет». Ferret-Lang.org. Алынған 2019-07-06.
  84. ^ Батаев, Роман. «Джокер». Joker-Lang.org. Алынған 2019-07-06.
  85. ^ Зеңбірек, Эймон. «Laz3r». GitHub.com. Алынған 2019-07-06.
  86. ^ Болдуридж, Тимоти. «Пикси». PixieLang.org. Алынған 2019-07-06.
  87. ^ Коннор, Эш. «Руж». GitHub.com. Алынған 2019-07-06.
  88. ^ Гетц, Брайан (2020-05-24). «Брайан Гетцтің сүйікті Java емес JVM тілі (3-бөлім 1)». Twitch.tv.
  89. ^ Гетц, Брайан (2020-05-24). «Брайан Гетцтің сүйікті Java емес JVM тілі (3-бөлім 2-бөлігі)». Twitch.tv.
  90. ^ Гетц, Брайан (2020-05-24). «Брайан Гетцтің сүйікті Java емес JVM тілі (3-бөлім 3)». Twitch.tv.
  91. ^ Эванс, Эрик (2018-08-14). «Модельдеу уақыты - Эрик Эванс - Доменге негізделген дизайн Еуропа 2018». YouTube.com.
  92. ^ Эванс, Эрик (2014-11-21). «Эрик Эванс Twitter-де». Twitter.com.
  93. ^ «Джеймс Гостлингтің Лондонның Java қауымдастығымен кездесуі». YouTube.com. 2016-10-11.
  94. ^ Грэм, Павел (2016-05-06). «Пол Грэм Твиттерде». Twitter.com.
  95. ^ Мартин, Роберт (2019-08-22). «Неліктен Клоур?». CleanCoder.com.
  96. ^ Мартин, Роберт (2018-11-29). «Таза емес Боб Мартин Twitter-де». Twitter.com.
  97. ^ Мартин, Роберт (2018-08-01). «Функционалды бағдарламалауға кіріспе». CleanCoders.com.
  98. ^ Мартин, Роберт (2017-07-11). «Прагматикалық функционалды бағдарламалау». CleanCoder.com.
  99. ^ «Жиі қойылатын сұрақтар - технологиялық радар - ThoughtWorks». ThoughtWorks.com. Алынған 2019-02-10.
  100. ^ «Clojure - технологиялық радар - ThoughtWorks». ThoughtWorks.com. Алынған 2019-02-10.
  101. ^ Maple, Simon; Бинсток, Эндрю (2018-10-17). «JVM экожүйелік есебі 2018». Snyk.io.
  102. ^ «Табыс оқиғалары». Clojure.org. Алынған 2018-10-27.
  103. ^ Лиутиков, Роман (2017-12-17). «Роман Лиутиков Twitter-де». Twitter.com.
  104. ^ «Apple-дегі жұмыс». Apple.com. Алынған 2019-07-06.
  105. ^ Борхес, Леонардо (2015-07-07). «Клоурмен нақты уақыттағы ынтымақтастық». YouTube.com.
  106. ^ Джон (2016-10-04). «Лондондағы Clojure: Қаржыландыру шеңбері - Clojure-ге несие беру». JUXT.pro.
  107. ^ Уильямс, Алекс (2014-08-03). «Жаңа стек жасаушылар: Адриан Кокрофт, Күн, Netflix, Clojure, Go, докер және тағы басқалар». TheNewStack.io.
  108. ^ Бағасы, Крис (2014-04-11). «Қуыршақ зертханаларында қолданбалы қызметтердің жаңа дәуірі». Қуыршақ.com. Алынған 2020-08-06.
  109. ^ Филлипс, Марк (2015-07-14). «Walmart масштабта жұмыс істейді». Cognitect.com.
  110. ^ «Жалпы метадеректер-репозиторий». GitHub.com. Алынған 2019-07-06.
  111. ^ Мейер, Карин (2015-05-06). «Клоурмен шығармашылық есептеулер». OReilly.com.
  112. ^ Миллер, Алекс (2019-02-04). ""Клоур штатында 2019 «нәтижелер». Clojure.org.
  113. ^ Сабо, Маурисио. «Хлор: Clojure және ClojureScript үшін Socket REPL клиенті». Atom.io. Алынған 2019-07-05.
  114. ^ Батсов, Божидар; салымшылар. «CIDER: Clojure интерактивті даму ортасы». CIDER.mx. Алынған 2019-07-05.
  115. ^ Шраго, Грег. «Clojure-Kit: IntelliJ негізіндегі құралдарға арналған Clojure және ClojureScript плагині». JetBrains.com. Алынған 2019-07-05.
  116. ^ Флеминг, Колин. «Cursive: Clojure және ClojureScript тілдеріне толық қолдау көрсетеді». JetBrains.com. Алынған 2019-07-05.
  117. ^ Рим Папасы, Тим. «fireplace.vim: Clojure REPL қолдауы». VIM.org. Алынған 2019-07-05.
  118. ^ Монро, Доминик (2016-12-13). «Clojure and Vim: шолу - бұл өте мүмкін». JUXT.pro.
  119. ^ Масаши, Иизука. «vim-iced: Vim8 / Neovim үшін Clojure интерактивті даму ортасы». GitHub.com. Алынған 2020-03-13.
  120. ^ Колдуэлл, Оливер. «Neovim Clojure (сценарий) алдын-ала құралы». GitHub.com. Алынған 2019-11-09.
  121. ^ Колдуэлл, Оливер (2019-11-06). «Clojure, Neovim және Conjure-ді бірнеше минут ішінде бастау». oli.me.uk.
  122. ^ Штремберг, Петр. «Calva: Clojure & ClojureScript интерактивті бағдарламалау». VisualStudio.com. Алынған 2019-07-05.
  123. ^ а б Миллер, Алекс. «Депс және CLI нұсқаулығы». Clojure.org. Алынған 2019-07-08.
  124. ^ Миллер, Алекс (2017-12-08). «Clojure 1.9». Cognitect.com.
  125. ^ «Онлайн Clojure REPL». REPL.it. Алынған 2019-07-08.
  126. ^ «REPL-де бағдарламалау: кіріспе». Clojure.org. Алынған 2018-12-04.

Әрі қарай оқу

Сыртқы сілтемелер

Ресми сайт Мұны Wikidata-да өңдеңіз