პროგრამირების ენების სამყაროში ახალი დაინტერესება გაჩნდა Clojure-ის მიმართ, რომელიც ახლა უკვე Go-ს ეკოსისტემაშია ინტეგრირებული. Glojure წარმოადგენს Clojure-ის ინტერპრეტატორს, რომელიც სრულად არის აგებული Go-ს პლატფორმაზე.

მისი მთავარი უპირატესობა ე.წ. „hosted“ არქიტექტურაა. ეს ნიშნავს, რომ Go-ს მონაცემები და Clojure-ის სტრუქტურები ერთმანეთთან სრულ ჰარმონიაში მუშაობენ. დეველოპერებს შეუძლიათ მარტივად გამოიყენონ Go-ს მდიდარი ბიბლიოთეკები ისევე, როგორც ამას Clojure-ი აკეთებს Java-ს შემთხვევაში.

პროექტი ამჟამად განვითარების ადრეულ ეტაპზეა. ავტორები აფრთხილებენ მომხმარებლებს, რომ შესაძლოა შეხვდნენ შეცდომებს ან შეზღუდულ ფუნქციონალს, თუმცა Glojure უკვე წარმატებით გამოიყენება ჰობის დონის პროექტებში და მუშაობს Clojure-ის ძირითადი ბიბლიოთეკის მნიშვნელოვან ნაწილთან.

როგორ მუშაობს Glojure?

Glojure-ის გამოყენება ორნაირად არის შესაძლებელი: როგორც დამოუკიდებელი ბრძანებების ხაზის ხელსაწყო (glj) ან როგორც Go-ს აპლიკაციებში ჩასმული სკრიპტირების ენა. ეს უკანასკნელი განსაკუთრებით სასარგებლოა იმ დეველოპერებისთვის, რომლებსაც სურთ თავიანთ Go-პროგრამებს დაუმატონ მოქნილი კონფიგურაციის შესაძლებლობა ან დაუშვან პლაგინების შექმნა Clojure-ის ენით.

ძირითადი ფუნქციები და REPL

ინტერაქტიული გარემო (REPL) აღჭურვილია თანამედროვე სტანდარტებით:

  • Vi და Emacs-ის რედაქტირების რეჟიმები;
  • მრავალხაზიანი რედაქტირება ავტომატური დაშორებებით (indentation);
  • Tab-ით ავტომატური შევსება და ისტორიის შენახვა;
  • Job control-ის მხარდაჭერა (Ctrl+Z, Ctrl+C).

ინტეროპერაბელურობა (Interop) Glojure-ის ერთ-ერთი ყველაზე ძლიერი მხარეა. სტანდარტული ბიბლიოთეკების ფართო სპექტრი, როგორიცაა net/http, os ან math, პირდაპირ არის ხელმისაწვდომი. საჭიროების შემთხვევაში, დეველოპერებს შეუძლიათ დაამატონ საკუთარი Go-პაკეტები სპეციალური gen-import-interop ხელსაწყოს გამოყენებით.

Clojure TypeGlojure TypeNotes
longint64
doublefloat64
floatfloat32
bytebyteNote that Go bytes are unsigned, whereas JVM bytes are signed.
shortint16
intintNote that JVM ints are 32-bit, whereas Go ints are 32- or 64-bit depending on the platform.
charlang.CharThe Glojure type is a tagged rune (type Char rune). JVM chars are 16-bit whereas Go runes are 32-bit.
BigInt*lang.BigIntThe Glojure type wraps *big.Int.
BigDecimal*lang.BigDecimalThe Glojure type wraps *big.Float.
Ratio*lang.RatioThe Glojure type wraps *big.Rat.
BigInteger*big.IntNative JVM BigInteger corresponds to *big.Int.

Glojure-ის ინსტალაცია მოითხოვს Go 1.24 ან უფრო ახალ ვერსიას. პროექტის მიზანია, შეინარჩუნოს ბალანსი Go-ს მაღალ წარმადობასა და Clojure-ის ექსპრესიულ სინტაქსს შორის, რაც მას საინტერესო ალტერნატივად აქცევს თანამედროვე პროგრამული უზრუნველყოფის არქიტექტორებისთვის.

AspectGlojureJokerlet-go
Hosted1YesNoNo
Extensible Go interopYesNoNo
ConcurrencyYesYes (with GIL)Yes
Clojure tooling (e.g. linter)NoYesNo
ExecutionTree-walk interpreterTree-walk interpreterBytecode Interpreter