Clojure | |
---|---|
Kieliluokka | toimiva , moniparadigma |
Esiintyi | 2007 |
Tekijä | Rikas Hickey |
Kehittäjä | Hickey, Richard |
Tiedostotunniste _ | .clj, .cljs, .cljc, .edntai.cljr |
Vapauta | 1.11.1 ( 5. huhtikuuta 2022 ) |
Tyyppijärjestelmä | dynaaminen, tiukka |
Vaikutettu | Lisp , ML , Haskell , Erlang [1] , Prolog , Scheme , Java , Ruby [2] |
vaikutti | Eliksiiri |
Lisenssi | Eclipse julkinen lisenssi |
Verkkosivusto | clojure.org |
Mediatiedostot Wikimedia Commonsissa |
Clojure (lausutaan sulkeminen [ˈklōZHər]) on Lispin moderni murre , yleiskäyttöinen ohjelmointikieli , joka tukee vuorovaikutteista kehitystä, joka kannustaa toiminnalliseen ohjelmointiin ja helpottaa monisäikeistystä . Clojure toimii JVM- ja CLR -alustoilla . Clojure erottuu filosofiasta "koodi datana" ( homoicon ) ja kehitetty Lisp-makrojärjestelmä .
Clojure - kääntäjä jaetaan vapaasti Eclipse Public License -lisenssin ehtojen mukaisesti .
Rich Hickey suunnitteli Clojuren nykyaikaiseksi Lisp -ohjelmistoksi toiminnalliseen ohjelmointiin integroituna Java - alustaan, joka on suunniteltu tukemaan samanaikaisuutta . [3]
Kuten minkä tahansa muun Lispin, Clojuren syntaksi perustuu S-lausekkeisiin , jotka jäsentäjä kääntää tietorakenteiksi ennen kääntämistä . Clojuren jäsentäjä tukee tavallisten luetteloiden lisäksi kirjaimellista syntaksia assosiatiivisille taulukoille , joukoille ja vektoreille välittäen kaikki nämä tietorakenteet kääntäjälle . Toisin sanoen Clojure-kääntäjä ei vain kokoa luettelotietorakenteita, vaan tukee suoraan kaikkia määritettyjä tyyppejä.
Vaikka Clojure on Lispin alkuperäisen version laajennus , se ei ole yhteensopiva Lispin kanssa, toisin sanoen Lispin nykyaikaisten versioiden ohjelman kanssa (lukuun ottamatta mahdollisesti lyhintä, alkeellisinta ja lisäksi erityisesti valittua esimerkit) tai ei ollenkaan Clojure-kääntäjä läpäisee tai se ei toimi oikein. Erot yleisistä Lisp-versioista on lueteltu kielisivustolla [4] . Tässä on joitain niistä:
Clojure-makrojärjestelmä on hyvin samanlainen kuin sen Common Lisp -makrojärjestelmä kahdella poikkeuksella:
Säie -turvallinen yksilöllinen sarjanumerogeneraattori:
( anna [i ( atom 0 ) ] ( defn generate-unique-id "Palauttaa eri numeerisen tunnuksen jokaiselle puhelulle." [] ( swap! i inc )))Anonyymi alaluokka java.io.Writer, joka ei tulosta mitään, ja makro, jota käytetään hiljentämään kaikki sen sisältämät lähdöt:
( def bit-bucket-writer ( välityspalvelin [java.io.Writer] [] ( kirjoittaa [buf] nolla ) ( sulje [] nolla ) ( huuhtele [] nolla ))) ( defmacro noprint "Arvioi annetut lausekkeet mykistämällä kaikki *ulostulot* näytölle." . [& lomakkeet] ` ( sitova [*out* bit-bucket-writer] ~@forms )) ( noprint ( println "Hei, ei kukaan!" ))10 säiettä, jotka käsittelevät yhtä yhteistä tietorakennetta, joka koostuu 100 vektorista, joista jokainen sisältää 10 (alun perin peräkkäistä) yksilöllistä numeroa. Jokainen lanka valitsee toistuvasti kaksi satunnaista paikkaa kahdessa satunnaisvektorissa ja vaihtaa niiden arvoja. Kaikki vektorin muutokset tapahtuvat yhdessä tapahtumassa käyttämällä Clojure- tapahtumamuistijärjestelmää . Siksi edes 1000 iteroinnin jälkeen ei menetetä yhtään numeroa kussakin säikeessä.
( defn run [nvecs nitems nthreads niters] ( anna [vec- refs ( vec ( map ( comp ref vec ) ( osio nitems ( alue ( * nvecs nitems ))))) swap #( anna [v1 ( rand-int nvecs ) v2 ( rand-int nvecs ) i1 ( rand-int nitems ) i2 ( rand-int nitems ) ] ( dosync ( anna [temp ( nth @ ( vec- refs v1 ) i1 ) ] ( alter ( vec-refs v1 ) assoc i1 ( nth @ ( vec-refs v2 ) i2 )) ( alter ( vec-refs v2 ) assoc i2 temp )))) raportti #( do ( prn ( map deref vec- refs )) ( println "Erillinen:" ( count ( different ( käytä concat ( map deref vec- refs )))))) ] ( report ) ( dorun ( käytä pcalls ( toista n säiettä #( dotimes [_ niters] ( swap ))))) ( raportti ))) ( ajaa 100 10 10 100 000 )Edellisen esimerkin tulos:
( [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 :) 100tinct ] ( [ 382 318 466 963 619 22 21 273 45 596] [ 808 639 804 471 394 904 952 75 289 778 ] ... [ 484 216 622 139 75 20 20 20 28 28 139 139Lisp | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Ominaisuudet |
| ||||||||||||||
Toteutukset |
| ||||||||||||||
Laitteisto |
| ||||||||||||||
Yhteisö |
| ||||||||||||||
|
Ohjelmointikielet | |
---|---|
|