A | B | C | D | E | F | G | H | CH | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Paradigma | funkcionální, multiparadigmový |
---|---|
Vznik | 2007 |
Vývojář | Rich Hickey |
První vydání | 2007 |
Poslední verze | 1.9.0 (8. prosince 2017[1]) |
Typová kontrola | dynamické, silné |
Ovlivněn jazyky | Lisp, ML, Haskell, Erlang[2] |
Ovlivnil jazyky | Elixir, Hy, Pixie, Rhine |
OS | Multiplatformní |
Licence | Eclipse Public License |
Web | clojure.org |
Clojure (výslovnost ) je v informatice moderní dialekt programovacího jazyka Lisp. Jedná se o univerzální jazyk podporující funkcionální programování, který se zaměřuje na zjednodušení vývoje vícevláknových aplikací. Clojure používá běhové prostředí JVM nebo CLR, přičemž zastává filozofii kódu, který se chová jako data a implementuje sofistikovaný Lispový makrosystém.
Filozofie
Rich Hickey vyvinul Clojure, protože si přál moderní Lisp spolupracující s rozšířenou platformou Java, který by byl navržen pro vývoj vícevláknových aplikací.[3][4]
Clojure používá pro řízení souběžnosti koncept tzv. identit,[5] který si lze představit jako sérii v čase neměnitelných stavů. Jelikož tyto stavy mají neměnitelné hodnoty, může nad nimi paralelně operovat jakýkoliv počet vláken a řízení souběžnosti se stává otázkou spravování přechodů z jednoho stavu do dalšího. Pro tento účel Clojure poskytuje 4 měnitelné referenční typy, kde každý má jasně definovanou sémantiku pro přechod mezi stavy.
Syntaxe
Jako každý Lisp, syntaxe jazyka Clojure je postavena na s-výrazech, které jsou nejprve rozebrány do datových struktur před tím než jsou zkompilovány. Clojure podporuje literály pro struktury jako seznamy, mapy, množiny a pole, které jsou kompilátoru předány tak jak jsou. Clojure je Lisp-1 a není zamýšleno, aby byl kompatibilní s ostatními dialekty Lispu.
Makra
Makro je konstrukce, které v argumentech předáme S-výrazy, ze kterých je následně sestaven libovolný kód. Poté se tento kód vykoná. Systém maker v Clojuru je velice podobný kódu Common Lispu.
Vlastnosti jazyka
- dynamický vývoj pomocí REPL
- funkce jsou first-class objekty s důrazem na rekurzi namísto smyček vytvářejících postranní efekty
- líně vyhodnocované sekvence
- poskytuje bohatou sadu neměnitelných datových struktur
- souběžné programování pomocí softwarové transakční paměti, agentový systém a dynamický typový systém
- multimetody poskytují dynamické spuštění metod, jejichž konkrétní implementace je vybrána na základě typu předaných parametrů
- jazyk je kompilovaný do JVM bajtkódu
- silná integrace s Javou: kód jazyka Clojure kompilovaný do JVM bajtkódu může být snadno nasazený do běžného prostředí JVM a aplikačních serverů bez dalších potíží; jazyk dále poskytuje makra, která usnadňují použití existujících Java API; jeho struktury implementují standardní rozhraní Javy, což umožňuje spouštět kód napsaný v Clojure z Javy
Příklady
Ahoj světe
(println "Ahoj světe!")
GUI verze
(javax.swing.JOptionPane/showMessageDialog nil "Ahoj světe")
Vláknově bezpečný generátor unikátních sériových čísel
(let
(defn generate-unique-id
"Vrací různá číselná ID pro každé volání."
(swap! i inc)))
Anonymní podtřída java.io.Writer
Tato třída nikam nezapisuje a obsahuje makro, které umlčí všechno vypisování.
(def bit-bucket-writer
(proxy
(write nil)
(close nil)
(flush nil)))
(defmacro noprint
"Vykoná předané výrazy a umlčí všechna vypisování na *out* (standardní výstup)."
`(binding
~@forms))
(noprint
(println "Zdravím nikoho!"))
Vlákna
Následující příklad ukazuje 10 vláken operujících nad společnou datovou strukturou, která se skládá ze 100 vektorů, každý obsahující 10 (zpočátku po sobě jdoucích) unikátních čísel. Každé vlákno vybírá 2 náhodné pozice ve 2 náhodných vektorech a prohazuje je. Všechny změny ve vektorech probíhají v transakcích s použitím softwarové transakční paměti, a proto ani po 100 000 iteracích každého vlákna se neztratí žádné číslo.
(defn run
(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 (distinct (apply concat (map deref vec-refs))))))
(report)
(dorun (apply pcalls (repeat nthreads #(dotimes _ niters (swap)))))
(report)))
(run 100 10 10 100000)
Výstupeditovat | editovat zdroj
(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)
Distinct: 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)
Distinct: 1000
Referenceeditovat | editovat zdroj
- ↑ Central Repository: org/clojure/clojure/1.9.0 online. Rev. 2017-12-08 cit. 2018-02-23. Dostupné online. (anglicky)[nedostupný zdroj
- ↑ HICKEY, Rich. Books that influenced Clojure online. 2009-06-30 cit. 2018-02-23. Dostupné online. (anglicky)
- ↑ Clojure - Rationale online. Rich Hickey, 2018-02-21 cit. 2018-02-23. Dostupné online. (anglicky)
- ↑ Charles. Expert to Expert: Rich Hickey and Brian Beckman - Inside Clojure online. Microsoft, 2009-10-06 cit. 2018-02-23. (Channel 9. Going Deep). Dostupné online. (anglicky)
- ↑ Clojure - Values and Change: Clojure‘s approach to Identity and State online. Rich Hickey, 2018-02-21 cit. 2018-02-23. Dostupné online. (anglicky)
Literaturaeditovat | editovat zdroj
- HALLOWAY, Stuart. Programming Clojure. 1. vyd. s.l.: Pragmatic Bookshelf, May 28, 2009. Dostupné online. ISBN 1934356336. S. 304.
- VANDERHART, Luke. Practical Clojure. 1. vyd. s.l.: Apress, 31. prosince 2009. Dostupné online. ISBN 1430272317. S. 350.
- RATHORE, Amit. Clojure in Action. 1. vyd. s.l.: Manning, prosinec 2009. Dostupné online. ISBN 9781935182597. S. 475.
- FOGUS, Michael; HOUSER, Chris. The Joy of Clojure. 1. vyd. s.l.: Manning, leden 2010. Dostupné online. ISBN 9781935182641. S. 300.
Externí odkazyeditovat | editovat zdroj
- Obrázky, zvuky či videa k tématu Clojure na Wikimedia Commons
- (anglicky) GitHub repozitář pro Clojure
- (anglicky) Velká recenze Clojure
- (anglicky) Full Disclojure – Screencast
Text je dostupný za podmienok Creative Commons Attribution/Share-Alike License 3.0 Unported; prípadne za ďalších podmienok. Podrobnejšie informácie nájdete na stránke Podmienky použitia.
Antény
Chemické zdroje elektriny
Chladenie v elektrotechnike
Elektrická sústava automobilu
Elektrická trakcia
Elektrické prístroje
Elektrické súčiastky
Elektrické spotrebiče
Elektrické stroje
Čítanie (elektrotechnika)
Činný výkon
Štatistická dynamika
Živý vodič
Admitancia
Antiparalelné zapojenie
Asynchrónny motor
Blúdivý prúd
Bočník (elektrotechnika)
Diak (polovodičový prvok)
Displej s kvapalnými kryštálmi
Elektrická inštalácia
Elektrická rezonancia
Elektrická sila
Elektrická vodivosť
Elektrické zariadenie
Elektrický obvod
Elektrický zvonec
Elektroenergetika
Elektromer
Elektrometer
Elektromobil
Elektromotor
Elektromotorické napätie
Elektrotechnický náučný slovník
Elektrotechnika
Elektrotechnológia
Fázor
Faradayova klietka
Frekvencia (fyzika)
Graetzov mostík
Impedancia
Indukčnosť
Induktancia
Istič
Izolácia (elektrotechnika)
Izolant
Jadro vodiča
Jednobran
Jednosmerný prúd
Joulovo teplo
Katóda
Koaxiálny kábel
Kompenzácia účinníka
Konduktometria
Konektor (elektrotechnika)
Korónový výboj
Lanko (elektrotechnika)
Leptanie
Logické hradlo
Magnetická susceptibilita
Magnetizácia (veličina)
Merný elektrický odpor
Mobilné zariadenie
Napájací zdroj
Napäťový chránič
Napäťový násobič
Nortonova veta
Odpínač
Odpojovač
OLED
Olovený akumulátor
Paralelné zapojenie
Peltierov článok
Plošná hustota elektrického prúdu
Poistka (elektrotechnika)
Posuvný prúd
Prúdový chránič
Prenosové médium
Prieletový klystrón
Primárny elektrochemický článok
Reaktancia
Rekuperácia (dopravný prostriedok)
Relé
Reproduktorová výhybka
Rezistancia
Rozhranie (interface)
Sériové zapojenie
Seebeckov jav
Sekundárny elektrochemický článok
Settopbox
Skrat
Sonar
Spínač
Spínaný zdroj
Straty v mikropásikových vedeniach
Striedavý prúd
Stupeň ochrany krytom
Svetelná výbojka
Symetrizačný člen
Technická normalizácia
Tepelné relé
Tepelne vodivostný detektor
Termočlánok
Théveninova veta
Transformátor
Transformátor s fázovou reguláciou
Trojfázová sústava
Tuhá fáza (elektronika)
Tyratrón
Usmerňovač (elektrotechnika)
Uzemnenie
Uzol (vodiče)
Vírivý prúd
Výbojka
Varistor
Ventilátor
Vodič (elektrotechnika)
Voltov stĺp
Vstavaný systém
Zásuvka (elektrotechnika)
Zdroj (elektrotechnika)
Zisk antény
Text je dostupný za podmienok Creative
Commons Attribution/Share-Alike License 3.0 Unported; prípadne za ďalších
podmienok.
Podrobnejšie informácie nájdete na stránke Podmienky
použitia.
www.astronomia.sk | www.biologia.sk | www.botanika.sk | www.dejiny.sk | www.economy.sk | www.elektrotechnika.sk | www.estetika.sk | www.farmakologia.sk | www.filozofia.sk | Fyzika | www.futurologia.sk | www.genetika.sk | www.chemia.sk | www.lingvistika.sk | www.politologia.sk | www.psychologia.sk | www.sexuologia.sk | www.sociologia.sk | www.veda.sk I www.zoologia.sk