Мэдээ

Heap санах ой ч үгүй, GC ч үгүй: Rust болон C++-аас хурдан шинэ системийн хэл "Goose" гарч ирлээ

TOGTOKHTOGTOKH·2026 оны аравдугаар сарын 26·0 үзсэн·
Heap санах ой ч үгүй, GC ч үгүй: Rust болон C++-аас хурдан шинэ системийн хэл "Goose" гарч ирлээ

Системийн програмчлалын ертөнцөд олон арван жилийн турш нэгэн том буулт оршсоор ирсэн. Хэрэв танд дээд зэргийн хурд, техник хангамжийн бүрэн удирдлага хэрэгтэй бол C эсвэл C++ сонгодог боловч segmentation fault, use-after-free зэрэг санах ойн ноцтой алдаануудтай нүүр тулдаг. Харин санах ойн аюулгүй байдлыг хүсвэл Java, Go шиг Garbage Collector (GC)-ийн нэмэлт ачаалалтай эвлэрэх, эсвэл Rust хэлийг сонгож төвөгтэй borrow checker, lifetime тэмдэглэгээнүүдтэй өдөр шөнөгүй тэмцэлдэх хэрэгтэй болдог.

Харин энэхүү уламжлалт ойлголтыг үндсээр нь эргүүлж харахыг зорьсон Goose хэмээх системийн цоо шинэ хэл нээлттэй эхээр нийтийн хүртээл болж, Hacker News болон дэлхийн системийн инженерийн нийгэмлэгийг шуугиулж эхэллээ. Тоглоомын хөдөлгүүр зохиогч, Lobster хэлийг бүтээгч гэдгээрээ танигдсан Воутер ван Оортмерссен (Wouter van Oortmerssen)-ий танилцуулсан энэхүү хэл нь ердөө ганцхан суурь зарчим дээр тогтдог: Энд ямар ч Heap санах ой байхгүй.

"No Heap" буюу Санах ойн өвөрмөц хувьсгал

Ердийн бүх хэл дээр хэмжээ нь динамикаар өөрчлөгддөг массив, стринг, мод хэлбэрийн өгөгдлийн бүтцүүдийг үйлдлийн системийн ерөнхий зориулалттай Heap санах ойд malloc, new зэрэг функцээр хуваарилдаг. Энэ нь ажиллах явцад санах ойн фрагментаци үүсгэж, деструкторуудыг гинжлэн ажиллуулж хугацаа алддаг.

Goose хэл дээр ерөнхий зориулалттай Heap байхгүй. Үүний оронд компилятор нь програмын хувьсагч, массивуудад зориулан хэд хэдэн бие даасан "Data Stack" буюу өгөгдлийн стакуудыг статикаар хуваарилдаг.

Энэхүү шийдлийн онцлогууд:

  1. Бараг тэг (zero-cost) хуваарилалт: Шинэ өгөгдөл нэмэхэд зөвхөн stack pointer-ийг урагшлуулах (pointer bump) ганцхан үйлдэл хийгддэг.
  2. Нүд ирмэхийн зуур чөлөөлөх: Нэг сая элементтэй, гүн салаалсан мод байсан ч scope дуусмагц стак заагчийг анхны байрлалд нь буцааж тавихад (single CPU store) санах ой бүхлээрээ тэр дороо чөлөөлөгдөнө. Энд ямар ч recursive traversal, reference count, деструктор дуудах шаардлагагүй.
  3. Байрнаасаа хэзээ ч хөдлөхгүй (Nothing ever moves): C++-ийн std::vector эсвэл Rust-ийн Vec-д шинэ өгөгдөл нэмэхэд багтаамж дуусвал санах ойн өөр байрлал руу бүх элементээ хуулж зөөдөг тул заагчууд хүчингүй болдог (pointer invalidation). Харин Goose-ийн стак архитектурт массив томорсон ч түүний өмнөх элементүүд болон заагчууд бат бөх, хүчинтэй хэвээр үлддэг.

