V programski jezik otvorenog koda

Prevedeno u kategoriju otvorenog kompajlera za jezik V. V je statički otkucani strojno kompajlirani jezik koji se fokusira na olakšavanje razvoja i vrlo brzo kompajliranje. Kompajlerski kod, biblioteke i srodni alati otvoren pod MIT licencom.

V-ova sintaksa je vrlo slična Go, pozajmljujući neke konstrukcije od Oberona, Rusta i Swifta. Jezik je maksimalno pojednostavljen i, prema programeru, 30 minuta učenja je dovoljno da naučite osnove dokumentaciju. U isto vrijeme, jezik ostaje prilično moćan i može se koristiti za obavljanje istih zadataka kao i kod korištenja drugih programskih jezika (na primjer, dostupne su biblioteke za 2D/3D grafiku, kreiranje GUI-ja i web aplikacija).

Stvaranje novog jezika potaknuto je željom da se postigne kombinacija jednostavnosti sintakse Go jezika, brzine kompilacije, lakoće paralelizacije operacija, prenosivosti i mogućnosti održavanja koda sa performansama C/C++, sigurnosti Rusta i generisanje mašinskog koda u fazi Zig kompilacije. Takođe sam želeo da nabavim kompaktan i brz kompajler koji bi mogao da radi bez eksternih zavisnosti, da se oslobodi globalnog opsega (globalnih varijabli) i obezbedi mogućnost "hot" ponovnog učitavanja koda.

U poređenju sa C++, novi jezik je znatno jednostavniji, obezbeđuje bržu brzinu kompilacije (do 400 puta), praktikuje sigurne tehnike programiranja, nema problema sa nedefinisanim ponašanjem i obezbeđuje ugrađene alate za paralelizovanje operacija. U poređenju sa Pythonom, V je brži, jednostavniji, sigurniji i lakši za održavanje. U poređenju sa Go, V nema globalne varijable, nema nule, sve vrijednosti varijabli moraju uvijek biti definirane, svi objekti su nepromjenjivi prema zadanim postavkama, podržan je samo jedan tip dodjele (“a := 0”), znatno kompaktniji vrijeme izvođenja i veličina rezultirajućih izvršnih datoteka, prisustvo direktne prenosivosti sa C-a, odsustvo sakupljača smeća, brža serijalizacija, mogućnost interpolacije nizova (“println('$foo: $bar.baz')”).

fn main() {
oblasti := ['igra', 'web', 'alati', 'nauka', 'sistemi', 'GUI', 'mobilni'] a := 10
ako je istina {
do := 20
}
za područje u područjima {
println('Zdravo, $area developeri!')
}
}

