პროგრამირების ენების სამყაროში ახალი დაინტერესება გაჩნდა 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 Type | Glojure Type | Notes |
|---|---|---|
| long | int64 | |
| double | float64 | |
| float | float32 | |
| byte | byte | Note that Go bytes are unsigned, whereas JVM bytes are signed. |
| short | int16 | |
| int | int | Note that JVM ints are 32-bit, whereas Go ints are 32- or 64-bit depending on the platform. |
| char | lang.Char | The Glojure type is a tagged rune (type Char rune). JVM chars are 16-bit whereas Go runes are 32-bit. |
| BigInt | *lang.BigInt | The Glojure type wraps *big.Int. |
| BigDecimal | *lang.BigDecimal | The Glojure type wraps *big.Float. |
| Ratio | *lang.Ratio | The Glojure type wraps *big.Rat. |
| BigInteger | *big.Int | Native JVM BigInteger corresponds to *big.Int. |
Glojure-ის ინსტალაცია მოითხოვს Go 1.24 ან უფრო ახალ ვერსიას. პროექტის მიზანია, შეინარჩუნოს ბალანსი Go-ს მაღალ წარმადობასა და Clojure-ის ექსპრესიულ სინტაქსს შორის, რაც მას საინტერესო ალტერნატივად აქცევს თანამედროვე პროგრამული უზრუნველყოფის არქიტექტორებისთვის.
| Aspect | Glojure | Joker | let-go |
|---|---|---|---|
| Hosted1 | Yes | No | No |
| Extensible Go interop | Yes | No | No |
| Concurrency | Yes | Yes (with GIL) | Yes |
| Clojure tooling (e.g. linter) | No | Yes | No |
| Execution | Tree-walk interpreter | Tree-walk interpreter | Bytecode Interpreter |



დისკუსია
0 კომენტარი
ჯერ კომენტარი არ არის — იყავი პირველი.