Pärast 40 päeva arendustööd on avaldatud uus versioon staatiliselt tüpiseeritud programmeerimiskeelest V (vlang). V loomise peamised eesmärgid olid õppimise ja kasutamise lihtsus, kõrge loetavus, kiire kompileerimine, suurenenud turvalisus, efektiivne arendamine, platvormidevaheline kasutamine, paranenud koostöö C-keelega, parem vigade käsitlemine, kaasaegsed võimalused ja mugavam programmide toetamine. Kompilaatori, raamatukogude ja kaasnevate tööriistade kood on avatud MIT litsentsi alusel.
Uues versioonis:
- Keele täiustused:
- Uus moodul «encoding.xml» koos parseri, valideerimise, üksustestide ning testide toetusega.
- Kohandatud toetuse täiustamine couroutines'i (IO, võrk) jaoks.
- Mälu eraldamise toimingud vweb rakendustes vähenevad 80% võrra.
- Tehtud «@VCURRENTHASH» rakendamine, et asendada «C.V_CURRENT_COMMIT_HASH».
- Uue int tüübi edendamine, mis on seotud i64 tüübiga (varem oli int tüüp seotud i32 tüübiga).
- Int tüübi kontrollreeglite parandamine ja koodi genereerimise optimeerimine.
- API muudatused, mis rikuvad ühilduvust:
- Sõnastik «Request.cookies» kuulutatakse vananenuks. Asenduseks on «Request.cookie()» ja «Request.add_cookie()».
- Tüüp C jaoks kehtivad rangemad reeglid, mis peavad nüüd alati olema deklareeritud.
- Tüüpide kontrollimise süsteemi muudatused:
- Option/result jagamise hoiatamine on muudetud veakategooriaks.
- Parandatud „fn“ kutse valikulise argumendiga autofree režiimis.
- Nimekontroll on tagasi: pascal case alias’ile.
- C.xx = C.yy aliased.
- Täisarvutüüpide kuvamine lubatud vahemike (ranges) kaudu matemaatika plokkides.
- Byte-tüübi aegumine (u8 tüübi kasuks) hoiatuse määramine fn parameetrina kasutamisel.
- Generikute massiivide append meetod on parandatud.
- Teise mooduli privaatse liidese rakendamise veakontroll.
- Parandatud negatiivsete cap, len väärtuste kontroll massiivi initsialiseerimisel.
- Moodulite var ja param duplikaatide hälve muudetud veaks.
- Luba jagatud muutuja täielik ümbermääramine (vana mutex oleku säilitamisega).
- Parseri täiustused:
- Parandatud staatilise meetodi määramine anonüümsetele funktsioonidele.
- ast: parandatud struktuuri kuulutamise vormindamine koos pesastatud struktuuriga.
- Lisatud meetodid set_all + clear_all bitiväljadele „[flag]“.
- Hoiatus kasutamata importidest, isegi kui need on deklareeritud kui «import math { sin, cos }».
- Muudatused kompilaatoris:
- checker, builder, pref: toetatakse lippu «-dump-defines», et vaadata kõiki saadaval olevaid kasutaja ja süsteemi määratlusi antud programmi jaoks.
- maps: lisatud funktsioonid maps.merge() ja maps.merge_in_place().
- Standardne teek:
- builtin: lisatud meetod «unsafe { a.reset() }» kõigi massiivi baitide kiireks seadmiseks nulliks.
- math.fractions: operaatorite ülekasutamine ja vanade funktsioonide hülgamine.
- gg: parandatud alumise serva joondamine draw_rounded_rect_empty macos ja linuxis.
- crypto.bcrypt: parandus bcryptis.
- sokol: uuendatud viimasele versioonile.
- builtin: parandatud sizeof(C.BOOL) (spetsiifiline windowsile).
- math.big: parandatud vale jagamine negatiivsete arvudega.
- os: lisatud mugav viis mõnede süsteemsete signaalide ignoreerimiseks.
- os: parandatud os.ls(folder) windowsis, kui kaitstud katalooge ei saa avada.
- crypto.sha/md5/: parandatud sama hash väärtuse arvutamine mitmekordse .sum() kutsumise jaoks sha1/256/512.
- os: rakendatud os.fd_is_pending/1, os.Process.pipe_read/1, os.Process.is_pending/1.
- json2: lisatud toetust sisemistele struktuuridele.
- Veeb
- vweb: lisati mime tüübid staatilistele .md failidele.
- net.conv: lisatud funktsioonid varinttou64 ja u64tovarint, et kodeerida muutujaid positiivsete täisarvudena, nagu on kirjeldatud rfc-9000 (QUIC-i jaoks).
- net.http: toetatakse callback-funktsioonide määramist on_running, on_stopped, on_closed http.Server{}-s, samuti show_startup_message: false.
- net.http: toimetamise HTTP-proksi toetamistserverile http.fetch.
- net.http: lisada retry mehhanism http.fetch()-s, kui esinevad vältimatud soketi vead.
- wasm: rakendatud inline assembly.
- net.http: max_redirects väärtust tõstetud kuni 16.
- picoev: rakendatud raw režiim failidiskriptoritega otseseks töötamiseks.
- net.http: unix-sarnastele süsteemidele lisatud socks5 ja http(s) proksi tugi.
- ORM:
- orm: lisatud null-väärtuste ja valikuliste väljade töötlemine.
- orm: is_null/is_not_null operatsioonid on tehtud unaarseteks.
- Andmebaasi draiverid:
- pg: C kutsed on kantud .c.v failidesse.
- Native backend:
- native: toetab lippu -no-builtin (täitvate failide genereerimine < 1 KB Linuxi jaoks käsuga „v -no-builtin -b native examples/hello_world.v“).
- native: kasutab i32 int asemel.
- C-bäkkend:
- ast, native, cgen: toetatud on "$if native {}".
- vfmt:
- Nüüd eemaldab täiendavad reavahed call_expri järel ja enne struktuuri argumente.
- UTF-8 sümbolitega võtmete kasutamisel on väärtuste joondamine parandatud.
- Joondatud on ternaarseid väljendeid const plokkides.
- Tööriistakast:
- Lisatud @LOCATION toetus, et lihtsustada tõrkeotsingut ilma @FILE ja @LINE kombineerimise vajaduseta käitamise ajal.
- benchmark: lisatud uued meetodid b.record_measure/1 ja b.all_recorded_measures/0.
- ci: uuendatud github töövoogu c2v.
- strings: lisatud meetod Bulder.write_decimal/1 (kümnendarvu salvestamiseks ilma täiendava eraldamiseta).
- Olemasoleva mooduli installimine vpm abil (windows) on parandatud.
- tools.vpm: täiustatud aadresside töötlemist, mis lõppevad '.git'.
- Lisatud nõue v.mod faili olemasolu jaoks moodulite installimisel väliste linkide kaudu vpm abil.
Allikas: opennet.ru
