Clojure

Clojure 140px Paradigma Kóp paradigmalı: agentke baǵdarlanǵan, parallel, funkcional, logikalıq, makro, konveyerli Shańaraq Lisp Dúziwshi Rich Xiki Payda bolǵan waqtı 2007-jıl Turaqlı reliz 1.12.3 / 25-sentyabr 2025 Tiplestiriw tártibi dinamikalıq, kúshli Yadtı basqarıw Xost arqalı qoqım jıynaw (JVM, CLR, ClojureScript jaǵdayında V8 sıyaqlı JavaScript orınlanıw ortalıǵı yamasa BEAM (tómenge qarań)) Platforma Java, JavaScript, .NET Licenziya Eclipse Public Fayl keńeytpeleri .clj, .cljs, .cljr, .cljc, .cljd, .edn Veb-sayt clojure.org
Clojure (/ˈkloʊʒәr/, klozher sıyaqlı) — bul Java platformasındaǵı Lisp programmalastırıw tiliniń dinamikalıq hám funkcional dialekti.

Kópshilik basqa Lispler sıyaqlı, Clojure niń sintaksisi Lisp oqıwshısı tárepinen kompilyaciyalanıwdan aldın maǵlıwmatlar strukturalarına parslanatuǵın S-ańlatpalarına tiykarlanǵan. Clojure oqıwshısı dizimler menen birge kartalar, toplamlar hám vektorlar ushın literal sintaksisti qollap-quwatlaydı hám olar atalǵan strukturalarǵa tikkeley kompilyaciyalanadı. Clojure kodtı maǵlıwmat retinde qarastıradı hám Lisp makro sistemasına iye. Clojure — bul Lisp-1 bolıp, basqa Lisp dialektleri menen kod sáykes keliwi ushın arnalmaǵan, sebebi ol basqa Lispler menen sáykes kelmeytuǵın óziniń maǵlıwmatlar strukturaları toplamın paydalanadı.

Clojure ózgermeytuǵınlıqtı hám ózgermeytuǵın maǵlıwmatlar strukturaların xoshametleydi hám baǵdarlamashılardı sáykeslikti hám onıń jaǵdayların basqarıwda anıq bolıwǵa shaqıradı. Ózgermeytuǵın mánisler menen programmalastırıwǵa hám anıq waqıttıń ótiw konstrukciyalarına bul itibar ápiwayı hám tez bolǵan anaǵurlım bekkem, ásirese parallel programmalardı islep shıǵıwdı jeńillestiriwge arnalǵan. Onıń tip sisteması tolıǵı menen dinamikalıq bolsa da, sońǵı háreketler sonday-aq ǵárezli tip sistemasın ámelge asırıwǵa da umtıldı.

Til 2000-jıllardıń ortalarında Rich Xikki tárepinen, dáslep Java platforması ushın jaratılǵan; til sonnan berli Common Language Runtime (.NET) sıyaqlı basqa platformalarǵa da kóshirildi. Xikki tildiń rawajlanıwın ómirlik miyrimli diktatorı retinde basqarıwdı dawam etpekte.

 Tariyxı 
nobaý|Rich Xikki, Clojure jaratıwshısı
Rich Xikki — bul Clojure tiliniń jaratıwshısı. Clojureden aldın, ol .NET platformasına tiykarlanǵan uqsas proekt dotLisp-ti hám Lisp penen Java arasındaǵı óz-ara tásirdi támiyinlewge arnalǵan úsh aldıńǵı talpınıstı islep shıqqan: Common Lisp ushın Java sırtqı til interfeysi (jfli), Lisp ushın Sırtqı Obyekt Interfeysi (FOIL) hám Java Servletlerine Lisp-ke qolaylı interfeys (Lisplets).

Xikki 2007-jıl oktyabr ayında Clojure ni kópshilikke shıǵarıwdan aldın oǵan shama menen eki yarım jıl waqıt jumsadı, bul waqıttıń kópshiligi sırtqı qarjısız tek Clojure ústinde isledi. Bul waqıttıń aqırında, Xikki tildiń járiyalanıwı haqqında Common Lisp jámiyetindegi geypara doslarına elektron xat jiberdi.

Clojure atı, Xikkidiń aytıwınsha, «jabılıw» programmalastırıw koncepciyasındaǵı bir sóz oyını bolıp, ol C#, Lisp hám Java ushın sáykes túrde C, L hám J háriplerin óz ishine aladı — bul úsh til Clojure niń dizaynına úlken tásir etken.

 Dizaynı 
