Linguaggio di programmazione V open source

Tradotto nella categoria del compilatore aperto per lingua V. V è un linguaggio compilato a macchina tipizzato staticamente che si concentra sul rendere lo sviluppo più facile da mantenere e molto veloce da compilare. Codice del compilatore, librerie e strumenti correlati è aperto con licenza MIT.

La sintassi di V è molto simile a Go, prendendo in prestito alcuni costrutti da Oberon, Rust e Swift. Il linguaggio è semplificato al massimo e, secondo lo sviluppatore, bastano 30 minuti di studio per apprendere le basi documentazione. Allo stesso tempo, il linguaggio rimane abbastanza potente e può essere utilizzato per eseguire le stesse attività di quando si utilizzano altri linguaggi di programmazione (ad esempio, sono disponibili librerie per la grafica 2D/3D, la creazione di GUI e applicazioni web).

La creazione di un nuovo linguaggio è stata motivata dal desiderio di ottenere una combinazione tra la semplicità della sintassi del linguaggio Go, la velocità di compilazione, la facilità di parallelizzazione delle operazioni, la portabilità e la manutenibilità del codice con le prestazioni di C/C++, la sicurezza di Rust e la generazione del codice macchina in fase di compilazione Zig. Volevo anche ottenere un compilatore compatto e veloce che potesse funzionare senza dipendenze esterne, eliminare l'ambito globale (variabili globali) e fornire la possibilità di ricaricare "a caldo" il codice.

Rispetto al C++, il nuovo linguaggio è significativamente più semplice, fornisce una velocità di compilazione più rapida (fino a 400 volte), pratica tecniche di programmazione sicure, è esente da problemi con comportamenti indefiniti e fornisce strumenti integrati per la parallelizzazione delle operazioni. Rispetto a Python, V è più veloce, più semplice, più sicuro e più gestibile. Rispetto a Go, V non ha variabili globali, nessun valore nullo, tutti i valori delle variabili devono essere sempre definiti, tutti gli oggetti sono immutabili per impostazione predefinita, è supportato solo un tipo di assegnazione (“a := 0”), un sistema significativamente più compatto runtime e la dimensione dei file eseguibili risultanti, la presenza di portabilità diretta da C, l'assenza di un garbage collector, una serializzazione più veloce, la capacità di interpolare stringhe (“println('$foo: $bar.baz')”).

fn principale() {
aree := ['gioco', 'web', 'strumenti', 'scienza', 'sistemi', 'GUI', 'mobile'] a := 10
se è vero {
a := 20
}
per l'area nelle aree {
println('Ciao, sviluppatori di $area!')
}
}

