Clojure

**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ı

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

__BÖLİDİMÖNDEMEW__