Clojure
პარადიგმა | ფუნქციური, მრავალპარადიგმული |
---|---|
გამოქვეყნების თარიღი | 2007 |
შემქნელი | რიჩ ჰიკეი |
სტაბილური ვერსია | 1.3 (23/09/2011) |
ბოლო ვერსია | 3.1 |
ტიპის მინიჭების დისციპლინა | ძლიერი, დინამიური |
ენების ზეგავლენით | ქომონ ლისპი, სქემე, პროლოგი, ML, ჰასკელი, ერლანგი[1] |
პლატფორმა | JVM, CLR |
ლიცენზია | Eclipse Public License |
საიტი | http://clojure.org |
Clojure (გამოითქმის როგორც "closure"[2]) არის ლისპისნაირი პროგრამირების ენის თანამედროვე დიალექტი, შექმნილია რიჩ ჰიკეის მიერ. იგი არის საერთო დანიშნულების პროგრამირების ენა, ინტერაქტიული პროგრამირების მხარდაჭერით, უბიძგებს ფუნქციური პროგრამირება სტილის გამოყენებას, და აადვილებს მრავალსრედიან პროგრამირებას.
Clojure-ი ფუნქციონირენს Java Virtual Machine-ზე, Common Language Runtime-ზე და აგრეთვე შესაძლოა მისი ჯავასკრიპტში გადაყვანა. როგორც სხვა ლისპისნაირი ენები, Clojure-ი ამუშავებს კოდს მონაცემებისნაირად და აქვს ძლიერი მაკრო სისტემა.
ისტორია
[რედაქტირება | წყაროს რედაქტირება]რიჩ ჰიკეი არის Clojure პროგრამირების ენის შემქნელი. Clojure-ამდე მან შექმნა dotLisp-ი, მსგავსი პროექტი რომელიც იყენებდა .NET პლატფორმას. ჰიკეი არის პირადი პროგრამისტი და კონსულტანტი 20 წლის გამოცდილობით. Clojure-ის შექმნას მოანდომა 2½ წელი, მან ეს სპონსორის გარეშე გააკეთა. როცა მზად იყო, თავისი ნაშრომი მის Common Lisp საზოგადოების ამხანაგებს ელ.წერილით გააცნო.
ფილოსოფია
[რედაქტირება | წყაროს რედაქტირება]ჰიკეიმ Clojure იმიტომ შექმნა რომ მას უნდოდა თანამედროვე ლისპი რომელსაც ექნებოდა ჯავას პლატფორმის მხარდაჭერა, და შექმნილია თანადროული შესრულებისთვის.[3][4]
სინტაქსი
[რედაქტირება | წყაროს რედაქტირება]როგორც სხვა ლისპის ტიპურ ენებში, Clojure-ის სინტაქსი არის დაყრდნობილი S-expression-ებზე რომლებიც არიან სინტატიკურად ანალიზირებულნი მონაცემთა სტრუქტურებში სანამ იგი კომპილირებული იქნება. Clojure-ი არის lisp-1, და მისი მიზანი არ არის რომ წყარო კოდი შეთავსებადი იყოს სხვა ლისპ დიალექტებთან.
მაგალითები
[რედაქტირება | წყაროს რედაქტირება](println "Hello, world!")
ფუნქციის გამოცხადება:
(defn square [x]
(* x x))
Hello World-ი გრაფიკული ინტერფეისით Java Swing ბიბლიოთეკის მეშვეობით:
(javax.swing.JOptionPane/showMessageDialog nil "Hello World" )
დაცული სრედიანი სერიული ნომრების შემქნელი (სხვა ლისპის დიალექტების მსგავსად, Clojure-ს მოყვება gensym
ფუნქცია ამისთვის):
(let [i (atom 0)]
(defn generate-unique-id
"Returns a distinct numeric ID for each call."
[]
(swap! i inc)))
ანონიმური java.io.Writer
-ს ქვეკლასი რომელიც არაფერს არ წერს, და მაკრო რომელიც საბეჭდავ ფუნქციას "უჩინაჩარს" ხდის :
(def bit-bucket-writer
(proxy [java.io.Writer] []
(write [buf] nil)
(close [] nil)
(flush [] nil)))
(defmacro noprint
"Evaluates the given expressions with all printing to *out* silenced."
[& forms]
`(binding [*out* bit-bucket-writer]
~@forms))
(noprint
(println "Hello, nobody!"))
სქოლიო
[რედაქტირება | წყაროს რედაქტირება]რესურსები ინტერნეტში
[რედაქტირება | წყაროს რედაქტირება]- ვიკიწიგნებში არის სტატია: Clojure
- (ინგლისური) Official website
- (ინგლისური) GitHub code repository for Clojure
- (ინგლისური) A comprehensive overview of Clojure დაარქივებული 2011-06-28 საიტზე Wayback Machine.
- (ინგლისური) An overview of Clojure 1.2 in reference format დაარქივებული 2017-04-28 საიტზე Wayback Machine.
- (ინგლისური) Full Disclojure - Screencast
- (ინგლისური) Clojure talks on Blip.tv დაარქივებული 2010-03-16 საიტზე Wayback Machine.
- (ინგლისური) clojuredocs.org - Community-powered documentation and examples
- (ინგლისური) 4clojure.com - Interactive Clojure Problems დაარქივებული 2011-04-24 საიტზე Wayback Machine.
- (ინგლისური) TryClojure - An online REPL for Clojure
|