V programmÄ“Å”anas valoda atvērtā koda

Tulkots atvērtā kompilatora kategorijā valoda V. V ir statiski drukāta maŔīnkompilēta valoda, kuras mērÄ·is ir atvieglot izstrādes uzturÄ“Å”anu un ļoti ātru kompilÄ“Å”anu. Kompilatora kods, bibliotēkas un saistÄ«tie rÄ«ki ir atvērts saskaņā ar MIT licenci.

V sintakse ir ļoti lÄ«dzÄ«ga Go, aizņemoties dažas konstrukcijas no Oberon, Rust un Swift. Valoda ir pēc iespējas vienkārÅ”ota, un, pēc izstrādātāja domām, pietiek ar 30 minÅ«tēm, lai apgÅ«tu pamatus. dokumentācija. Tajā paŔā laikā valoda joprojām ir diezgan jaudÄ«ga, un to var izmantot, lai veiktu tos paÅ”us uzdevumus, kā izmantojot citas programmÄ“Å”anas valodas (piemēram, bibliotēkas ir pieejamas 2D/3D grafikai, veidojot GUI un tÄ«mekļa lietojumprogrammas).

Jaunas valodas izveidi pamudināja vēlme panākt Go valodas sintakses vienkārŔības, kompilācijas ātruma, operāciju paralelizācijas vienkārŔības, koda pārnesamÄ«bas un uzturamÄ«bas ar C/C++ veiktspēju, Rust un Rust droŔības kombināciju. maŔīnkoda Ä£enerÄ“Å”ana Zig kompilācijas stadijā. Es arÄ« gribēju iegÅ«t kompaktu un ātru kompilatoru, kas varētu darboties bez ārējām atkarÄ«bām, atbrÄ«voties no globālās darbÄ«bas jomas (globālie mainÄ«gie) un nodroÅ”ināt iespēju ā€œkarstiā€ pārlādēt kodu.

SalÄ«dzinot ar C++, jaunā valoda ir ievērojami vienkārŔāka, nodroÅ”ina ātrāku kompilācijas ātrumu (lÄ«dz 400 reizēm), praktizē droÅ”as programmÄ“Å”anas metodes, bez problēmām ar nedefinētu uzvedÄ«bu un nodroÅ”ina iebÅ«vētus rÄ«kus darbÄ«bu paralēlināŔanai. SalÄ«dzinot ar Python, V ir ātrāks, vienkārŔāks, droŔāks un labāk apkopjams. SalÄ«dzinot ar Go, V nav globālu mainÄ«go, nav nulles, vienmēr jābÅ«t definētām visām mainÄ«go vērtÄ«bām, visi objekti pēc noklusējuma ir nemainÄ«gi, tiek atbalstÄ«ts tikai viens pieŔķirÅ”anas veids (ā€œa := 0ā€), ievērojami kompaktāks izpildlaiks un iegÅ«to izpildāmo failu lielums, tieŔā pārnesamÄ«ba no C, atkritumu savācēja neesamÄ«ba, ātrāka serializācija, iespēja interpolēt virknes (ā€œprintln('$foo: $bar.baz')ā€).

fn galvenais() {
apgabali := ['spēle', 'tīmeklis', 'rīki', 'zinātne', 'sistēmas', 'GUI', 'mobilais'] a := 10
ja taisnība {
līdz := 20
}
apgabalam apgabalos {
println ('Sveiki, $area izstrādātāji!')
}
}

