Després de 40 dies de desenvolupament, s'ha publicat una nova versió del llenguatge de programació V (vlang) escrit de manera estàtica. Els objectius principals en la creació de V eren la facilitat d'aprenentatge i ús, alta llegibilitat, compilació ràpida, augment de la seguretat, desenvolupament eficient, ús multiplataforma, millora de la interoperabilitat amb el llenguatge C, millor maneig d'errors, capacitats modernes i programes més fàcils de mantenir. El codi del compilador, les biblioteques i les eines relacionades són de codi obert sota la llicència MIT.
En la nova versió:
- Millores del llenguatge:
- Nou mòdul “encoding.xml amb analitzador, validació, proves unitàries.
- Suport millorat per a couroutines (IO, xarxa).
- Redueix un 80% les operacions d'assignació de memòria a les aplicacions vweb.
- Implementació de "@VCURRENTHASH" per substituir "C.V_CURRENT_COMMIT_HASH".
- S'ha iniciat la promoció d'un nou tipus int, associat al tipus i64 (anteriorment, el tipus int s'identificava amb el tipus i32).
- S'han corregit les regles de comprovació de tipus per al nou tipus int i la generació de codi optimitzada.
- Canvis de l'API que trenquen la compatibilitat:
- El diccionari "Request.cookies" ha quedat obsolet. Substituït per "Request.cookie()" i "Request.add_cookie()".
- Regles més estrictes per als tipus C, que ara s'han de declarar sempre.
- Canvis del sistema de verificació de tipus:
- L'avís sobre la divisió opció/resultat s'ha mogut a una categoria d'error.
- Arregla la crida a "fn" amb un argument opcional en mode lliure.
- La comprovació de noms ha tornat: pascal per als àlies.
- C.xx = Àlies C.yy.
- Permet l'emissió de tipus enters com a intervals en blocs matemàtics.
- Advertència sobre l'abandonament del tipus byte (a favor del tipus u8) quan s'utilitza com a paràmetre fn.
- Corregiu el mètode d'afegit per a matrius genèriques.
- Comprovació d'un error en la implementació de la interfície privada d'un altre mòdul.
- S'ha solucionat la comprovació dels valors negatius de cap i len quan s'iniciava una matriu.
- Convertint l'avís sobre els noms dels mòduls var i paràmetres duplicats en un error.
- Permet la reassignació de tota la variable compartida (mantenint l'estat anterior del mutex).
- Millores de l'analitzador:
- S'ha corregit l'assignació d'un mètode estàtic a funcions anònimes.
- ast: S'ha corregit el format de la declaració d'estructura amb estructura imbricada.
- S'han afegit mètodes set_all + clear_all als camps de bits "[bandera]".
- Adverteix sobre les importacions no utilitzades, encara que es declarin amb "import math { sin, cos }".
- Canvis del compilador:
- checker, builder, pref: admet el senyalador "-dump-defines" per veure totes les definicions d'usuari i sistema disponibles per a un programa determinat.
- maps: s'han afegit funcions maps.merge() i maps.merge_in_place().
- Biblioteca estàndard:
- incorporat: s'ha afegit el mètode "insegur {a.reset()}" per establir ràpidament tots els bytes d'una matriu a 0.
- math.fractions: utilitza la sobrecàrrega d'operadors i abandona les funcions antigues.
- gg: Corregiu l'alineació de la vora inferior draw_rounded_rect_empty a macos i linux.
- crypto.bcrypt: error corregit a bcrypt.
- sokol: actualitzat a la darrera versió
- incorporat: mida fixa de (C.BOOL) (específic de Windows).
- math.big: corregeix la divisió incorrecta amb nombres negatius.
- os: S'ha afegit una manera convenient d'ignorar alguns senyals del sistema.
- os: arregla os.ls(carpeta) a Windows quan el directori protegit no es pot obrir.
- crypto.sha/md5/: S'ha corregit el càlcul dels mateixos valors hash quan es crida a .sum() diverses vegades per a sha1/256/512.
- os: implementat os.fd_is_pending/1, os.Process.pipe_read/1, os.Process.is_pending/1.
- json2: suport afegit per a estructures imbricades.
- Web
- vweb: s'han afegit tipus MIME per a fitxers .md estàtics.
- net.conv: S'han afegit les funcions varinttou64 i u64tovarint per a la codificació variable dels enters sense signe descrits a rfc-9000 (per a QUIC).
- net.http: admet l'especificació de funcions de devolució de trucada on_running, on_stopped, on_closed a http.Server{}, així com show_startup_message: false.
- net.http: Suport de pas a través del proxy HTTPservidor a http.fetch.
- net.http: afegiu un mecanisme de reintent a http.fetch() per a errors de socket inevitables.
- wasm: muntatge en línia implementat.
- net.http: valor max_redirects augmentat a 16.
- picoev: implementació del mode raw per al treball directe amb descriptors de fitxers.
- net.http: suport afegit per als servidors intermediaris socks5 i http(s) per a sistemes semblants a Unix.
- ORM:
- orm: tractament afegit de valors nuls i camps opcionals.
- orm: les operacions is_null/is_not_null es fan unàries.
- Controladors de bases de dades:
- pg: les trucades C s'han mogut a fitxers .cv.
- Backend natiu:
- natiu: suport -no-builtin flag (generar executables Linux de <1KB amb "v -no-builtin -b exemples natius/hello_world.v").
- natiu: utilitzeu i32 en lloc d'int.
- C-backend:
- ast, native, cgen: s'ha afegit suport per a "$if native {}".
- vfmt:
- Ara elimina els salts de línia addicionals després de call_expr i abans dels arguments de l'estructura.
- S'ha corregit l'alineació de valors quan s'utilitzen claus amb caràcters uft8.
- Alineació d'expressions ternàries en blocs const.
- Eines:
- S'ha afegit el suport @LOCATION per facilitar la depuració sense haver de combinar @FILE i @LINE en temps d'execució.
- benchmark: s'han afegit nous mètodes b.record_measure/1 i b.all_recorded_measures/0.
- ci: flux de treball github c2v actualitzat.
- cadenes: s'ha afegit el mètode Bulder.write_decimal/1 (per escriure un nombre decimal, sense assignacions addicionals).
- S'ha solucionat la instal·lació d'un mòdul existent mitjançant vpm (windows).
- tools.vpm: treball millorat amb adreces acabades en ".git".
- S'ha afegit un requisit per a un fitxer v.mod per instal·lar mòduls mitjançant enllaços externs mitjançant vpm.
Font: opennet.ru