Rich Xikki Clojure ni jarattı, sebebi ol funkcional programmalastırıw ushın zamanagóy Lisp-ti, qáliplesken Java platforması menen simbiozda bolǵan hám parallellik ushın proektlestirilgen til qálegen edi. Ol sonıń menen birge programmalastırıw tilin proektlestiriwde hám programmalıq támiynat arxitekturasında ápiwayılılıqtıń áhmiyetliligin ayrıqsha atap ótti, hálsiz baylanıstı, miyras ornına protokollar hám tip klassları arqalı polimorfizmdi, metodlar yamasa sintaksisti maǵlıwmatlar menen almastırıw ornına atlar keńisligine iye bolǵan jaǵdaysız funkciyalardı qollap-quwatladı.

Clojure niń jaǵdayǵa qatnası sáykeslikler koncepciyası menen xarakterlenedi, olar waqıt ótiwi menen ózgermeytuǵın jaǵdaylar izbe-izligi retinde kórsetiledi. Jaǵdaylar ózgermeytuǵın mánisler bolǵanlıqtan, qálegen sanlı orınlawshılar olar ústinde parallel isley aladı hám parallellik bir jaǵdaydan ekinshisine ótiwlerdegi ózgerislerdi basqarıw máselesine aylanadı. Usı maqset ushın, Clojure bir neshe ózgermeli silteme tiplerin usınadı, olardıń hárbiriniń jaǵdaylar arasındaǵı ótiw ushın jaqsı anıqlanǵan semantikası bar.

Clojure Java platformasında isley aladı hám nátiyjede, Java menen integraciyalanadı hám Clojureden Java kodın shaqırıwdı tolıq qollap-quwatlaydı, hám Clojure kodı da Javadan shaqırılıwı múmkin. Jámiyetlik Clojure komanda qatarı interfeysi (CLI) yamasa Leiningen sıyaqlı qurallardı proekt avtomatlastırıw ushın paydalanadı, bul Maven integraciyasın qollap-quwatlaydı. Bul qurallar proekt paketlerin basqarıwdı hám ǵárezliliklerdi basqaradı hám Clojure sintaksisi arqalı konfiguraciyalanadı.

Lisp dialekti retinde, Clojure funkciyalardı birinshi dárejeli obyektler retinde, oqıw-bahalaw-basıp shıǵarıw ciklin (REPL) hám makro sistemasın qollap-quwatlaydı. Clojureniń Lisp makro sisteması Common Lisp-tikine júdá uqsas, tek Clojureniń keri citata versiyası («sintaksis citatası» dep ataladı) simvollardı ózleriniń atlar keńisligi menen anıqlaydı. Bul kútilmegen at uslap alıwın aldın alıwǵa járdem beredi, sebebi atlar keńisligi menen anıqlanǵan atlarǵa baylanıstırıw qadaǵan etilgen. Uslaǵısh makro keńeytiwin májbúrlew múmkin, biraq onı anıq islew kerek. Clojure paydalanıwshı anıqlaǵan oqıwshı makroslarına ruqsat bermeydi, biraq oqıwshı sintaksislik keńeytiwdiń anaǵurlım sheklengen bir formasın qollap-quwatlaydı. Clojure kóp metodlardı qollap-quwatlaydı hám interfeyske uqsas abstrakciyalar ushın jazıwlar paydalanatuǵın protokolǵa tiykarlanǵan polimorfizm hám maǵlıwmat tip sistemasına iye, bul ańlatpa máselesin sheshiw ushın proektlestirilgen joqarı ónimli hám dinamikalıq polimorfizmdi támiyinleydi.

Clojure erinshek dizimlerdi qollap-quwatlaydı hám ózgermeytuǵın principin hám turaqlı maǵlıwmatlar strukturaların xoshametleydi. Funkcional til retinde, qosımsha tásirge tiykarlanǵan cikller ornına rekursiyaǵa hám joqarı dárejeli funkciyalarǵa ayrıqsha itibar beriledi. JVM onı jergilikli qollap-quwatlamaǵanlıqtan, avtomat quyrıqlı shaqırıwdı optimallastırıw qollap-quwatlanbaydı; onı recur gilt sózin paydalanıp anıq islew múmkin. Parallel hám bir waqıttaǵı programmalastırıw ushın Clojure programmalıq támiynat tranzakciyalıq yadın, reaktiv agent sistemasın hám kanalǵa tiykarlanǵan bir waqıttaǵı programmalastırıwdı usınadı.

