Адкрыты зыходныя тэксты мовы праграмавання V

Перакладзены у разрад адкрытых кампілятар для мовы V. V уяўляе сабой кампіляваную ў машынны код мову са статычнай тыпізацыяй, засяроджаны на рашэнні задач па спрашчэнні суправаджэння распрацоўкі і забеспячэнню вельмі высокай хуткасці кампіляцыі. Код кампілятара, бібліятэк і спадарожных інструментаў адкрыты пад ліцэнзіяй MIT.

Сінтаксіс V шмат у чым паходзіць на мову Go з запазычаннем некаторых канструкцый з Oberon, Rust і Swift. Мова максімальна спрошчаны і, па заяве распрацоўніка, для вывучэння базавых асноў дастаткова 30 хвілін на вывучэнне дакументацыі. Пры гэтым мова застаецца дастаткова магутнай і можа прымяняцца для выканання тых жа задач, што і пры выкарыстанні іншых моў праграмавання (напрыклад, даступны бібліятэкі для 2D/3D графікі, стварэння GUI і web-прыкладанняў).

Да стварэння новай мовы заахвоціла жаданне дамагчыся спалучэнні ўласцівых мове Go прастаты сінтаксісу, хуткасці кампіляцыі, прастаты распаралельвання аперацый, пераноснасці і суправаджальнасці кода з прадукцыйнасцю З/C++, абароненасцю Rust і генерацыяй машыннага кода на этапе кампіляцыі Zig. Таксама жадалася атрымаць кампактны і хуткі кампілятар, здольны працаваць без вонкавых залежнасцяў, пазбавіцца ад глабальнай вобласці бачнасці (глабальных зменных) і забяспечыць магчымасць "гарачай" перазагрузкі кода.

У параўнанні з C++ новая мова істотна прасцей, забяспечвае больш высокую хуткасць кампіляцыі (да 400 разоў), практыкуе прыёмы бяспечнага праграмавання, пазбаўлены ад праблем з нявызначанымі паводзінамі і дае ўбудаваныя сродкі для распаралельвання аперацый. У параўнанні з Python мова V хутчэй, прасцей, бяспечней і зручней у суправаджэнні. У параўнанні з Go ў V няма глабальных зменных, няма null, усё значэнні зменных заўсёды абавязкова павінны быць вызначаны, усе аб'екты па змаўчанні з'яўляюцца нязменнымі (immutable), падтрымліваецца толькі адзін выгляд прысваенняў («a := 0»), істотна больш кампактны runtime і памер выніковых выкананых файлаў, наяўнасць прамой пераноснасці з Сі, адсутнасць зборшчыка смецця, хутчэйшая серыялізацыя, магчымасць інтэрпаляцыі радкоў ("println('$foo: $bar.baz')").

fn асноўны() {
areas := ['game', 'web', 'tools', 'science', 'systems', 'GUI', 'mobile'] a := 10
if true {
а := 20
}
for area in areas {
println('Hello, $area developers!')
}
}