Caratteristiche del progetto:

  • Compilatore compatto e veloce, che insieme alla libreria standard occupa circa 400 KB. L'elevata velocità di compilazione è ottenuta attraverso la generazione diretta del codice macchina e la modularità. La velocità di compilazione è di circa 1.2 milioni di righe di codice al secondo su un core della CPU (si noti che durante il funzionamento V può utilizzare C, quindi la velocità scende a 100mila righe al secondo). L'autoassemblaggio del compilatore, anch'esso scritto nel linguaggio V (esiste anche una versione di riferimento in Go), richiede circa 0.4 secondi. Entro la fine dell'anno si prevede il completamento del lavoro su ulteriori ottimizzazioni, che ridurranno il tempo di creazione del compilatore a 0.15 secondi. A giudicare dai test condotti dallo sviluppatore, l'autoassemblaggio di Go richiede 512 MB di spazio su disco e viene eseguito in un minuto e mezzo, Rust richiede 30 GB e 45 minuti, GCC - 8 GB e 50 minuti, Clang - 90 GB e 25 minuti,
    Swift: 70 GB e 90 minuti;

  • I programmi vengono compilati in file eseguibili senza dipendenze esterne. La dimensione del file eseguibile di un semplice server http dopo l'assemblaggio è di soli 65 KB;
  • Le prestazioni delle applicazioni compilate sono al livello degli assiemi di programmi C;
  • La capacità di interagire perfettamente con il codice C, senza costi aggiuntivi. Le funzioni nel linguaggio C possono essere chiamate dal codice nel linguaggio V e viceversa, il codice nel linguaggio V può essere chiamato in qualsiasi linguaggio compatibile con C;
  • Supporto per la traduzione di progetti C/C++ in una rappresentazione nel linguaggio V. Per la traduzione viene utilizzato un parser di Clang. Non tutte le funzionalità dello standard C sono ancora supportate, ma le attuali capacità del traduttore sono già sufficienti traduzione nel linguaggio del gioco V DOOM. Il traduttore C++ è ancora in una fase iniziale di sviluppo;
  • Supporto di serializzazione integrato, senza essere vincolato al runtime;
  • Minimizzare le operazioni di allocazione della memoria;
  • Garantire la sicurezza: niente NULL, variabili globali, valori indefiniti e ridefinizione delle variabili. Controllo del sovraccarico del buffer integrato. Supporto per funzioni generiche (Generico). Oggetti e strutture che non possono essere modificati per impostazione predefinita;
  • Possibilità di ricaricare il codice “a caldo” (riflettendo le modifiche al codice al volo senza ricompilazione);
  • Strumenti per garantire il multithreading. Proprio come nel linguaggio Go, un costrutto come “run foo()” viene utilizzato per avviare un nuovo thread di esecuzione (simile a “go foo()”). In futuro è previsto il supporto per le goroutine e uno scheduler di thread;
  • Supporto per sistemi operativi Windows, macOS, Linux, *BSD. Si prevede di aggiungere il supporto per Android e iOS entro la fine dell'anno;
  • Gestione della memoria in fase di compilazione (come in Rust), senza utilizzare un garbage collector;
  • Disponibilità di un toolkit multipiattaforma per l'output grafico, utilizzando GDI+/Cocoa e OpenGL per il rendering (è previsto il supporto per DirectX, Vulkan e Metal API). Esistono strumenti per lavorare con oggetti 3D, animazione scheletrica e controllo della telecamera;
  • Disponibilità di una libreria per generare interfacce grafiche con elementi di design nativi per ciascun sistema operativo. Windows utilizza WinAPI/GDI+, macOS utilizza Cocoa e Linux utilizza il proprio set di widget. La libreria è già utilizzata in fase di sviluppo Volt — client per Slack, Skype, Gmail, Twitter e Facebook;

    Il piano è quello di creare un'applicazione di progettazione dell'interfaccia simile a Delphi, fornire un'API dichiarativa simile a SwiftUI e React Native e fornire supporto per la creazione di applicazioni mobili per iOS e Android;

    Linguaggio di programmazione V open source

  • Disponibilità di un framework web integrato, utilizzato per creare un sito web, un forum e un blog per gli sviluppatori del progetto. È supportata la precompilazione dei modelli HTML, senza elaborarli su ogni richiesta;
  • Supporto per la compilazione incrociata. Per creare il file eseguibile per Windows, è sufficiente eseguire "v -os windows" e per Linux - "v -os linux" (il supporto della compilazione incrociata per macOS è previsto in seguito). La compilazione incrociata funziona anche per le applicazioni grafiche;
  • Gestore delle dipendenze, gestore pacchetti e strumenti di creazione integrati. Per compilare il programma è sufficiente eseguire “v.”, senza utilizzare make o utilità esterne. Per installare librerie aggiuntive basta eseguire, ad esempio, “v get sqlite”;
  • Disponibilità di plugin per lo sviluppo nel linguaggio V negli editor Codice VS. и Vim.

Разработка percepito comunità con scetticismo, poiché il codice pubblicato ha dimostrato che non tutte le capacità dichiarate sono state ancora implementate e che è necessaria una grande quantità di lavoro per implementare tutti i piani.
Inoltre, inizialmente il repository aveva collocato codice non funzionante che presenta problemi con l'assemblaggio e l'esecuzione. Si presume che l'autore non abbia ancora raggiunto la fase in cui iniziano a notarlo Legge di Pareto, secondo cui il 20% dello sforzo produce l’80% del risultato, e il restante 80% dello sforzo produce solo il 20% del risultato.

Nel frattempo, dal bug tracker di Project V sono stati rimossi circa 10 post dimostrazione il codice di bassa qualità, ad esempio, indica l'uso di inserti C e l'uso nella libreria di funzioni per eliminare la directory del comando rm tramite la chiamata os.system("rm -rf $path"). Autore del progetto suddettoche ha cancellato solo i messaggi, pubblicato troll (con modifiche che confermano la fondatezza della critica, остались в modificare la cronologia).

Fonte: opennet.ru

Aggiungi un commento