Dopo 40 giorni di sviluppo, è stata pubblicata una nuova versione del linguaggio di programmazione staticamente tipizzato V (vlang). Gli obiettivi principali durante la creazione di V erano la facilità di apprendimento e utilizzo, alta leggibilità, rapida compilazione, maggiore sicurezza, sviluppo efficiente, utilizzo multipiattaforma, miglior interazione con il linguaggio C, migliore gestione degli errori, funzionalità moderne e una manutenzione del software più agevole. Il codice del compilatore, delle librerie e degli strumenti correlati è open source sotto licenza MIT.
Nella nuova versione:
- Miglioramenti nel linguaggio:
- Nuovo modulo «encoding.xml» con parser, validazione e test unitari.
- Migliorato supporto per coroutines (IO, rete).
- Riduzione delle operazioni di allocazione della memoria nelle applicazioni vweb dell'80%.
- Implementazione di «@VCURRENTHASH» per sostituire «C.V_CURRENT_COMMIT_HASH».
- Iniziata la promozione di un nuovo tipo int, correlato al tipo i64 (in precedenza il tipo int era identificato con il tipo i32).
- Correzione delle regole di verifica dei tipi per il nuovo tipo int e ottimizzazione della generazione del codice.
- Modifiche all'API che rompono la compatibilità:
- Il dizionario «Request.cookies» è stato dichiarato obsoleto. Sono stati introdotti «Request.cookie()» e «Request.add_cookie()».
- Regole più rigorose per i tipi C, che ora devono sempre essere dichiarati.
- Modifiche al sistema di controllo dei tipi:
- L'avviso sulla separazione option/result è stato spostato nella categoria degli errori.
- Corretto la chiamata a «fn» con argomento opzionale in modalità autofree.
- Ripristinato il controllo dei nomi: case Pascal per gli alias.
- C.xx = alias C.yy.
- Consentita la conversione di tipi interi come intervalli (ranges) nei blocchi math.
- Avviso di deprecazione del tipo byte (a favore del tipo u8) quando utilizzato come parametro fn.
- Corretto il metodo append per gli array generici.
- Controllo degli errori nell'implementazione di interfacce private di un altro modulo.
- Corretto il controllo dei valori negativi di cap, len durante l'inizializzazione di un array.
- Trasformato l'avviso di duplicazione dei nomi dei moduli var e param in un errore.
- Consentire la riattribuzione di una variabile globale interamente (mantenendo lo stato precedente del mutex).
- Miglioramenti del parser:
- Corretto l'assegnazione di metodi statici a funzioni anonime.
- ast: corretto il formato della dichiarazione struct con struct annidato.
- Aggiunti i metodi set_all + clear_all ai campi bit «[flag]».
- Avviso di importazioni non utilizzate, anche se dichiarate tramite «import math { sin, cos }».
- Modifiche al compilatore:
- checker, builder, pref: supporto per il flag «-dump-defines» per visualizzare tutte le definizioni utente e di sistema disponibili per questo programma.
- maps: aggiunte le funzioni maps.merge() e maps.merge_in_place().
- Libreria standard:
- builtin: aggiunto il metodo «unsafe { a.reset() }» per impostare rapidamente tutti i byte in un array a 0.
- math.fractions: utilizzo dell'overloading degli operatori e abbandono delle vecchie funzioni.
- gg: corretta l'allineamento del bordo inferiore draw_rounded_rect_empty su macos e linux.
- crypto.bcrypt: risolto un errore in bcrypt.
- sokol: aggiornato all'ultima versione.
- builtin: corretta la dimensione di sizeof(C.BOOL) (specifica per windows).
- math.big: correzione della divisione errata con numeri negativi.
- os: aggiunto un modo conveniente per ignorare alcuni segnali di sistema.
- os: corretta os.ls(folder) in windows, quando una cartella protetta non può essere aperta.
- crypto.sha/md5/: corretta la computazione di valori hash identici durante le chiamate ripetute a .sum() per sha1/256/512.
- os: implementati os.fd_is_pending/1, os.Process.pipe_read/1, os.Process.is_pending/1.
- json2: aggiunto supporto per strutture nidificate.
- Web
- vweb: aggiunti tipi mime per i file statici .md.
- net.conv: aggiunte le funzioni varinttou64 e u64tovarint per la codifica di interi senza segno variabili, come descritto in rfc-9000 (per QUIC).
- net.http: supporto per specificare le funzioni di callback on_running, on_stopped, on_closed in http.Server{}, oltre a show_startup_message: false.
- net.http: supporto per la trasmissione di HTTP proxy in http.fetch.server net.http: aggiungere un meccanismo di ripetizione in http.fetch() per errori di socket inevitabili.
- wasm: implementato assembly inline.
- net.http: aumentato il valore max_redirects fino a 16.
- picoev: implementazione della modalità raw per il lavoro diretto con i descrittori di file.
- net.http: aggiunto supporto per proxy socks5 e http(s) per sistemi unix-like.
- ORM:
- orm: aggiunta gestione dei valori null e dei campi opzionali.
- orm: operazioni is_null/is_not_null rese unarie.
- Driver di database:
- pg: chiamate c trasferite in file .c.v.
- Native backend:
- native: supporto per il flag -no-builtin (generazione di file eseguibili < 1 KB Linux usando «v -no-builtin -b native examples/hello_world.v»).
- native: uso di i32 anziché int.
- C backend:
- ast, native, cgen: aggiunto supporto per «$if native {}».
- vfmt: ora rimuove le righe vuote aggiuntive dopo call_expr e prima degli argomenti della struttura.
- vfmt:
- Ora rimuove gli spazi vuoti aggiuntivi dopo call_expr e prima degli argomenti della struttura.
- Corretto l'allineamento dei valori durante l'uso di chiavi con caratteri utf8.
- Allineamento delle espressioni ternarie nei blocchi const.
- Strumenti:
- Aggiunta la supporto per @LOCATION, per un debugging più comodo senza dover combinare @FILE e @LINE durante l'esecuzione.
- benchmark: aggiunti nuovi metodi b.record_measure/1 e b.all_recorded_measures/0.
- ci: aggiornato il workflow github c2v.
- strings: aggiunto il metodo Bulder.write_decimal/1 (per scrivere numeri decimali, senza allocazioni addizionali).
- Corretto l'installazione di un modulo già esistente tramite vpm (windows).
- tools.vpm: migliorato il trattamento degli indirizzi che terminano con «.git».
- Aggiunto il requisito di un file v.mod per installare moduli tramite link esterni usando vpm.
Fonte: opennet.ru
