تصور کنید یک برنامهنویس Go هستید که از سختگیریهای این زبان خسته شده و تشنهی انعطافپذیری زبانهای Lisp است، اما نمیخواهید اکوسیستم فعلی خود را ترک کنید. Glojure دقیقاً همین شکاف را پر میکند و به شما اجازه میدهد یک مفسر کامل Clojure را مستقیماً درون فایلهای باینری Go جایگذاری کنید.
این ابزار با تبدیل Go به زبان میزبان، اجازه میدهد تا سختگیری در عملکرد Go با انعطافپذیری دینامیک Clojure ترکیب شود. همانطور که در تحلیلهای قبلی ما دربارهی زبانهای برنامهنویسی مدرن اشاره کردیم، نیاز به پیکربندیهای اسکریپتی و پلاگینهای گسترشپذیر در اپلیکیشنهای صنعتی رو به افزایش است. برخلاف نسخههای مشابه، Glojure یک زبان «میزبان» است؛ یعنی صرفاً از Clojure تقلید نمیکند، بلکه سیستم مقادیر آن را مستقیماً با تایپهای Go ادغام میکند.
به نقل از مخزن رسمی گیتهاب، در ۱۷ ژوئن ۲۰۲۶ نسخهی v0.3.0 این ابزار برای پلتفرمهای پشتیبانیکننده از Go 1.24 عرضه شد. قابلیتهای فنی کلیدی این نسخه عبارتند از:
- تعامل با کتابخانههای استاندارد: دسترسی مستقیم به بستههایی مثل
net/httpوos/execبا استفاده از قرارداد نامگذاری مبتنی بر دونقطه (مثلاًnet:http.ListenAndServe). - اجرای دوحالته: عمل به عنوان یک ابزار خط فرمان مستقل (
glj) با REPL کامل و همچنین به عنوان یک کتابخانه قابل جاسازی در اپلیکیشنهای Go. - نگاشت تایپها: تبدیل مقادیر long در Clojure به
int64و مقادیر double بهfloat64در Go، در حالی که برای پشتیبانی از BigInteger از*big.Intاستفاده میکند.

بر اساس مستندات این پروژه، شما اکنون میتوانید یک بکاند با عملکرد بالا در Go توسعه دهید که به کاربران اجازه میدهد بدون نیاز به کامپایل مجدد کل برنامه، اسکریپتهای Clojure را برای تغییر رفتار سیستم آپلود کنند. این رویکرد، Go را به پلتفرمی برای اسکریپتنویسی مبتنی بر Lisp تبدیل میکند و فاصله میان مهندسی سطح سیستم و نمونهسازی سریع را میگیرد.
گام بعدی شما
- اگر به دنبال افزودن قابلیت اسکریپتنویسی به پروژههای Go هستید، آخرین بیلد را با دستور
go install github.com/glojurelang/glojure/cmd/glj@latestنصب کنید. - توجه داشته باشید که این پروژه در مراحل اولیه توسعه است و تا نسخهی v1 تضمینی برای سازگاری عقبرو (Backwards Compatibility) وجود ندارد.
- مستندات مربوط به نگاشت تایپها را برای جلوگیری از خطاهای Runtime مطالعه کنید.
اما تأثیر این رویکرد بر مدیریت حافظه و GC در زبان Go موضوعی پیچیدهتر است — به بررسی ما دربارهی بهینهسازیهای Runtime در زبانهای سیستمی مراجعه کنید.




گفتگو