V programski jezik otvorenog koda

Prevedeno u kategoriju otvorenog prevoditelja za jezik V. V je statički tipiziran strojno preveden jezik koji se fokusira na to da razvoj bude lakši za održavanje i vrlo brz za kompilaciju. Kod prevoditelja, biblioteke i srodni alati otvoren pod licencom MIT-a.

V-ova sintaksa vrlo je slična Go-u, posuđujući neke konstrukte od Oberona, Rusta i Swifta. Jezik je maksimalno pojednostavljen i, prema riječima programera, 30 minuta učenja dovoljno je za učenje osnova dokumentacija. U isto vrijeme, jezik ostaje prilično moćan i može se koristiti za obavljanje istih zadataka kao i pri korištenju drugih programskih jezika (na primjer, dostupne su biblioteke za 2D/3D grafiku, stvaranje GUI-ja i web aplikacija).

Stvaranje novog jezika potaknuto je željom da se postigne kombinacija jednostavnosti sintakse jezika Go, brzine kompilacije, lakoće paralelizacije operacija, prenosivosti i mogućnosti održavanja koda s performansama C/C++, sigurnosti Rust-a i generiranje strojnog koda u fazi Zig kompilacije. Također sam želio dobiti kompaktan i brz kompajler koji bi mogao raditi bez vanjskih ovisnosti, osloboditi se globalnog opsega (globalnih varijabli) i pružiti mogućnost "vrućeg" ponovnog učitavanja koda.

U usporedbi s C++, novi jezik je značajno jednostavniji, omogućuje veću brzinu kompilacije (do 400 puta), koristi sigurne tehnike programiranja, nema problema s nedefiniranim ponašanjem i nudi ugrađene alate za paraleliziranje operacija. U usporedbi s Pythonom, V je brži, jednostavniji, sigurniji i lakši za održavanje. U usporedbi s Go-om, V nema globalne varijable, nema null vrijednosti, sve vrijednosti varijable uvijek moraju biti definirane, svi su objekti prema zadanim postavkama nepromjenjivi, podržan je samo jedan tip dodjele ("a := 0"), znatno kompaktniji vrijeme izvođenja i veličina rezultirajućih izvršnih datoteka, prisutnost izravne prenosivosti iz C-a, odsutnost sakupljača smeća, brža serijalizacija, mogućnost interpolacije nizova (“println('$foo: $bar.baz')”).

fn main() {
područja := ['igra', 'web', 'alati', 'znanost', 'sustavi', 'GUI', 'mobilno'] a := 10
ako je istina {
do := 20
}
za područje u područjima {
println('Pozdrav, $area programeri!')
}
}