Clojure 1.7 Clojure, ClojureSkript hám ClojureCLR kodın bir atlar keńisliginde jaylastırıwǵa imkaniyat beriw arqalı oqıwshı shártlerin kirgizdi. Transdyuserler transformaciyalardı biriktiriw usılı retinde qosıldı. Transdyuserler map hám fold sıyaqlı joqarı dárejeli funkciyalardıń hár qanday maǵlıwmat deregi ústinde ulıwmalastırılıwına imkaniyat beredi. Dástúrli túrde bul funkciyalar izbe-izlikler ústinde islese, transdyuserler olardıń kanallar ústinde islewine imkaniyat beredi hám paydalanıwshıǵa transdukciya ushın óz modellerin anıqlawǵa múmkinshilik beredi.

 Keńeytiletuǵın Maǵlıwmat Notaciyası 
Keńeytiletuǵın Maǵlıwmat Notaciyası yamasa edn — bul Clojure tiliniń maǵlıwmat almasıw formatı retinde arnalǵan bir bólimi. Ol Clojure maǵlıwmat strukturaların seriyalaw hám deseriyalaw ushın qollanılıwı múmkin hám Clojureniń ózi de programmalardı kórsetiw ushın edn-niń bir supersetin paydalanadı

edn JSON yamasa XML sıyaqlı usılda paydalanıladı, biraq salıstırmalı túrde úlken ornatılǵan elementler dizimine iye, bul jerde mısallar menen kórsetilgen:

 logikalıq mánisler: true, false
 qatarlar: "foo bar"
 belgiler: \c, \tab
 simvollar name
 gilt sózler: :key
 pútin sanlar: 123
 haqıyqıy sanlar: 3.14
 dizimler: (a b 42)
 vektorlar: [a b 42]
 kartalar: {:a 1, "foo" :bar, [1 2 3] four}
 toplamlar: #{a b [1 2 3]}
 nil: nil (null-ǵa uqsas mánis)

Bul elementlerge qosımsha, ol # belgisi menen birge simvoldan ibarat bolǵan tegler arqalı keńeytiwdi qollap-quwatlaydı. Tegti ushıratqanda, oqıwshı kelesi elementtiń mánisin sáykes qayta islewshige beredi, ol maǵlıwmat mánisin qaytaradı. Mısalı, bul bir teglengen element bolıwı múmkin: #myapp/Person {:first "Fred" :last "Mertz"}, onıń interpretaciyası oqıwshınıń sáykes qayta islewshisine baylanıslı boladı.

Keńeytpe elementleriniń basqalar arqalı bul anıqlaması tiykarǵı toplamǵa kirmeytuǵın elementlerdi jetkeriw ushın ya konvenciyaǵa ya kontekstke súyeniwden qashıwǵa imkaniyat beredi.

 Alternativ platformalar 
Clojure niń tiykarǵı platforması Java, biraq basqa maqsetli implementaciyalar da bar. Olardıń eń belgilisi ECMAScript 3 ke kompilyaciyalanatuǵın ClojureScript hám onıń ekosisteması menen óz-ara tásir etetuǵın .NET platformasındaǵı tolıq port ClojureCLR bolıp tabıladı.

Hár túrli platformalardaǵı Clojure niń basqa implementaciyalarına tómendegiler kiredi:

 Babashka, GraalVM jergilikli súwretin hám Kishi Clojure Interpretatorın paydalanatuǵın Jergilikli Clojure skriptlew tili
 ClojureDart, Clojure ni Dart hám Flutter-ge portlaw arqalı Clojure niń qamtıwın mobil hám desktop qosımshalarına keńeytiw
 Clojerl, Erlang virtual mashinası BEAM-degi Clojure
 basilisp, Python 3.8+ ǵa baǵdarlanǵan Clojure ge sáykes (-ish) Lisp dialekti
 ClojureRS, Rust taǵı Clojure
 Ferret, mikrokontrollerlerde isley alatuǵın óz-aldına C++11 ge kompilyaciyalanadı
 jank, LLVM ge tiykarlanǵan JIT-te C++ tilinde xostlanǵan Jergilikli Clojure
 Joker, Go tilinde jazılǵan interpretator hám linter

 Qurallar 
