Po 40 dňoch vývoja bola zverejnená nová verzia staticky typovaného programovacieho jazyka V (vlang). Hlavnými cieľmi pri vytváraní V boli jednoduchosť učenia a používania, vysoká čitateľnosť, rýchla kompilácia, vylepšená bezpečnosť, efektívny vývoj, multiplatformové použitie, vylepšená interoperabilita s jazykom C, lepšie spracovanie chýb, moderné možnosti a lepšie udržiavateľné programy. Kód kompilátora, knižnice a súvisiace nástroje sú open source pod licenciou MIT.
V novej verzii:
- Jazykové vylepšenia:
- Nový modul “encoding.xml s parserom, validácia, unit testy.
- Vylepšená podpora pre rutiny (IO, sieť).
- Znížte operácie prideľovania pamäte v aplikáciách vweb o 80 %.
- Implementácia „@VCURRENTHASH“ na nahradenie „C.V_CURRENT_COMMIT_HASH“.
- Začala sa propagácia nového typu int, spojeného s typom i64 (predtým bol typ int stotožňovaný s typom i32).
- Opravené pravidlá kontroly typu pre nový typ int a optimalizované generovanie kódu.
- Zmeny API, ktoré narúšajú kompatibilitu:
- Slovník „Request.cookies“ bol zastaraný. Nahradené výrazmi „Request.cookie()“ a „Request.add_cookie()“.
- Prísnejšie pravidlá pre typy C, ktoré sa teraz musia vždy deklarovať.
- Zmeny v systéme kontroly typov:
- Upozornenie o rozdelení možnosti/výsledku bolo presunuté do kategórie chýb.
- Opravte volanie "fn" s voliteľným argumentom v automatickom režime.
- Kontrola názvov je späť: Pascal case pre aliasy.
- C.xx = aliasy C.yy.
- Povoliť pretypovanie celočíselných typov ako rozsahov v matematických blokoch.
- Upozornenie na zastaranie typu byte (v prospech typu u8) pri použití ako parameter fn.
- Opravte metódu pripojenia pre všeobecné polia.
- Kontrola chyby pri implementácii privátneho rozhrania iného modulu.
- Opravená kontrola záporných hodnôt uzáveru a šošovky pri inicializácii poľa.
- Zmena varovania o duplicitných názvoch modulov var a param na chybu.
- Povoliť opätovné priradenie celej zdieľanej premennej (pri zachovaní predchádzajúceho stavu mutexu).
- Vylepšenia analyzátora:
- Opravené priradenie statickej metódy anonymným funkciám.
- ast: Opravené formátovanie deklarácie štruktúry s vnorenou štruktúrou.
- Do bitových polí „[flag]“ boli pridané metódy set_all + clear_all.
- Upozorniť na nevyužité importy, aj keď sú deklarované s "import math { sin, cos }".
- Zmeny kompilátora:
- checker, builder, pref: podpora príznaku "-dump-defines" na zobrazenie všetkých dostupných používateľských a systémových definícií pre daný program.
- mapy: pridané funkcie maps.merge() a maps.merge_in_place().
- Štandardná knižnica:
- vstavaná: pridaná metóda "unsafe { a.reset() }" na rýchle nastavenie všetkých bajtov v poli na 0.
- math.fractions: Použite preťaženie operátora a opustite staré funkcie.
- gg: Opravte zarovnanie spodného okraja draw_rounded_rect_empty v systéme Macos a Linux.
- crypto.bcrypt: opravená chyba v bcrypt.
- sokol: aktualizované na najnovšiu verziu
- vstavaná: pevná veľkosť (C.BOOL) (špecifické pre okná).
- math.big: Opravte nesprávne delenie zápornými číslami.
- os: Pridaný pohodlný spôsob ignorovania niektorých systémových signálov.
- os: oprava os.ls(priečinok) v oknách, keď sa chránený adresár nedá otvoriť.
- crypto.sha/md5/: Opravený výpočet rovnakých hodnôt hash pri viacnásobnom volaní .sum() pre sha1/256/512.
- os: implementované os.fd_is_pending/1, os.Process.pipe_read/1, os.Process.is_pending/1.
- json2: pridaná podpora pre vnorené štruktúry.
- web
- vweb: pridané typy MIME pre statické súbory .md.
- net.conv: Pridané funkcie varinttou64 a u64tovarint pre variabilné kódovanie celých čísel bez znamienka popísané v rfc-9000 (pre QUIC).
- net.http: podpora špecifikujúcich funkcie spätného volania on_running, on_stopped, on_closed v http.Server{}, ako aj show_startup_message: false.
- net.http: Podpora prechodu HTTP proxyserver v http.fetch.
- net.http: Pridajte mechanizmus opakovania do http.fetch() pre chyby soketov, ktorým sa nedá vyhnúť.
- wasm: realizovaná inline montáž.
- net.http: hodnota max_redirects zvýšená na 16.
- picoev: implementácia surového režimu pre priamu prácu s deskriptormi súborov.
- net.http: pridaná podpora pre socks5 a http(s) proxy pre unixové systémy.
- ORM:
- orm: pridané spracovanie hodnôt null a voliteľných polí.
- orm: Operácie is_null/is_not_null sú jednočlenné.
- Ovládače databázy:
- pg: Volania C boli presunuté do súborov .cv.
- Natívny backend:
- native: support -no-builtin flag (vygenerujte < 1 kB spustiteľné súbory pre Linux pomocou "v -no-builtin -b natívne príklady/hello_world.v").
- native: použite i32 namiesto int.
- C-backend:
- ast, native, cgen: pridaná podpora pre "$if native {}".
- vfmt:
- Teraz odstraňuje ďalšie zalomenia riadkov po call_expr a pred argumentmi štruktúry.
- Opravené zarovnanie hodnôt pri použití kláves so znakmi uft8.
- Zarovnanie ternárnych výrazov v konštantných blokoch.
- Nástroje:
- Pridaná podpora @LOCATION na uľahčenie ladenia bez nutnosti kombinovať @FILE a @LINE za behu.
- benchmark: pridané nové metódy b.record_measure/1 a b.all_recorded_measures/0.
- ci: github workflow c2v aktualizovaný.
- strings: pridaná metóda Bulder.write_decimal/1 (na zápis desiatkového čísla, bez dodatočných alokácií).
- Inštalácia existujúceho modulu pomocou vpm (windows) bola opravená.
- tools.vpm: vylepšená práca s adresami končiacimi na „.git“.
- Pridaná požiadavka na súbor v.mod na inštaláciu modulov cez externé odkazy pomocou vpm.
Zdroj: opennet.ru
