IT

Goose dasturlash tili: C++ va Rust’dan tezroq bo‘lishni va’da qilgan yangi til haqida hamma narsa

Goose — heap, axlat yig‘uvchi (GC) va lifetime annotatsiyalarisiz ishlaydigan yangi tizim tili. Muallif u idiomatik C++ dan 3 baravardan ko‘proq tez deydi. Qanday ishlaydi va sinab ko‘rishga arziydimi.

·3 daqiqa o‘qish
Goose dasturlash tili: C++ va Rust’dan tezroq bo‘lishni va’da qilgan yangi til haqida hamma narsa

So‘nggi haftalarda dasturchilar orasida eng ko‘p muhokama qilinayotgan mavzulardan biri — Goose dasturlash tili. Uni Lobster tili muallifi, tajribali dasturchi Wouter van Oortmerssen yaratgan. Til Apache 2.0 litsenziyasi ostida ochiq kodli, va eng qiziq jihati: muallifning aytishicha, kompilyator kodi deyarli to‘liq sun’iy intellekt yordamida, inson tomonidan ishlab chiqilgan til dizayni asosida yozilgan.

Ko‘pchilik tillarda dinamik ma’lumotlar (massivlar, satrlar) heap’da saqlanadi va ularni boshqarish uchun axlat yig‘uvchi (Java, Go), havolalarni sanash (Swift) yoki lifetime qoidalari (Rust) kerak bo‘ladi. Goose bularning hech birini ishlatmaydi. Hujjatlarga ko‘ra, har bir dinamik qiymat kompilyator boshqaradigan maxsus ma’lumotlar steklarida joylashadi.

  • Har bir stek — katta manzil maydoni (standart holatda 2 GB) va oddiy «bump pointer»
  • Bitta stekda bir vaqtda faqat bitta o‘lchami o‘zgaruvchi qiymat bo‘ladi va u doim eng tepada turadi
  • Massiv kattalashganda faqat ko‘rsatkich suriladi — hech narsa ko‘chirilmaydi
  • Blokdan chiqishda xotirani bo‘shatish — bitta yozish amali

Bu qoidalarga amal qilinishini kompilyator kompilyatsiya vaqtida isbotlaydi, ish vaqtida esa faqat ko‘rsatkichlar kuzatiladi.

Shuningdek o‘qingDiscord Rust'ga o'tdi: yangi ilova 70% kam RAM ishlatadi va tez ishlaydi

Xavfsizlik qanday ta’minlanadi

Har bir havola o‘zining «ildizi» — umrini belgilovchi o‘zgaruvchi bilan bog‘lanadi. Kompilyator ildizlarni o‘zi aniqlaydi va egasidan uzoq yashaydigan havolalarni rad etadi. Rust’dan farqli ravishda dasturchi hech qanday lifetime yozmaydi va unsafe bloklar yo‘q.

Sintaksis namunasi

Goose sintaksisi C’ga o‘xshash va qisqa. Masalan, o‘lchami o‘zgaruvchan ma’lumotli tuzilma shunday e’lon qilinadi: struct Item { sku: u8[varint], qty: varint, cents: varint }. Massivlarning uch turi bor: qat’iy o‘lchamli, faqat kattalashadigan va kattalashib-kichrayadigan.

Tezlik: muallifning raqamlari

Muallif 16 ta benchmark bo‘yicha o‘lchovlarni e’lon qilgan (geometrik o‘rtacha). Ularga ko‘ra Goose:

  • idiomatik C++ dan taxminan 3,3–3,5 baravar tez
  • qo‘lda optimallashtirilgan C++ dan 1,16–1,26 baravar tez
  • eng yaxshi xavfsiz Rust kodidan 1,12–1,19 baravar tez
  • 1,2–1,9 baravar kamroq xotira sarflaydi

Masalan, buyurtma yozuvi Goose’da 29 bayt va 0 ta xotira ajratish bilan saqlanadi, C++ da esa 160 bayt va 1 ta ajratish, Rust’da 153 bayt va 4 ta ajratish kerak bo‘ladi. Shuni yodda tutish kerak: bu muallifning o‘z benchmarklari, mustaqil tekshiruvlar hali kam.

Cheklovlar

  • Rekursiv funksiyalar rekursiv chaqiruv orqali o‘sadigan ma’lumotni saqlay olmaydi
  • Tashqariga chiqadigan closure’lar va funksiya ko‘rsatkichlari yo‘q
  • Faqat butun dasturni bir yo‘la kompilyatsiya qilish
  • Kutubxonalar ekotizimi hali juda kichik

Qanday sinab ko‘rish mumkin

Goose Windows x64, Linux x64 va macOS (Apple Silicon va Intel) uchun tayyor kompilyatorga ega. U kodni bitta C fayliga aylantiradi, shuning uchun C kompilyatori bor har qanday joyda ishlaydi. GitHub’dagi aardappel/goose sahifasidan release’ni yuklab olish, papkani PATH’ga qo‘shish va goose samples/01_tour.goose buyrug‘i bilan namunani ishga tushirish kifoya. Arxivda VS Code kengaytmasi ham bor.

Xulosa

Goose — xotirani boshqarishga butunlay yangi yondashuvni taklif qilayotgan qiziq eksperiment. Yuqori unumdorlik kerak bo‘lgan tizim dasturchilari uchun uni kuzatib borish va sinab ko‘rish foydali. Ammo til hali yangi: ishlab chiqarishda (production) ishlatish uchun mustaqil benchmarklar va kattaroq ekotizimni kutgan ma’qul.

Manba: Goose (aardappel)

O‘xshash maqolalar