Rilascio del linguaggio di programmazione V 0.4.3

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

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster