V dasturlash tili ochiq manba

Tarjima qilingan uchun ochiq kompilyator toifasiga kiradi til V. V - bu statik tarzda terilgan mashinada kompilyatsiya qilingan til bo'lib, u rivojlanishni saqlashni osonlashtirishga va kompilyatsiya qilishni juda tez qilishga qaratilgan. Kompilyator kodi, kutubxonalar va tegishli vositalar ochiq MIT litsenziyasi ostida.

V ning sintaksisi Oberon, Rust va Swift-dan ba'zi konstruktsiyalarni olgan Go'ga juda o'xshaydi. Til imkon qadar soddalashtirilgan va ishlab chiquvchining fikriga ko'ra, asoslarni o'rganish uchun 30 daqiqa o'qish kifoya qiladi. hujjatlar. Shu bilan birga, til juda kuchli bo'lib qolmoqda va boshqa dasturlash tillaridan foydalanganda bir xil vazifalarni bajarish uchun ishlatilishi mumkin (masalan, kutubxonalar 2D/3D grafikalar, GUI va veb-ilovalarni yaratish uchun mavjud).

Yangi tilning yaratilishiga Go tilining sintaksisning soddaligi, kompilyatsiya tezligi, operatsiyalarni parallellashtirish qulayligi, C/C++ ishlashi bilan kodning koβ€˜chma va barqarorligi, Rust xavfsizligi va Zig kompilyatsiya bosqichida mashina kodini yaratish. Shuningdek, men tashqi bog'liqliklarsiz ishlaydigan, global miqyosdan (global o'zgaruvchilar) xalos bo'ladigan va kodni "issiq" qayta yuklash qobiliyatini ta'minlaydigan ixcham va tezkor kompilyatorni olishni xohladim.

