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', 'բջջային'] a := 10
եթե ճիշտ է {
դեպի := 20
}
տարածքների համար {
println ('Բարև, $area մշակողներ')
}
}

Ծրագրի առանձնահատկությունները.

  • Կոմպակտ և արագ կոմպիլյատոր, որը ստանդարտ գրադարանի հետ միասին զբաղեցնում է մոտ 400 ԿԲ: Կոմպիլյացիայի բարձր արագությունը ձեռք է բերվում մեքենայի կոդի ուղղակի գեներացման և մոդուլյարության շնորհիվ: Կազմման արագությունը կազմում է մոտավորապես 1.2 միլիոն տող կոդ մեկ պրոցեսորի մեկ միջուկի վրա (նշվում է, որ շահագործման ընթացքում V-ն կարող է օգտագործել C-ն, այնուհետև արագությունը նվազում է մինչև 100 հազար տող վայրկյանում): Կոմպիլյատորի ինքնահավաքումը, որը նույնպես գրված է V լեզվով (Գոյում կա նաև հղումային տարբերակ), տևում է մոտավորապես 0.4 վայրկյան։ Մինչեւ տարեվերջ նախատեսվում է ավարտել լրացուցիչ օպտիմալացման աշխատանքները, ինչը կնվազեցնի կոմպիլյատորների ստեղծման ժամանակը մինչև 0.15 վայրկյան: Դատելով ծրագրավորողի կողմից անցկացված թեստերից՝ Go-ի ինքնահավաքումը պահանջում է 512 ՄԲ սկավառակի տարածություն և աշխատում է մեկուկես րոպեում, Rust-ը՝ 30 ԳԲ և 45 րոպե, GCC-ը՝ 8 ԳԲ և 50 րոպե, Clang-ը՝ 90 ԳԲ և 25 րոպե,
    Swift - 70 ԳԲ և 90 րոպե;

  • Ծրագրերը կազմվում են գործարկվող ֆայլերի մեջ՝ առանց արտաքին կախվածության: Պարզ http սերվերի գործարկվող ֆայլի չափը հավաքումից հետո ընդամենը 65 ԿԲ է;
  • Կազմված հավելվածների կատարումը գտնվում է C ծրագրերի հավաքների մակարդակում;
  • C կոդի հետ անխափան փոխազդեցության հնարավորություն՝ առանց լրացուցիչ ծախսերի: C լեզվով ֆունկցիաները կարելի է կանչել V լեզվի կոդից, և հակառակը, V լեզվով ծածկագիրը կարելի է կանչել C-ի հետ համատեղելի ցանկացած լեզվով;
  • Աջակցություն C/C++ նախագծերը V լեզվով ներկայացման թարգմանելու համար: Թարգմանության համար օգտագործվում է Clang-ի վերլուծիչ: C ստանդարտի բոլոր հնարավորությունները դեռ չեն ապահովվում, բայց թարգմանչի ներկայիս հնարավորություններն արդեն բավարար են թարգմանությունը V խաղի DOOM լեզվով։ C++ թարգմանիչը դեռ զարգացման վաղ փուլում է.
  • Ներկառուցված սերիալիզացիայի աջակցություն՝ առանց գործարկման ժամանակի հետ կապվելու.
  • Հիշողության բաշխման գործողությունների նվազագույնի հասցնել;
  • Անվտանգության ապահովում՝ ոչ NULL, գլոբալ փոփոխականներ, չսահմանված արժեքներ և փոփոխականների վերասահմանում: Ներկառուցված բուֆերի գերազանցման ստուգում: Աջակցություն ընդհանուր գործառույթներին (Generic): Օբյեկտներ և կառուցվածքներ, որոնք հնարավոր չէ փոխել լռելյայնորեն.
  • «Թեժ» կոդի վերաբեռնման հնարավորությունը (արտացոլելով կոդի փոփոխությունները թռիչքի ժամանակ՝ առանց վերակազմավորման);
  • Գործիքներ բազմալեզու ապահովելու համար: Ինչպես Go լեզվում, «run foo()»-ի նման կառուցվածքն օգտագործվում է կատարման նոր շարանը սկսելու համար (նման է «go foo()»): Ապագայում նախատեսվում է աջակցություն գորուտինների և թեմայի ժամանակացույցի համար.
  • Աջակցություն Windows, macOS, Linux, *BSD օպերացիոն համակարգերին: Նախատեսվում է մինչև տարեվերջ ավելացնել Android-ի և iOS-ի աջակցությունը;
  • Հիշողության կառավարում կոմպիլյացիայի ժամանակ (ինչպես Rust-ում), առանց աղբահանող սարք օգտագործելու.
  • Գրաֆիկական ելքի համար բազմահարթակ գործիքակազմի առկայություն՝ GDI+/Կակաո և OpenGL-ի օգտագործմամբ՝ մատուցման համար (նախատեսվում է DirectX, Vulkan և Metal API-ների աջակցություն): Կան 3D օբյեկտների հետ աշխատելու գործիքներ, կմախքի անիմացիա և տեսախցիկի կառավարում;
  • Գրադարանի առկայություն՝ յուրաքանչյուր ՕՀ-ի բնածին դիզայնի տարրերով գրաֆիկական միջերեսներ ստեղծելու համար: Windows-ն օգտագործում է WinAPI/GDI+, macOS-ն օգտագործում է կակաո, իսկ Linux-ն օգտագործում է իր վիջեթների հավաքածուն: Գրադարանը արդեն օգտագործվում է զարգացման մեջ Վոլտ - հաճախորդ 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.»՝ առանց make կամ արտաքին կոմունալ ծրագրերի օգտագործման: Լրացուցիչ գրադարաններ տեղադրելու համար պարզապես գործարկեք, օրինակ, «v get sqlite»;
  • Փլագինների առկայությունը խմբագիրներում V լեզվով մշակման համար VS կոդը и եռանդ.

Զարգացում ընկալվել է համայնքի հետ թերահավատություն, քանի որ հրապարակված օրենսգիրքը ցույց է տվել, որ հայտարարված ոչ բոլոր հնարավորություններն են դեռ իրականացված, և բոլոր ծրագրերն իրականացնելու համար պահանջվում է շատ մեծ աշխատանք։
Բացի այդ, ի սկզբանե պահեստն ուներ տեղադրված է կոտրված կոդը, որն ունի հավաքման և կատարման հետ կապված խնդիրներ: Ենթադրվում է, որ հեղինակը դեռ չի հասել այն փուլին, երբ նրանք սկսում են նկատել Պարետոյի օրենքը, ըստ որի ջանքերի 20%-ը տալիս է արդյունքի 80%-ը, իսկ մնացած 80%-ը տալիս է արդյունքի միայն 20%-ը։

Միևնույն ժամանակ, Project V-ի սխալների որոնիչի մոտ 10 գրառում է հեռացվել ցուցադրություն Ցածր որակի կոդը, օրինակ, ցույց է տալիս C-ներդիրների օգտագործումը և գործառույթների գրադարանում rm հրամանի գրացուցակը ջնջելու համար os.system ("rm -rf $path") կանչի միջոցով: Նախագծի հեղինակ ասելոր նա միայն ջնջել է հաղորդագրությունները, հրատարակված տրոլլ (քննադատության հիմնավորվածությունը հաստատող փոփոխություններով, մնաց в խմբագրել պատմությունը).

Source: opennet.ru

Добавить комментарий