Nakon 40 dana razvoja, objavljena je nova verzija statički kucanog programskog jezika V (vlang). Glavni ciljevi u kreiranju V bili su jednostavnost učenja i upotrebe, visoka čitljivost, brza kompilacija, poboljšana sigurnost, efikasan razvoj, korištenje na više platformi, poboljšana interoperabilnost sa jezikom C, bolje rukovanje greškama, moderne mogućnosti i programi koji se mogu održavati. Kod kompajlera, biblioteke i povezani alati su otvorenog koda pod MIT licencom.
U novoj verziji:
- Poboljšanja jezika:
- Novi modul “encoding.xml sa parserom, validacijom, jediničnim testovima.
- Poboljšana podrška za programske rutine (IO, mreža).
- Smanjite operacije dodjele memorije u vweb aplikacijama za 80%.
- Implementacija "@VCURRENTHASH" za zamjenu "C.V_CURRENT_COMMIT_HASH".
- Započela je promocija novog tipa int, povezanog sa tipom i64 (ranije je tip int identifikovan sa tipom i32).
- Fiksna pravila za provjeru tipa za novi tip int i optimizirano generiranje koda.
- API promjene koje narušavaju kompatibilnost:
- Rječnik "Request.cookies" je zastario. Zamijenjeno sa “Request.cookie()” i “Request.add_cookie()”.
- Stroža pravila za C tipove, koji sada moraju uvijek biti deklarirani.
- Promjene u sistemu za provjeru tipa:
- Upozorenje o podjelu opcija/rezultat je premješteno u kategoriju greške.
- Popravite pozivanje "fn" s opcijskim argumentom u automatskom načinu rada.
- Provjera imenovanja se vratila: pascal velika i mala slova za pseudonime.
- C.xx = C.yy alijasi.
- Dozvoli uvođenje cjelobrojnih tipova kao raspona u matematičkim blokovima.
- Upozorenje o zastarevanju tipa bajta (u korist tipa u8) kada se koristi kao fn parametar.
- Popravi metod dodavanja za generičke nizove.
- Provjera greške u implementaciji privatnog interfejsa drugog modula.
- Ispravljena provjera negativnih vrijednosti cap i len prilikom inicijalizacije niza.
- Pretvaranje upozorenja o dupliranim nazivima var i param modula u grešku.
- Dozvolite preraspodjelu cijele dijeljene varijable (uz zadržavanje prethodnog stanja muteksa).
- Poboljšanja parsera:
- Popravljeno dodjeljivanje statičke metode anonimnim funkcijama.
- ast: Popravljeno formatiranje deklaracije strukture sa ugniježđenom strukturom.
- Dodane metode set_all + clear_all u bitna polja "[flag]".
- Upozorite na neiskorištene uvoze, čak i ako su deklarirani sa "import math { sin, cos }".
- Promjene kompajlera:
- checker, builder, pref: podržava oznaku "-dump-defines" za pregled svih dostupnih korisničkih i sistemskih definicija za dati program.
- maps: dodane funkcije maps.merge() i maps.merge_in_place().
- Standardna biblioteka:
- ugrađena: dodana metoda "unsafe { a.reset() }" za brzo postavljanje svih bajtova u nizu na 0.
- math.fractions: Koristite preopterećenje operatora i napustite stare funkcije.
- gg: Popravi draw_rounded_rect_empty poravnanje donjeg ruba na macos i linux.
- crypto.bcrypt: ispravljena greška u bcryptu.
- sokol: ažurirano na najnoviju verziju
- ugrađeni: fiksna veličina(C.BOOL) (specifično za Windows).
- math.big: Ispraviti netačno dijeljenje negativnim brojevima.
- os: Dodan zgodan način da se ignorišu neki sistemski signali.
- os: popravi os.ls(folder) u Windowsima kada se zaštićeni direktorij ne može otvoriti.
- crypto.sha/md5/: Popravljeno izračunavanje istih hash vrijednosti kada se više puta poziva .sum() za sha1/256/512.
- os: implementiran os.fd_is_pending/1, os.Process.pipe_read/1, os.Process.is_pending/1.
- json2: dodata podrška za ugniježđene strukture.
- veb
- vweb: dodani mime tipovi za statičke .md datoteke.
- net.conv: Dodane funkcije varinttou64 i u64tovarint za varijabilno kodiranje neoznačenih cijelih brojeva opisanih u rfc-9000 (za QUIC).
- net.http: podrška koja specificira on_running, on_stopped, on_closed funkcije povratnog poziva u http.Server{}, kao i show_startup_message: false.
- net.http: Podrška za HTTP proxy prolazserver u http.fetch.
- net.http: Dodajte mehanizam za ponovni pokušaj u http.fetch() za neizbježne greške utičnice.
- wasm: implementiran inline sklop.
- net.http: vrijednost max_redirects povećana na 16.
- picoev: implementacija sirovog načina rada za direktan rad sa deskriptorima datoteka.
- net.http: dodata podrška za socks5 i http(s) proksije za unix-like sisteme.
- ORM:
- orm: dodano rukovanje nultim vrijednostima i opcijskim poljima.
- orm: Operacije is_null/is_not_null su unarne.
- Driveri baze podataka:
- pg: C pozivi su premešteni u .cv fajlove.
- Izvorni backend:
- native: поддержка флага -no-builtin (генерация исполняемых файлов < 1 КБ Linux с помощью «v -no-builtin -b native examples/hello_world.v»).
- native: koristite i32 umjesto int.
- C-backend:
- ast, native, cgen: dodata podrška za "$if native {}".
- vfmt:
- Sada uklanja dodatne prijelome reda nakon call_expr i prije argumenata strukture.
- Fiksno poravnanje vrednosti kada se koriste tasteri sa uft8 znakovima.
- Poravnavanje ternarnih izraza u const blokovima.
- Alati:
- Dodana je podrška za @LOCATION kako bi se olakšalo otklanjanje grešaka bez potrebe da se kombinuju @FILE i @LINE tokom izvođenja.
- benchmark: dodane nove metode b.record_measure/1 i b.all_recorded_measures/0.
- ci: github workflow c2v ažuriran.
- stringovi: dodana metoda Bulder.write_decimal/1 (za pisanje decimalnog broja, bez dodatnih alokacija).
- Ispravljena je instalacija postojećeg modula koristeći vpm (windows).
- tools.vpm: poboljšan rad sa adresama koje se završavaju na ".git".
- Dodati zahtjevi za v.mod datoteku za instaliranje modula preko vanjskih veza koristeći vpm.
izvor: opennet.ru
