Clojure

მასალა ვიკიპედიიდან — თავისუფალი ენციკლოპედია
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, და მისი მიზანი არ არის რომ წყარო კოდი შეთავსებადი იყოს სხვა ლისპ დიალექტებთან.

მაგალითები[რედაქტირება | წყაროს რედაქტირება]

Hello world:

(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!"))

სქოლიო[რედაქტირება | წყაროს რედაქტირება]

რესურსები ინტერნეტში[რედაქტირება | წყაროს რედაქტირება]

მოძიებულია „https://ka.wikipedia.org/w/index.php?title=Clojure&oldid=4525684“-დან