Karakteristike projekta:

  • Kompaktan i brz kompajler, koji zajedno sa standardnom bibliotekom zauzima oko 400 KB. Velika brzina kompilacije postiže se direktnim generiranjem mašinskog koda i modularnošću. Brzina kompilacije je približno 1.2 miliona linija koda u sekundi na jednom CPU jezgru (napominje se da tokom rada V može koristiti C, tada brzina pada na 100 hiljada linija u sekundi). Samosastavljanje kompajlera, koji je takođe napisan na V jeziku (postoji i referentna verzija u Go), traje otprilike 0.4 sekunde. Do kraja godine očekuje se završetak radova na dodatnim optimizacijama, što će smanjiti vrijeme izrade kompajlera na 0.15 sekundi. Sudeći po testovima koje je sproveo programer, samo sastavljanje Go zahteva 512 MB prostora na disku i radi za minut i po, Rust zahteva 30 GB i 45 minuta, GCC - 8 GB i 50 minuta, Clang - 90 GB i 25 minuta,
    Swift - 70 GB i 90 minuta;

  • Programi se kompajliraju u izvršne datoteke bez vanjskih ovisnosti. Veličina izvršne datoteke jednostavnog http servera nakon sklapanja je samo 65 KB;
  • Performanse kompajliranih aplikacija su na nivou sklopova C programa;
  • Sposobnost neprimetne interakcije sa C kodom, bez dodatnih troškova. Funkcije u jeziku C mogu se pozvati iz koda u jeziku V, i obrnuto, kod u jeziku V se može pozvati na bilo kojem jeziku kompatibilnom sa C;
  • Podrška za prevođenje C/C++ projekata u reprezentaciju na jeziku V. Za prevođenje se koristi parser iz Clanga. Još uvek nisu podržane sve karakteristike standarda C, ali sadašnje mogućnosti prevodioca su već dovoljne za prevod na jeziku V igre DOOM. C++ prevodilac je još uvek u ranoj fazi razvoja;
  • Ugrađena podrška za serijalizaciju, bez vezivanja za vrijeme rada;
  • Minimiziranje operacija dodjele memorije;
  • Osiguravanje sigurnosti: nema NULL, globalnih varijabli, nedefiniranih vrijednosti i redefiniranja varijable. Ugrađena provjera prekoračenja bafera. Podrška za generičke funkcije (Generic). Objekti i strukture koji se ne mogu mijenjati po defaultu;
  • Mogućnost ponovnog učitavanja "vrućeg" koda (odraz promjena u kodu u hodu bez ponovnog kompiliranja);
  • Alati za osiguranje višenitnosti. Baš kao u Go jeziku, konstrukcija poput “run foo()” se koristi za pokretanje nove niti izvršenja (slično kao “go foo()”). U budućnosti se planira podrška za gorutine i planer niti;
  • Podrška za Windows, macOS, Linux, *BSD operativne sisteme. Planirano je dodavanje podrške za Android i iOS do kraja godine;
  • Upravljanje memorijom u vrijeme kompajliranja (kao u Rustu), bez korištenja sakupljača smeća;
  • Dostupnost višeplatformskog alata za grafički izlaz, koristeći GDI+/Cocoa i OpenGL za renderovanje (planirana je podrška za DirectX, Vulkan i Metal API). Postoje alati za rad sa 3D objektima, skeletnu animaciju i kontrolu kamere;
  • Dostupnost biblioteke za generisanje grafičkih interfejsa sa elementima dizajna koji su prirodni za svaki OS. Windows koristi WinAPI/GDI+, macOS koristi Cocoa, a Linux koristi vlastiti skup widgeta. Biblioteka se već koristi u razvoju Volt — klijent za Slack, Skype, Gmail, Twitter i Facebook;

    Plan je da se kreira aplikacija za dizajn interfejsa nalik Delphiju, da se obezbedi deklarativni API sličan SwiftUI i React Native, i da se obezbedi podrška za kreiranje mobilnih aplikacija za iOS i Android;

    V programski jezik otvorenog koda

  • Dostupnost ugrađenog web okvira koji se koristi za kreiranje web stranice, foruma i bloga za programere projekta. Podržana je predkompilacija HTML šablona, ​​bez njihove obrade na svaki zahtjev;
  • Podrška za unakrsnu kompilaciju. Da biste napravili izvršnu datoteku za Windows, samo pokrenite “v -os windows”, a za Linux - “v -os linux” (podrška za unakrsnu kompilaciju za macOS se očekuje kasnije). Unakrsna kompilacija radi i za grafičke aplikacije;
  • Ugrađeni menadžer zavisnosti, menadžer paketa i alati za pravljenje. Da biste napravili program, samo pokrenite “v.”, bez korištenja make ili eksternih uslužnih programa. Da biste instalirali dodatne biblioteke, samo pokrenite, na primjer, “v get sqlite”;
  • Dostupnost dodataka za razvoj na V jeziku u editorima VS Code и energija.

Razvoj percipirano zajednica sa skepticizam, budući da je objavljena šifra pokazala da još nisu implementirane sve deklarisane mogućnosti i da je potreban veoma veliki posao da se svi planovi realizuju.
Osim toga, u početku je spremište imalo objavljeno pokvareni kod koji ima problema sa sklapanjem i izvršavanjem. Pretpostavlja se da autor još nije dostigao fazu u kojoj počinju da primećuju Paretov zakon, prema kojem 20% truda daje 80% rezultata, a preostalih 80% truda daje samo 20% rezultata.

U međuvremenu, program za praćenje grešaka projekta V je uklonio oko 10 postova demonstracija kod niske kvalitete, na primjer, ukazuje na upotrebu C-umetaka i upotrebu u biblioteci funkcija za brisanje direktorija naredbe rm putem poziva os.system("rm -rf $path"). Autor projekta proglašenda je samo obrisao poruke, objavljeno troll (sa izmjenama koje potvrđuju opravdanost kritike, ostao в historiju uređivanja).

izvor: opennet.ru

Dodajte komentar