Značajke projekta:

  • Kompaktan i brz prevodilac, koji zajedno sa standardnom bibliotekom zauzima oko 400 KB. Visoka brzina kompilacije postiže se izravnim generiranjem strojnog koda i modularnošću. Brzina kompilacije je približno 1.2 milijuna redaka koda u sekundi na jednoj CPU jezgri (napominje se da tijekom rada V može koristiti C, tada brzina pada na 100 tisuća redaka u sekundi). Samosklapanje prevoditelja, koji je također napisan na jeziku V (u Go-u postoji i referentna verzija), traje otprilike 0.4 sekunde. Do kraja godine očekuje se dovršetak rada na dodatnim optimizacijama koje će smanjiti vrijeme izrade prevoditelja na 0.15 sekundi. Sudeći prema testovima koje je proveo programer, samosklapanje Go-a zahtijeva 512 MB prostora na disku i pokreće se za jednu i pol minutu, Rust zahtijeva 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 poslužitelja nakon sklapanja je samo 65 KB;
  • Performanse kompajliranih aplikacija su na razini sklopova C programa;
  • Sposobnost besprijekorne interakcije s C kodom, bez dodatnih troškova. Funkcije u jeziku C mogu se pozvati iz koda u jeziku V, i obrnuto, kod u jeziku V može se pozvati u bilo kojem jeziku kompatibilnom sa C;
  • Podrška za prevođenje C/C++ projekata u prikaz na jeziku V. Za prevođenje se koristi parser tvrtke Clang. Još nisu podržane sve značajke standarda C, ali trenutne mogućnosti prevoditelja već su dovoljne za prijevod u jeziku V igre DOOM. C++ prevoditelj je još uvijek u ranoj fazi razvoja;
  • Ugrađena podrška za serijalizaciju, bez vezanja uz vrijeme izvođenja;
  • Minimiziranje operacija dodjele memorije;
  • Osiguravanje sigurnosti: nema NULL, globalnih varijabli, nedefiniranih vrijednosti i redefiniranja varijabli. Ugrađena provjera prekoračenja međuspremnika. Podrška za generičke funkcije (Generic). Objekti i strukture koje se prema zadanim postavkama ne mogu mijenjati;
  • Mogućnost "vrućeg" ponovnog učitavanja koda (odražavajući promjene u kodu u hodu bez ponovnog kompajliranja);
  • Alati za osiguranje višenitnosti. Baš kao u Go jeziku, konstrukcija poput "run foo()" koristi se za pokretanje nove niti izvršenja (slično "go foo()"). U budućnosti se planira podrška za goroutine i planer niti;
  • Podrška za operativne sustave Windows, macOS, Linux, *BSD. Do kraja godine planira se dodati podrška za Android i iOS;
  • Upravljanje memorijom tijekom kompajliranja (kao u Rustu), bez korištenja skupljača smeća;
  • Dostupnost alata za više platformi za grafički izlaz, koristeći GDI+/Cocoa i OpenGL za renderiranje (planirana je podrška za DirectX, Vulkan i Metal API-je). Postoje alati za rad s 3D objektima, skeletnom animacijom i kontrolom kamere;
  • Dostupnost biblioteke za generiranje grafičkih sučelja s elementima dizajna izvornim za svaki OS. Windows koristi WinAPI/GDI+, macOS koristi Cocoa, a Linux koristi vlastiti set widgeta. Knjižnica se već koristi u razvoju Volt — klijent za Slack, Skype, Gmail, Twitter i Facebook;

    Plan je stvoriti aplikaciju za dizajn sučelja nalik na Delphi, pružiti deklarativni API sličan SwiftUI i React Native te pružiti podršku za izradu mobilnih aplikacija za iOS i Android;

    V programski jezik otvorenog koda

  • Dostupnost ugrađenog web okvira koji se koristi za izradu web stranice, foruma i bloga za programere projekta. Podržana je predkompilacija HTML predložaka, bez njihove obrade na svaki zahtjev;
  • Podrška za unakrsnu kompilaciju. Da biste izgradili izvršnu datoteku za Windows, samo pokrenite “v -os windows”, a za Linux - “v -os linux” (podrška za unakrsnu kompilaciju za macOS očekuje se kasnije). Unakrsna kompilacija također radi za grafičke aplikacije;
  • Ugrađeni upravitelj ovisnosti, upravitelj paketa i alati za izgradnju. Za izradu programa samo pokrenite “v.”, bez korištenja make ili vanjskih uslužnih programa. Za instaliranje dodatnih biblioteka, samo pokrenite, na primjer, “v get sqlite”;
  • Dostupnost dodataka za razvoj na jeziku V u uređivačima VS kod и energija.

dizajn percipiran zajednica sa skepticizam, budući da je objavljeni kod pokazao da sve deklarirane sposobnosti još nisu implementirane i da je potrebna jako velika količina posla za implementaciju svih planova.
Osim toga, u početku je spremište imalo objavljeno neispravan kod koji ima problema s montažom i izvođenjem. Pretpostavlja se da autor još nije došao u fazu u kojoj počinju primjećivati Paretov zakon, prema kojoj 20% truda daje 80% rezultata, a preostalih 80% truda daje samo 20% rezultata.

U međuvremenu je iz programa za praćenje bugova Project V uklonjeno oko 10 objava demonstracija kod niske kvalitete, na primjer, ukazuje na korištenje C-umetaka i korištenje u biblioteci funkcija za brisanje direktorija naredbe rm putem poziva os.system("rm -rf $path"). Autor projekta rekaoda je samo obrisao poruke, Objavljeno trolirati (s izmjenama koje potvrđuju utemeljenost kritike, ostala в povijest uređivanja).

Izvor: opennet.ru

Dodajte komentar