C++ bilan solishtirganda, yangi til sezilarli darajada sodda, kompilyatsiya tezligini (400 martagacha) ta'minlaydi, xavfsiz dasturlash usullarini qo'llaydi, aniqlanmagan xatti-harakatlar bilan bog'liq muammolardan xoli va operatsiyalarni parallellashtirish uchun o'rnatilgan vositalarni taqdim etadi. Python bilan solishtirganda, V tezroq, sodda, xavfsizroq va texnik xizmat ko'rsatish mumkin. Go bilan solishtirganda, V global o'zgaruvchilarga ega emas, nulllar yo'q, barcha o'zgaruvchilar qiymatlari har doim aniqlanishi kerak, barcha ob'ektlar sukut bo'yicha o'zgarmasdir, faqat bitta turdagi tayinlash qo'llab-quvvatlanadi ("a := 0"), sezilarli darajada ixchamroq. ish vaqti va natijada paydo bo'ladigan bajariladigan fayllar hajmi, C dan to'g'ridan-to'g'ri ko'chirish imkoniyati mavjudligi, axlat yig'uvchining yo'qligi, tezroq seriyalash, satrlarni interpolyatsiya qilish qobiliyati (β€œprintln('$foo: $bar.baz')").

fn main() {
hududlar := ['o'yin', 'veb', 'asboblar', 'fan', 'tizimlar', 'GUI', 'mobil'] a := 10
agar rost bo'lsa {
ga := 20
}
hududlardagi maydon uchun {
println('Salom, $area dasturchilari!')
}
}

Loyihaning xususiyatlari:

  • Standart kutubxona bilan birgalikda 400 KB ga yaqin joyni egallagan ixcham va tezkor kompilyator. Yuqori kompilyatsiya tezligiga to'g'ridan-to'g'ri mashina kodini yaratish va modullilik orqali erishiladi. Kompilyatsiya tezligi bir protsessor yadrosida sekundiga taxminan 1.2 million satr kodni tashkil qiladi (ta'kidlanishicha, V ish paytida C dan foydalanishi mumkin, keyin tezlik sekundiga 100 ming qatorga tushadi). V tilida ham yozilgan kompilyatorni o'z-o'zini yig'ish (Go-da mos yozuvlar versiyasi ham mavjud) taxminan 0.4 soniyani oladi. Yil oxirigacha qo'shimcha optimallashtirish bo'yicha ishlar yakunlanishi kutilmoqda, bu esa kompilyatorni qurish vaqtini 0.15 soniyagacha qisqartiradi. Ishlab chiquvchi tomonidan o'tkazilgan testlarga ko'ra, Go-ni o'z-o'zini yig'ish uchun 512 MB disk maydoni talab qilinadi va bir yarim daqiqada ishlaydi, Rust uchun 30 GB va 45 daqiqa, GCC - 8 GB va 50 daqiqa, Clang - 90 GB va 25 daqiqa,
    Swift - 70 GB va 90 daqiqa;

  • Dasturlar tashqi bog'liqliklarsiz bajariladigan fayllarga kompilyatsiya qilinadi. Yig'ishdan so'ng oddiy http serverining bajariladigan fayl hajmi atigi 65 KB;
  • Kompilyatsiya qilingan ilovalarning ishlashi C dasturlari yig'ilishlari darajasida;
  • Qo'shimcha xarajatlarsiz C kodi bilan uzluksiz ishlash imkoniyati. Si tilidagi funksiyalarni V tilidagi koddan chaqirish mumkin va aksincha, V tilidagi kodni C tiliga mos keladigan istalgan tilda chaqirish mumkin;
  • C/C++ loyihalarini V tilidagi vakillikka tarjima qilishni qoβ€˜llab-quvvatlash.Tarjima uchun Clang’dan tahlilchi ishlatiladi. Hali C standartining barcha xususiyatlari qo'llab-quvvatlanmaydi, ammo tarjimonning hozirgi imkoniyatlari allaqachon etarli tarjima DOOM V o'yini tilida. C++ tarjimoni hali rivojlanishning dastlabki bosqichida;
  • Ish vaqtiga bog'lanmagan holda o'rnatilgan ketma-ketlashtirishni qo'llab-quvvatlash;
  • Xotirani ajratish operatsiyalarini minimallashtirish;
  • Xavfsizlikni ta'minlash: NULL yo'q, global o'zgaruvchilar, aniqlanmagan qiymatlar va o'zgaruvchilarni qayta aniqlash. O'rnatilgan buferning haddan tashqari yuklanishini tekshirish. Umumiy funktsiyalarni qo'llab-quvvatlash (Umumiy). Sukut bo'yicha o'zgartirib bo'lmaydigan ob'ektlar va tuzilmalar;
  • "Issiq" kodni qayta yuklash imkoniyati (qayta kompilyatsiya qilmasdan tezda koddagi o'zgarishlarni aks ettiradi);
  • Ko'p ish zarralarini ta'minlash uchun vositalar. Xuddi Go tilida bo'lgani kabi, "run foo()" kabi konstruktsiya yangi ijro chizig'ini boshlash uchun ishlatiladi ("go foo()" ga o'xshash). Kelajakda gorutinlar va iplarni rejalashtiruvchini qo'llab-quvvatlash rejalashtirilgan;
  • Windows, macOS, Linux, *BSD operatsion tizimlarini qo'llab-quvvatlash. Yil oxirigacha Android va iOS uchun qo'llab-quvvatlashni qo'shish rejalashtirilgan;
  • Xotirani kompilyatsiya vaqtida boshqarish (Rust-da bo'lgani kabi), axlat yig'uvchidan foydalanmasdan;
  • Renderlash uchun GDI+/Kakao va OpenGL-dan foydalangan holda grafik chiqish uchun ko'p platformali asboblar to'plamining mavjudligi (DirectX, Vulkan va Metal API-larni qo'llab-quvvatlash rejalashtirilgan). 3D ob'ektlar bilan ishlash, skelet animatsiyasi va kamerani boshqarish vositalari mavjud;
  • Har bir OT uchun xos dizayn elementlari bilan grafik interfeyslarni yaratish uchun kutubxonaning mavjudligi. Windows-da WinAPI/GDI+, macOS-da Kakao-dan, Linux-da esa o'z vidjetlari to'plamidan foydalaniladi. Kutubxona allaqachon ishlab chiqilmoqda Volt β€” Slack, Skype, Gmail, Twitter va Facebook uchun mijoz;

    Reja Delphi-ga o'xshash interfeys dizayni ilovasini yaratish, SwiftUI va React Native-ga o'xshash deklarativ API taqdim etish va iOS va Android uchun mobil ilovalarni yaratishni qo'llab-quvvatlashdan iborat;

    V dasturlash tili ochiq manba

  • Loyihani ishlab chiquvchilar uchun veb-sayt, forum va blog yaratish uchun foydalaniladigan o'rnatilgan veb-ramkaning mavjudligi. HTML shablonlarini har bir so'rov bo'yicha qayta ishlamasdan oldindan kompilyatsiya qilish qo'llab-quvvatlanadi;
  • O'zaro kompilyatsiyani qo'llab-quvvatlash. Windows uchun bajariladigan faylni yaratish uchun "v -os windows" ni, Linux uchun esa "v -os linux" ni ishga tushiring (keyinroq macOS uchun o'zaro kompilyatsiya yordami kutiladi). O'zaro kompilyatsiya grafik ilovalar uchun ham ishlaydi;
  • O'rnatilgan qaramlik menejeri, paketlar menejeri va qurish vositalari. Dasturni yaratish uchun make yoki tashqi yordamchi dasturlardan foydalanmasdan β€œv.” ni ishga tushirish kifoya. Qo'shimcha kutubxonalarni o'rnatish uchun, masalan, "v get sqlite" ni ishga tushiring;
  • Tahrirlovchilarda V tilida ishlab chiqish uchun plaginlarning mavjudligi VS kodi ΠΈ Vim.

Rivojlanish idrok etilgan bilan hamjamiyat skeptitsizm, chunki nashr etilgan kod barcha e'lon qilingan imkoniyatlar hali amalga oshirilmaganligini va barcha rejalarni amalga oshirish uchun juda katta hajmdagi ish talab qilinishini ko'rsatdi.
Bundan tashqari, dastlab ombor mavjud edi joylashtirilgan yig'ish va bajarish bilan bog'liq muammolarga ega buzilgan kod. Muallif hali ular sezishni boshlaydigan bosqichga etib bormagan deb taxmin qilinadi Pareto qonuni, unga ko'ra 20% harakat natijaning 80% ni, qolgan 80% kuch esa faqat 20% natijani beradi.

Shu bilan birga, Project V xato kuzatuvchisida 10 ga yaqin postlar olib tashlandi namoyish past sifatli kod, masalan, C-qo'shimchalardan foydalanishni va os.system("rm -rf $path") chaqiruvi orqali rm buyrug'i katalogini o'chirish uchun funktsiyalar kutubxonasida foydalanishni ko'rsatadi. Loyiha muallifi e'lon qildiu faqat xabarlarni o'chirib tashlaganini, nashr etildi troll (tanqidning asosliligini tasdiqlovchi o'zgartirishlar bilan, qoldi Π² tarixini tahrirlash).

Manba: opennet.ru

a Izoh qo'shish