Clojure

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. március 17-én felülvizsgált verziótól ; az ellenőrzések 6 szerkesztést igényelnek .
Clojure
Nyelvóra funkcionális , több paradigma
Megjelent 2007
Szerző Rich Hickey
Fejlesztő Hickey, Richard
Fájlkiterjesztés _ .clj, .cljs, .cljc, .ednvagy.cljr
Kiadás 1.11.1 ( 2022. április 5. )
Típusrendszer dinamikus, szigorú
Befolyásolt Lisp , ML , Haskell , Erlang [1] , Prolog , Scheme , Java , Ruby [2]
befolyásolta Elixír
Engedély Eclipse nyilvános licenc
Weboldal clojure.org
 Médiafájlok a Wikimedia Commons oldalon

A Clojure (ejtsd: zárás [ˈklōZHər]) a Lisp modern dialektusa , egy általános célú programozási nyelv , amely támogatja az interaktív fejlesztést, amely ösztönzi a funkcionális programozást és megkönnyíti a többszálú feldolgozást . A Clojure JVM és CLR platformokon fut . A Clojure-t a "kód mint adat" filozófiája ( homicon ) és a Lisp makrók kidolgozott rendszere különbözteti meg .

A Clojure fordító szabadon terjeszthető az Eclipse Public License feltételei szerint .

Filozófia

Rich Hickey a Clojure-t modern Lisp -ként tervezte funkcionális programozáshoz , Java platformba integrálva, a párhuzamosság támogatására . [3]

Szintaxis

Mint minden más Lisp, a Clojure szintaxisa S-kifejezéseken alapul , amelyeket az értelmező fordít le adatszerkezetekké a fordítás előtt . A Clojure elemző a szokásos listákon kívül támogatja az asszociatív tömbök , halmazok és vektorok literális szintaxisát is , átadva ezeket az adatstruktúrákat a fordítónak . Más szóval, a Clojure fordító nem csak a lista adatstruktúrákat fordítja le, hanem közvetlenül támogatja az összes megadott típust.

Bár a Clojure a Lisp eredeti verziójának kiterjesztése , nem kompatibilis a Lisp-pel, azaz a Lisp egyik modern verziójának egyik programjával sem (talán a legrövidebb, legprimitívebb és ráadásul speciálisan kiválasztott verzió kivételével) példák) vagy egyáltalán nem megy át a Clojure fordító, vagy nem fut megfelelően. A Lisp általános verzióitól való eltérések a nyelvi webhelyen találhatók [4] . Íme néhány közülük:

Makrók

A Clojure makrórendszer nagyon hasonlít a Common Lisp makrórendszeréhez , két kivétellel:

A nyelv jellemzői

Példák

szia világ :

( nyomtatva : "Hello világ!" )

Szál biztonságos egyedi sorozatszám generátor:

( legyen [i ( atom 0 ) ] ( defn gener -unique-id "Minden híváshoz eltérő numerikus azonosítót ad vissza." [] ( csere! i inc )))

Egy névtelen alosztály java.io.Writer, amely nem ad ki semmit, és egy makró, amely az összes kimenet elnémítására szolgál:

( def bit-bucket-writer ( proxy [java.io.Writer] [] ( write [buf] nil ) ( close [] nil ) ( flush [] nil ))) ( defmacro noprint "Kiértékeli a megadott kifejezéseket, elnémítva az összes *kimenetet* a képernyőre." . [& forms] ` ( kötés [*out* bit-bucket-writer] ~@forms )) ( noprint ( println "Helló, senki!" ))

10 szál egy közös adatstruktúrát manipulál, amely 100 vektorból áll, amelyek mindegyike 10 (kezdetben egymást követő) egyedi számot tartalmaz. Minden szál ismételten kiválaszt két véletlenszerű pozíciót két véletlenszerű vektorban, és felcseréli az értékeket. Minden vektorváltozás egyetlen tranzakcióban történik a clojure tranzakciós memóriarendszer használatával. Ezért még 1000 iteráció után sem vesznek el számok egyik szálban sem.

( defn run [nvecs nitems nthreads niters] ( let [vec-refs ( vec ( map ( comp ref vec )) ( partíció 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 ( different ( concat alkalmazása ( map deref vec-refs )))))) ] ( report ) ( dorun ( pcalls alkalmazása ( nthreads ismétlése #( dotimes [_ niters] ( csere ))))) ( jelentés ))) ( fut 100 10 10 100 000 )

Az előző példa kimenete:

( [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 :) ( [382 318 466 963 619 22 21 273 45 596] [ 808 639 804 471 394 904 952 75 289 778] ... [ 484 216 626 963 619 22 21 273 45 596 ] ... [ 484 216 622 1359

Lásd még

Jegyzetek

  1. Gazdag Hickey. Könyvek, amelyek hatással voltak Clojure-ra (hivatkozás nem érhető el) (2009. június 30.). Letöltve: 2009. szeptember 11. Az eredetiből archiválva : 2012. április 18.. 
  2. Clojure programozás . Letöltve: 2013. április 30. Az eredetiből archiválva : 2015. május 21..
  3. Indoklás (downlink) . Rich Hickey . clojure.org. Letöltve: 2008. október 17. Az eredetiből archiválva : 2012. április 18.. 
  4. A Clojure és a Lisp közötti különbségek . Letöltve: 2017. október 23. Az eredetiből archiválva : 2019. július 8..

Irodalom

Linkek

Oroszul