Clojure islep shıǵıw quralları jıllar dawamında oǵada jaqsılandı. Tómende Clojure tilinde programmalastırıwdı qollap-quwatlaytuǵın plaginleri bar geypara keń tarqalǵan IDE-ler hám tekst redaktorları dizimi berilgen:

 Emacs, CIDER menen
 IntelliJ IDEA, Cursive menen (kommerciyalıq emes paydalanıw ushın biypul licenziya bar)
 Sublime Text, Clojure Sublimed yamasa Tutkain menen
 Vim, fireplace.vim, vim-elin yamasa Conjure (tek Neovim) menen
 Visual Studio Code, Calva menen
 IDE-ǵárezsiz: clojure-lsp Til Serveri retinde; clj-kondo linter retinde (clojure-lsp tárepinen de paydalanıladı)

Jámiyetshilik tárepinen usınılǵan qurallardan tısqarı, rásmiy Clojure komanda qatarı interfeysi (CLI) quralları da Clojure 1.9-dan baslap Linux, macOS hám Windowsta qoljetimli boldı.

 Rawajlanıwı 
Islep shıǵıw procesi Clojure tiykarǵı komandası menen sheklengen, degen menen máseleler Clojure JIRA proekt betinde kópshilikke kórinedi. Hárkim ask.clojure.org saytında sorawlar beriw yamasa máseleler hám ideyalar usınıw múmkin. Eger jańa máseleniń JIRA bileti talap etetuǵını anıqlansa, tiykarǵı komanda aǵzası onı sortlaydı hám qosadı. JIRA máseleleri saralawshılar komandası tárepinen qayta islenedi hám aqırında Rich Xikki tárepinen tastıyıqlanadı.

 Tásiri 
Funkcional programmalastırıwǵa qızıǵıwshılıqtıń dawam etip atırǵanı menen, Java platformasın paydalanatuǵın programmalıq támiynat baǵdarlamashıları tárepinen Clojure ni qabıl etiw dawam etpekte. Til sonday-aq Brayan Gets, Erik Evans, Djeyms Gosling, Pol Grem, hám Robert S. Martin sıyaqlı programmalıq támiynat baǵdarlamashıları tárepinen de usınılǵan. ThoughtWorks óziniń Texnologiya Radarı ushın funkcional programmalastırıw tillerin bahalap atırǵanda, 2010-jılı Clojure ni «JVM-degi Lisptiń ápiwayı, elegant implementaciyası» dep táriyipledi hám 2012-jılı onıń statusın «QABÍL ETIW» dárejesine kóterdi.

«JVM Ekosisteması Esabatı 2018»de (bul «Java baǵdarlamashılarınıń eń úlken sorawnaması» dep aytılǵan), Snyk hám Java Magazine menen birgelikte tayarlanǵan, Clojure «tiykarǵı qosımshalar» ushın JVM de eń kóp paydalanılatuǵın ekinshi programmalastırıw tili retinde orın aldı. Clojure sanaatta Apple, Atlassian, Funding Circle, Netflix, Nubank, Puppet, hám Walmart sıyaqlı firmalar, sonday-aq NASA sıyaqlı mámleketlik agentlikler tárepinen qollanıladı. Ol sonday-aq vizual kórkem óner, muzıka, oyınlar hám poeziya sıyaqlı dóretiwshilik esaplawlar ushın da paydalanılǵan.

Stack Overflow Baǵdarlamashılar Sorawnamasınıń 2023-jılǵı basılımında Clojure programmalastırıw hám skriptlew tilleri kategoriyasında eń kóp húrmet kórsetilgen tórtinshi orında boldı, ótken jılı onıń menen islegen respondentlerdiń 68.51%-i onı paydalanıwdı dawam etiwdi qáleytuǵının ayttı. Degen menen, qálegen kategoriya boyınsha onı sorawnamada qatnasqan baǵdarlamashılardıń tek 2.2%-i ǵana belgilegen, al eń joqarı ball alǵan JavaScript sorawnamada qatnasqan baǵdarlamashılardıń 40.15%-i tárepinen maqullanǵan..

 Derekler 

Kategoriya:Programmalastırıw tilleri
Kategoriya:Joqarı dárejeli programmalastırıw tilleri
Kategoriya:Kross-platformalı programmalıq támiynat
__BÖLİDİMÖNDEMEW__