Асаблівасці праекта:

  • Кампактны і хуткі кампілятар, які разам са стандартнай бібліятэкай займае каля 400 КБ. Высокая хуткасць кампіляцыі дасягаецца дзякуючы прамой генерацыі машыннага кода і модульнасці. Хуткасць кампіляцыі складае прыкладна 1.2 млн радкоў кода ў секунду на адным ядры CPU (адзначаецца, што падчас прац V можа выкарыстоўваць Сі, тады хуткасць падае да 100 тысяч радкоў у секунду). Самазбор кампілятара, які таксама напісаны на мове V (таксама маецца эталонны варыянт на Go), займае прыкладна 0.4 сек. Да канца года чакаецца завяршэнне працы над дадатковымі аптымізацыямі, якія дазволяць зменшыць час зборкі кампілятара да 0.15 сек. Мяркуючы па праведзеным распрацоўшчыкам тэстах самазбору Go патрабуе 512 Мб дыскавай прасторы і выконваецца за паўтары хвіліны, Rust патрабуе 30 Гб і 45 хвілін, GCC – 8 ГБ і 50 хвілін, Clang – 90 Гб і 25 хвілін,
    Swift – 70 ГБ і 90 хвілін;

  • Праграмы кампілююцца ў выкананыя файлы без вонкавых залежнасцяў. Памер выкананага файла простага http-сервера пасля зборкі складае ўсяго 65 КБ;
  • Прадукцыйнасць скампіляваных прыкладанняў знаходзіцца на ўзроўні зборак праграм на мове Сі;
  • Магчымасць бясшвоўнага ўзаемадзеяння з Сі-кодам, без дадатковых накладных выдаткаў. З кода на мове V могуць выклікацца функцыі на мове Сі і наадварот, код на мове V можа выклікацца ў любых мовах, сумяшчальных з Сі;
  • Падтрымка трансляцыі праектаў на C/C++ ва ўяўленне на мове V. Для трансляцыі выкарыстоўваецца парсер ад Clang. Не ўсе магчымасці стандарту Сі пакуль падтрымліваюцца, але бягучых магчымасцяў транслятара ўжо дастаткова для перакладу на мову V гульні DOOM. Транслятар з C++ пакуль знаходзіцца на пачатковай стадыі развіцця;
  • Убудаваная падтрымка серыялізацыі, без прывязкі да runtime;
  • Мінімізацыя аперацый размеркавання памяці;
  • Забеспячэнне бяспекі: адсутнасць NULL, глабальных зменных, нявызначаных значэнняў і пераазначэнні зменных. Убудаваныя сродкі для праверкі выхаду за межы буфера. Падтрымка абагульненых функцый (Generic). Не змяняюцца па змаўчанні аб'екты і структуры;
  • Магчымасць «гарачай» перазагрузкі кода (адлюстравання змен у кодзе на лета без перакампілявання);
  • Сродкі для забеспячэння шматструменнасці. Як у мове Go для запуску новага струменя выканання выкарыстоўваецца канструкцыя выгляду "run foo()" (па аналогіі з "go foo()"). У будучыні плануецца падтрымка goroutines і планавальніка патокаў;
  • Падтрымка аперацыйных сістэм Windows, macOS, Linux, *BSD. Да канца года плануецца дадаць падтрымку Android і iOS;
  • Упраўленне памяццю на этапе кампіляцыі (як у Rust), без прымянення зборшчыка смецця;
  • Наяўнасць шматплатформеннага тулкіта для вываду графікі, які выкарыстоўвае для адмалёўкі GDI + / Cocoa і OpenGL (у планах падтрымка API DirectX, Vulkan і Metal). Маюцца сродкі для працы з 3D-аб'ектамі, шкілетнай анімацыяй і кіраванні камерай;
  • Наяўнасць бібліятэкі для фармавання графічных інтэрфейсаў з роднымі для кожнай АС элементамі афармлення. У Windows выкарыстоўваецца WinAPI/GDI+, у macOS - Cocoa, у Linux - уласны набор віджэтаў. Бібліятэка ўжо выкарыстоўваецца пры распрацоўцы вольт - кліента для Slack, Skype, Gmail, Twitter і Facebook;

    Плануецца стварэнне падобнага на Delphi прыкладанні для праектавання інтэрфейсу, прадастаўленне дэкларатыўнага API, падобнага на SwiftUI і React Native, і забеспячэнне падтрымай стварэння мабільных прыкладанняў для iOS і Android;

    Адкрыты зыходныя тэксты мовы праграмавання V

  • Наяўнасць убудаванага web-фрэймворка, які выкарыстаны для стварэння сайта, форума і блога распрацоўшчыкаў праекта. Падтрымліваецца перадкампіляцыя HTML-шаблонаў, без іх апрацоўкі пры кожным запыце;
  • Падтрымка крос-кампіляцыі. Для зборкі выкананага файла для Windows досыць запусціць "v -os windows", а для Linux - "v -os linux" (падтрымка крос-кампіляцыі для macOS чакаецца пазней). Крос-кампіляцыя у тым ліку працуе і для графічных прыкладанняў;
  • Убудаваны мэнэджар залежнасцяў, пакетны мэнэджар і інструментар зборкі. Для зборкі праграмы досыць запусціць "v.", без выкарыстання make і вонкавых утыліт. Для ўстаноўкі дадатковых бібліятэк дастаткова выканаць, напрыклад, "v get sqlite";
  • Наяўнасць убудоў для распрацоўкі на мове V у рэдактарах VS Code и напор.

Распрацоўка ўспрынята супольнасцю са скептыцызмам, так як апублікаваны код паказаў, што не ўсе заяўленыя магчымасці пакуль рэалізаваны і для ўвасаблення ўсіх планаў патрабуецца выканаць вельмі вялікі аб'ём працы.
Акрамя таго, першапачаткова ў рэпазітары быў размешчаны непрацуючы код, у якім назіраюцца праблемы са зборкай і выкананнем. Мяркуецца, што аўтар яшчэ не дасягнуў стадыі, на якой пачынаюць заўважаць закон Парэта, У адпаведнасці з якім 20% намаганняў даюць 80% выніку, а астатнія 80% намаганняў - толькі 20% выніку.

Тым часам, у трэкеры памылак праекта V было выдалена каля 10 паведамленняў з дэманстрацыяй нізкай якасці кода, напрыклад, паказана на ўжыванне Сі-уставак і выкарыстанне ў бібліятэцы функцый для выдалення каталога каманды rm праз выклік os.system(«rm -rf $path»). Аўтар праекта заявіў, Што ён толькі выдаліў паведамленні, апублікаваныя тролем (пры гэтым змены, якія пацвярджаюць абгрунтаванасць крытыкі, засталіся в гісторыі правак).

Крыніца: opennet.ru

Дадаць каментар