Projekta funkcijas:

  • Kompakts un ātrs kompilators, kas kopā ar standarta bibliotēku aizņem apmēram 400 KB. Liels kompilācijas ātrums tiek panākts, tieÅ”i Ä£enerējot maŔīnkodu un modularitāti. Kompilācijas ātrums ir aptuveni 1.2 miljoni koda rindiņu sekundē uz viena CPU kodola (jāatzÄ«mē, ka darbÄ«bas laikā V var izmantot C, tad ātrums samazinās lÄ«dz 100 tÅ«kstoÅ”iem rindiņu sekundē). Kompilatora paÅ”montāža, kas arÄ« ir rakstÄ«ta V valodā (Go ir arÄ« atsauces versija), aizņem aptuveni 0.4 sekundes. Paredzams, ka lÄ«dz gada beigām tiks pabeigts darbs pie papildu optimizācijas, kas samazinās kompilatora izveides laiku lÄ«dz 0.15 sekundēm. Spriežot pēc izstrādātāja veiktajiem testiem, Go paÅ”montāža prasa 512 MB diska vietas un darbojas pusotras minÅ«tes laikā, Rust prasa 30 GB un 45 minÅ«tes, GCC - 8 GB un 50 minÅ«tes, Clang - 90 GB un 25 minÅ«tes,
    Swift - 70 GB un 90 minūtes;

  • Programmas tiek apkopotas izpildāmos failos bez ārējām atkarÄ«bām. VienkārÅ”a http servera izpildāmā faila izmērs pēc montāžas ir tikai 65 KB;
  • SastādÄ«to lietojumprogrammu veiktspēja ir C programmu komplektu lÄ«menÄ«;
  • Iespēja nemanāmi mijiedarboties ar C kodu, bez papildu izmaksām. Funkcijas C valodā var izsaukt no koda V valodā, un otrādi, kodu V valodā var izsaukt jebkurā ar C saderÄ«gā valodā;
  • Atbalsts C/C++ projektu tulkoÅ”anai reprezentācijā V valodā. TulkoÅ”anai tiek izmantots parsētājs no Clang. Pagaidām netiek atbalstÄ«tas visas C standarta iespējas, taču ar paÅ”reizējām tulkotāja iespējām jau pietiek tulkoÅ”ana V spēles DOOM valodā. C++ tulkotājs joprojām ir attÄ«stÄ«bas sākuma stadijā;
  • IebÅ«vēts serializācijas atbalsts, kas nav saistÄ«ts ar izpildlaiku;
  • Atmiņas pieŔķirÅ”anas darbÄ«bu samazināŔana;
  • DroŔības nodroÅ”ināŔana: nav NULL, globālie mainÄ«gie, nedefinētas vērtÄ«bas un mainÄ«gā atkārtota definÄ“Å”ana. IebÅ«vēta bufera pārtēriņa pārbaude. Atbalsts vispārÄ«gām funkcijām (Generic). Objekti un struktÅ«ras, kuras pēc noklusējuma nevar mainÄ«t;
  • Iespēja ā€œkarstuā€ kodu pārlādēt (atspoguļojot izmaiņas kodā lidojuma laikā bez atkārtotas kompilācijas);
  • Instrumenti daudzpavedienu nodroÅ”ināŔanai. Tāpat kā Go valodā, jauna izpildes pavediena uzsākÅ”anai tiek izmantota tāda konstrukcija kā ā€œpalaist foo()ā€ (lÄ«dzÄ«gi kā ā€œgo foo()ā€). Nākotnē tiek plānots atbalsts gorutÄ«nām un pavedienu plānotājam;
  • Atbalsts operētājsistēmām Windows, macOS, Linux, *BSD. Android un iOS atbalstu plānots pievienot lÄ«dz gada beigām;
  • Atmiņas pārvaldÄ«ba kompilÄ“Å”anas laikā (kā Rust), neizmantojot atkritumu savācēju;
  • Vairāku platformu rÄ«ku komplekta pieejamÄ«ba grafikas izvadei, renderÄ“Å”anai izmantojot GDI+/Cocoa un OpenGL (tiek plānots DirectX, Vulkan un Metal API atbalsts). Ir instrumenti darbam ar 3D objektiem, skeleta animācija un kameras vadÄ«ba;
  • Bibliotēkas pieejamÄ«ba grafisko interfeisu Ä£enerÄ“Å”anai ar katras operētājsistēmas dizaina elementiem. Windows izmanto WinAPI/GDI+, macOS izmanto Cocoa, un Linux izmanto savu logrÄ«ku kopu. Bibliotēka jau tiek izmantota izstrādē Volts ā€” Slack, Skype, Gmail, Twitter un Facebook klients;

    Plāns ir izveidot Delphi lÄ«dzÄ«gu interfeisa dizaina lietojumprogrammu, nodroÅ”ināt deklaratÄ«vu API, kas ir lÄ«dzÄ«ga SwiftUI un React Native, un nodroÅ”ināt atbalstu mobilo aplikāciju izveidei iOS un Android ierÄ«cēm;

    V programmÄ“Å”anas valoda atvērtā koda

  • IebÅ«vēta tÄ«mekļa ietvara pieejamÄ«ba, kas tiek izmantota, lai izveidotu vietni, forumu un emuāru projekta izstrādātājiem. Tiek atbalstÄ«ta HTML veidņu iepriekŔēja kompilācija, neapstrādājot tās pēc katra pieprasÄ«juma;
  • Krusta kompilācijas atbalsts. Lai izveidotu izpildāmo failu operētājsistēmai Windows, vienkārÅ”i palaidiet ā€œv -os windowsā€ un operētājsistēmai Linux ā€” ā€œv -os linuxā€ (macOS savstarpējās kompilācijas atbalsts ir paredzēts vēlāk). Savstarpējā kompilācija darbojas arÄ« grafiskām lietojumprogrammām;
  • IebÅ«vēts atkarÄ«bas pārvaldnieks, pakotņu pārvaldnieks un veidoÅ”anas rÄ«ki. Lai izveidotu programmu, vienkārÅ”i palaidiet ā€œv.ā€, neizmantojot marku vai ārējās utilÄ«tas. Lai instalētu papildu bibliotēkas, vienkārÅ”i palaidiet, piemēram, ā€œv get sqliteā€;
  • Spraudņu pieejamÄ«ba izstrādei V valodā redaktoros VS kods Šø spars.

AttÄ«stÄ«ba uztverts kopiena ar skepticisms, jo publicētais kods liecināja, ka visas deklarētās iespējas vēl nav Ä«stenotas un visu plānu Ä«stenoÅ”anai ir nepiecieÅ”ams ļoti liels darba apjoms.
Turklāt sākotnēji repozitorijā bija izlikts bojāts kods, kuram ir problēmas ar montāžu un izpildi. Tiek pieņemts, ka autors vēl nav sasniedzis stadiju, kurā viņi sāk pamanÄ«t Pareto likums, saskaņā ar kuru 20% piepÅ«les rada 80% no rezultāta, bet atlikuÅ”ie 80% piepÅ«les rada tikai 20% no rezultāta.

Tikmēr Project V kļūdu izsekotājs ir noņēmis aptuveni 10 ziņas no demonstrācija zemas kvalitātes kods, piemēram, norāda uz C-ieliktņu izmantoÅ”anu un funkciju izmantoÅ”anu bibliotēkā, lai dzēstu komandas rm direktoriju, izmantojot izsaukumu os.system ("rm -rf $path"). Projekta autors teicaka viņŔ tikai izdzēsa ziņas, publicēts trollis (ar izmaiņām, kas apstiprina kritikas pamatotÄ«bu, palika Š² rediģēt vēsturi).

Avots: opennet.ru

Pievieno komentāru