V забони барномасозӣ манбаи кушода

Тарҷума шудааст ба категорияи компилятори кушода барои забони В. V забони статикӣ чопшудаи мошинист, ки ба осон кардани нигоҳдории рушд ва хеле зуд тартиб додани таҳия тамаркуз мекунад. Рамзи компилятор, китобхонаҳо ва асбобҳои марбут кушодан таҳти иҷозатномаи MIT.

Синтаксиси V ба Go хеле монанд аст, ки баъзе конструксияҳоро аз Oberon, Rust ва Swift гирифтааст. Забон то ҳадди имкон содда карда шудааст ва ба гуфтаи таҳиягар, 30 дақиқаи омӯзиш барои омӯхтани асосҳо кифоя аст. хуччатхо. Дар айни замон, забон хеле пурқувват боқӣ мемонад ва метавонад барои иҷрои ҳамон вазифаҳое, ки ҳангоми истифодаи забонҳои дигари барномасозӣ истифода мешавад (масалан, китобхонаҳо барои графикаи 2D/3D, эҷоди GUI ва барномаҳои веб дастрасанд).

Эҷоди забони нав бо хоҳиши ноил шудан ба омезиши соддагии синтаксиси забони Go, суръати тартибдиҳӣ, осонии параллелизатсияи амалиётҳо, интиқолпазирӣ ва нигоҳдории код бо иҷрои C/C++, амнияти Rust ва тавлиди рамзи мошин дар марҳилаи таҳияи Zig. Ман инчунин мехостам компилятори паймон ва зудро гирам, ки метавонад бидуни вобастагии беруна кор кунад, аз миқёси глобалӣ (тағйирёбандаҳои глобалӣ) халос шавад ва қобилияти дубора боркунии кодро "гарм" таъмин кунад.