Бенчмарк: Safe Rust болон C++-аас үнэхээр хурдан гэж үү?

Төслийн багаас нийтэлсэн 16 томоохон бенчмаркийн үр дүнгээс харахад Goose нь:

  • Ердийн идиоматик C++-аас 3.3 дахин хурдан,
  • Гар аргаар туйлд нь хүртэл оновчилсон C++-аас 1.16 дахин хурдан,
  • Санах ойн хувьд хамгийн найдвартай гэгддэг Rust (safe Rust)-ийн шилдэг шийдлээс 1.12–1.19 дахин илүү хурдтай ажилласан байна.

Үүнээс гадна оргил санах ойн хэрэглээгээрээ C++ болон Rust-ээс 1.2–1.9 дахин бага санах ой зарцуулж байгаа нь батлагджээ. Үүний нууц нь CPU-ийн Cache Locality буюу өгөгдөл санах ойн стак дээр дараалж байрладагт болон pointer chasing (санах ойн өөр өөр хаяг дамжин хайх) зардал бараг гардаггүйд оршиж байна.

Жон Кармакийн үнэлгээ ба AI-аар бичигдсэн 30,000 мөр код

Энэхүү хэлний сонирхолтой бас нэгэн тал нь бүтээгдсэн түүх юм. Зохиогч Воутер уг архитектурын концепцийг хэдэн жилийн өмнө бодож олсон ч, тоглоомын стартапаа удирдаж байсан тул дуусгах цаг зав гарахгүй байжээ. Харин тэрээр энэ удаад архитектурын дүрэм, синтакс, хэлний стандартыг өөрөө төлөвлөж, харин 30,000 мөр бүхий C++ компилятор, тестүүд, бенчмаркуудыг Claude AI-тай хамтран маш богино хугацаанд бодит биелэл болгосон байна. Энэ нь AI агентууд зөвхөн энгийн вэб биш, системийн нарийн төвөгтэй компилятор бүтээхэд архитекторын гарт хэр хүчирхэг багаж болж чаддагийн бодит нотолгоо болов.

Домогт Doom, Quake-ийг бүтээгч инженер Жон Кармак (John Carmack) ч уг төслийг анхааран үзэж, Goose-ийн олон тооны өгөгдлийн стак ашиглах арга болон харьцангуй заагч (relative references)-ийн шийдлийг онцлон үнэлжээ.

Хязгаарлалт ба сул талууд (Trade-offs)

Мэдээж "үнэгүй өдрийн хоол" гэж байдаггүй. Goose хэл нь ийм өндөр хурд, аюулгүй байдлыг бий болгохын тулд зарим уян хатан байдлаа золиосолсон:

  • Цикл бүтэц бүхий граф (Cyclic graph) хадгалахад төвөгтэй: Санах ойн амьдрах хугацаа (lifetime) нь стакийн хүрээнд 100% захирагддаг тул дурын цэгээс дурын хугацаанд дуудагдах динамик хамаарлуудыг зохион байгуулахад програмчлалын сэтгэлгээгээ өөрчлөх шаардлагатай болно.
  • Экосистем, сангийн дутагдал: Одоогоор С хэл рүү хөрвүүлэгддэг (transpile to C) бүрэн компилятортой ч Rust шиг олон арван мянган бэлэн crates байхгүй.

Гэсэн хэдий ч тоглоомын логик, физик симуляци, өндөр ачаалалтай сүлжээний серверийн багц боловсруулалт зэрэг эхлэл төгсгөл нь тодорхой, хурд чухал салбаруудад Goose-ийн "No-Heap" философи нь системийн програмчлалын ирээдүйд цоо шинэ хуудас нээж байна.


Эх сурвалж: The Goose Programming Language Official Repository & Documentation (GitHub), Hacker News Community Discussion

Сэтгэгдэл

Ачаалж байна...