Дар муқоиса бо C++, забони нав ба таври қобили мулоҳиза соддатар аст, суръати тезтар тартиб доданро таъмин мекунад (то 400 маротиба), усулҳои барномасозии бехатарро истифода мебарад, аз мушкилот бо рафтори номуайян озод аст ва асбобҳои дарунсохтро барои параллелизатсияи амалиёт таъмин мекунад. Дар муқоиса бо Python, V тезтар, соддатар, бехатартар ва нигоҳдорӣ бештар аст. Дар муқоиса бо Go, V тағирёбандаҳои глобалӣ надорад, нулҳо надоранд, ҳама арзишҳои тағирёбанда бояд ҳамеша муайян карда шаванд, ҳама объектҳо бо нобаёнӣ тағирнопазиранд, танҳо як намуди таъинот дастгирӣ карда мешавад (“a := 0”), хеле зичтар вақти кор ва андозаи файлҳои иҷрошавандаи натиҷа, мавҷудияти интиқоли мустақим аз C, набудани коллектори партовҳо, сериализатсияи тезтар, қобилияти интерполятсияи сатрҳо («println('$foo: $bar.baz')").

fn main() {
минтақаҳо := ['бозӣ', 'веб', 'асбобҳо', 'илм', 'системаҳо', 'GUI', 'мобилӣ'] а:= 10
агар рост бошад {
а:= 20
}
барои минтақа дар минтақаҳо {
println('Салом, таҳиягарони $area!')
}
}

Хусусиятҳои лоиҳа:

  • Компилятори паймон ва зуд, ки дар якҷоягӣ бо китобхонаи стандартӣ тақрибан 400 КБ-ро мегирад. Суръати баланди тартибдиҳӣ тавассути тавлиди мустақими коди мошин ва модулият ба даст оварда мешавад. Суръати тартибдиҳӣ тақрибан 1.2 миллион сатри код дар як сония дар як ядрои CPU аст (қайд карда мешавад, ки дар вақти кор V метавонад C-ро истифода барад, пас суръат то 100 ҳазор сатр дар як сония коҳиш меёбад). Худмонтажкунии компилятор, ки он низ бо забони V навишта шудааст (дар Go нусхаи истинод низ мавҷуд аст), тақрибан 0.4 сонияро мегирад. То охири сол анҷом додани корҳо оид ба оптимизатсияи иловагӣ дар назар аст, ки вақти сохтани компиляторро то 0.15 сония коҳиш медиҳад. Мувофиқи санҷишҳои таҳиякунанда, худмонтажкунии Go 512 МБ фазои дискро талаб мекунад ва дар якуним дақиқа кор мекунад, Rust 30 ГБ ва 45 дақиқа, GCC - 8 ГБ ва 50 дақиқа, Clang - 90 ГБ ва 25 дақиқа,
    Swift - 70 ГБ ва 90 дақиқа;

  • Барномаҳо ба файлҳои иҷрошаванда бидуни вобастагии беруна тартиб дода мешаванд. Андозаи файли иҷрошавандаи сервери http-и оддӣ пас аз васлкунӣ ҳамагӣ 65 КБ аст;
  • Иҷрои барномаҳои тартибдодашуда дар сатҳи ассамблеяҳои барномаҳои C мебошад;
  • Қобилияти муоширати бефосила бо рамзи C, бидуни хароҷоти иловагӣ. Функсияҳоро дар забони Си аз коди забони V даъват кардан мумкин аст ва баръакс, кодро дар забони V метавон бо ҳар забоне, ки бо С мувофиқ бошад, даъват кард;
  • Дастгирии тарҷумаи лоиҳаҳои C/C++ ба намояндагӣ бо забони V. Барои тарҷума як таҳлилгари Clang истифода мешавад. Ҳанӯз на ҳама хусусиятҳои стандарти C дастгирӣ карда мешаванд, аммо қобилиятҳои ҷории тарҷумон аллакай кофӣ мебошанд тарҷума ба забони бозии V DOOM. Тарҷумони C++ ҳанӯз дар марҳилаи аввали рушд қарор дорад;
  • Дастгирии сериализатсияи дарунсохт бидуни пайвастшавӣ ба вақти корӣ;
  • Кам кардани амалиёти тақсимоти хотира;
  • Таъмини бехатарӣ: нест NULL, тағирёбандаҳои глобалӣ, арзишҳои номуайян ва таърифи тағирёбанда. Санҷиши барзиёдии буфери дарунсохт. Дастгирии функсияҳои умумӣ (Генерикӣ). Объектҳо ва сохторҳое, ки бо нобаёнӣ тағир дода намешаванд;
  • Имконияти дубора боркунии коди "гарм" (инъикос кардани тағирот дар код дар парвоз бидуни такрор);
  • Воситаҳо барои таъмини чанд ришта. Мисли забони Go, барои оғоз кардани риштаи нави иҷро (монанди "go foo()" сохта ба монанди "run foo()" истифода мешавад. Дар оянда, дастгирии горутинҳо ва нақшаи ришта ба нақша гирифта шудааст;
  • Дастгирии системаҳои оператсионии Windows, macOS, Linux, *BSD. Қарор аст, то охири сол дастгирии Android ва iOS илова карда шавад;
  • Идоракунии хотира дар вақти тартибдиҳӣ (ба мисли Rust), бе истифодаи коллектори партов;
  • Мавҷудияти абзори бисёрплатформа барои баромади графикӣ бо истифода аз GDI+/Cocoa ва OpenGL барои намоиш (дастгирии DirectX, Vulkan ва Metal APIs ба нақша гирифта шудааст). Асбобҳо барои кор бо объектҳои 3D, аниматсияҳои скелетӣ ва назорати камера мавҷуданд;
  • Мавҷудияти китобхона барои тавлиди интерфейсҳои графикӣ бо унсурҳои тарроҳӣ барои ҳар як ОС. Windows аз WinAPI/GDI+, macOS аз Какао ва Linux маҷмӯи виҷетҳои худро истифода мебарад. Китобхона аллакай дар таҳия истифода мешавад Volt — муштарӣ барои Slack, Skype, Gmail, Twitter ва Facebook;

    Нақша ин аст, ки як замимаи тарҳрезии интерфейси ба Delphi монандро эҷод кунад, API-и декларативии шабеҳи SwiftUI ва React Native пешниҳод кунад ва дастгирии эҷоди замимаҳои мобилӣ барои iOS ва Android;

    V забони барномасозӣ манбаи кушода

  • Мавҷудияти чаҳорчӯбаи дарунсохт, ки барои эҷоди вебсайт, форум ва блог барои таҳиягарони лоиҳа истифода мешавад. Тартиби пешакии қолибҳои HTML бидуни коркарди онҳо дар ҳар як дархост дастгирӣ карда мешавад;
  • Дастгирии компиляцияи салиб. Барои сохтани файли иҷрошаванда барои Windows, танҳо "v -os windows" -ро иҷро кунед ва барои Linux - "v -os linux" (дастгирии байниҳамдигарии macOS баъдтар интизор мешавад). Cross-compilation инчунин барои барномаҳои графикӣ кор мекунад;
  • Менеҷери вобастагии дарунсохт, менеҷери бастаҳо ва асбобҳои сохтмон. Барои сохтани барнома, танҳо "v." -ро бидуни истифодаи утилитаҳои сохта ё беруна иҷро кунед. Барои насб кардани китобхонаҳои иловагӣ, танҳо иҷро кунед, масалан, "v get sqlite";
  • Мавҷудияти плагинҳо барои таҳия бо забони V дар муҳаррирҳо Кодекси VS и Сабаби.

Рушд дарк намуд ҷомеа бо скептицизм, зеро коди нашршуда нишон дод, ки хануз на хамаи имкониятхои эълоншуда ба кор андохта шудаанд ва барои ичрои хамаи планхо хачми хеле зиёди кор лозим аст.
Илова бар ин, дар аввал анбор дошт гузошта шудааст рамзи шикаста, ки бо ҷамъоварӣ ва иҷро мушкилот дорад. Тахмин меравад, ки муаллиф ҳанӯз ба марҳалае нарасидааст, ки дар он онҳо пайгирӣ мекунанд Қонуни Парето, ки мувофики он 20 фоизи кувва 80 фоиз ва 80 фоизи бокимонда танхо 20 фоизи хосил медихад.

Дар ҳамин ҳол, пайгирии хатогиҳои Project V тақрибан 10 паёмро аз онҳо хориҷ кардааст намоиш рамзи пастсифат, масалан, истифодаи C-inserts ва истифодаи функсияҳоро дар китобхона барои нест кардани директорияи фармони rm тавассути занги os.system("rm -rf $path") нишон медиҳад. Муаллифи лоиҳа эълон карда шудки ӯ танҳо паёмҳоро нест кардааст, нашр кардааст тролль (бо тағйироте, ки дурустии танқидро тасдиқ мекунанд, монд в таърихи таҳрир).

Манбаъ: opennet.ru

Илова Эзоҳ