Llenguatge de programació V de codi obert

Traduït a la categoria de compilador obert per llengua V. V és un llenguatge compilat per màquina de tipus estàtica que se centra a fer que el desenvolupament sigui més fàcil de mantenir i molt ràpid de compilar. Codi del compilador, biblioteques i eines relacionades obert sota la llicència MIT.

La sintaxi de V és molt semblant a Go, agafant algunes construccions d'Oberon, Rust i Swift. El llenguatge es simplifica al màxim i, segons el desenvolupador, n'hi ha prou amb 30 minuts d'estudi per aprendre els fonaments bàsics. documentació. Al mateix temps, el llenguatge segueix sent bastant potent i es pot utilitzar per realitzar les mateixes tasques que quan s'utilitzen altres llenguatges de programació (per exemple, les biblioteques estan disponibles per a gràfics 2D/3D, la creació de GUI i aplicacions web).

La creació d'un nou llenguatge va ser motivada pel desig d'aconseguir una combinació de la simplicitat de sintaxi del llenguatge Go, la velocitat de compilació, la facilitat de paral·lelització d'operacions, la portabilitat i la mantenibilitat del codi amb el rendiment de C/C++, la seguretat de Rust i la generació de codi màquina en l'etapa de compilació Zig. També volia aconseguir un compilador compacte i ràpid que pogués funcionar sense dependències externes, desfer-se de l'abast global (variables globals) i proporcionar la possibilitat de tornar a carregar el codi "calent".

En comparació amb C++, el nou llenguatge és significativament més senzill, proporciona una velocitat de compilació més ràpida (fins a 400 vegades), practica tècniques de programació segures, està lliure de problemes amb un comportament no definit i proporciona eines integrades per paral·lelitzar operacions. En comparació amb Python, V és més ràpid, més senzill, més segur i més fàcil de mantenir. En comparació amb Go, V no té variables globals, no té nuls, tots els valors de les variables sempre s'han de definir, tots els objectes són immutables per defecte, només s'admet un tipus d'assignació ("a := 0"), una manera significativament més compacta temps d'execució i la mida dels fitxers executables resultants, la presència de portabilitat directa des de C, l'absència d'un col·lector d'escombraries, una serialització més ràpida, la capacitat d'interpolar cadenes (“println('$foo: $bar.baz')”).

fn principal() {
àrees := ['joc', 'web', 'eines', 'ciència', 'sistemes', 'GUI', 'mòbil'] a := 10
si és cert {
a := 20
}
per a l'àrea de les zones {
println('Hola, desenvolupadors de $àrea!')
}
}

Característiques del projecte:

  • Compilador compacte i ràpid, que juntament amb la biblioteca estàndard ocupa uns 400 KB. S'aconsegueix una alta velocitat de compilació mitjançant la generació directa de codi màquina i modularitat. La velocitat de compilació és d'aproximadament 1.2 milions de línies de codi per segon en un nucli de CPU (cal assenyalar que durant l'operació V pot utilitzar C, llavors la velocitat baixa a 100 mil línies per segon). L'autoassemblatge del compilador, que també està escrit en llenguatge V (també hi ha una versió de referència a Go), triga aproximadament 0.4 segons. A finals d'any, s'espera que s'acabi el treball en optimitzacions addicionals, que reduirà el temps de creació del compilador a 0.15 segons. A jutjar per les proves realitzades pel desenvolupador, l'autoassemblatge de Go requereix 512 MB d'espai en disc i s'executa en un minut i mig, Rust requereix 30 GB i 45 minuts, GCC - 8 GB i 50 minuts, Clang - 90 GB i 25 minuts,
    Swift - 70 GB i 90 minuts;

  • Els programes es compilen en fitxers executables sense dependències externes. La mida del fitxer executable d'un servidor http simple després del muntatge és de només 65 KB;
  • El rendiment de les aplicacions compilades és a nivell d'assemblatges de programes C;
  • La capacitat d'interaccionar perfectament amb el codi C, sense sobrecàrrec addicional. Les funcions en llenguatge C es poden cridar des del codi en llenguatge V, i viceversa, el codi en llenguatge V es pot cridar en qualsevol llenguatge compatible amb C;
  • Suport per traduir projectes C/C++ a una representació en el llenguatge V. Per a la traducció s'utilitza un analitzador de Clang. Encara no s'admeten totes les funcions de l'estàndard C, però les capacitats actuals del traductor ja són suficients traducció en l'idioma del joc V DOOM. El traductor de C++ encara es troba en una fase inicial de desenvolupament;
  • Suport de serialització integrat, sense estar lligat al temps d'execució;
  • Minimització de les operacions d'assignació de memòria;
  • Garantint la seguretat: sense NULL, variables globals, valors indefinits i redefinició de variables. Comprovació d'excés de memòria intermèdia integrada. Suport per a funcions genèriques (Generic). Objectes i estructures que no es poden canviar per defecte;
  • Possibilitat de recàrrega de codi "calent" (que reflecteix els canvis de codi sobre la marxa sense recompilació);
  • Eines per garantir el multithreading. Igual que en el llenguatge Go, s'utilitza una construcció com "run foo()" per iniciar un nou fil d'execució (similar a "go foo()"). En el futur, es preveu suport per a goroutines i un programador de fils;
  • Suport per a sistemes operatius Windows, macOS, Linux, *BSD. Està previst afegir suport per a Android i iOS a finals d'any;
  • Gestió de memòria en temps de compilació (com a Rust), sense utilitzar un col·lector d'escombraries;
  • Disponibilitat d'un conjunt d'eines multiplataforma per a la sortida gràfica, utilitzant GDI+/Cocoa i OpenGL per a la representació (es preveu suport per a les API de DirectX, Vulkan i Metal). Hi ha eines per treballar amb objectes 3D, animació esquelètica i control de càmera;
  • Disponibilitat d'una biblioteca per generar interfícies gràfiques amb elements de disseny propis de cada SO. Windows utilitza WinAPI/GDI+, macOS utilitza Cocoa i Linux utilitza el seu propi conjunt de ginys. La biblioteca ja s'utilitza en desenvolupament volt — client per a Slack, Skype, Gmail, Twitter i Facebook;

    El pla és crear una aplicació de disseny d'interfície semblant a Delphi, proporcionar una API declarativa similar a SwiftUI i React Native i donar suport per crear aplicacions mòbils per a iOS i Android;

    Llenguatge de programació V de codi obert

  • Disponibilitat d'un marc web integrat, que s'utilitza per crear un lloc web, un fòrum i un bloc per als desenvolupadors del projecte. S'admet la compilació prèvia de plantilles HTML, sense processar-les a cada sol·licitud;
  • Suport de compilació creuada. Per crear el fitxer executable per a Windows, només cal que executeu "v -os windows" i per a Linux - "v -os linux" (més endavant s'espera el suport de compilació creuada per a macOS). La compilació creuada també funciona per a aplicacions gràfiques;
  • Gestor de dependències, gestor de paquets i eines de compilació integrats. Per crear el programa, només cal que executeu "v.", sense utilitzar make ni utilitats externes. Per instal·lar biblioteques addicionals, només cal que executeu, per exemple, “v get sqlite”;
  • Disponibilitat de connectors per al desenvolupament en llenguatge V als editors Codi VS и empenta.

Desenvolupament percebuda comunitat amb escepticisme, ja que el codi publicat mostrava que encara no s'han implementat totes les capacitats declarades i que es requereix una gran quantitat de treball per implementar tots els plans.
A més, inicialment tenia el repositori publicat codi trencat que té problemes amb el muntatge i l'execució. Se suposa que l'autor encara no ha arribat a l'etapa en què es comencen a notar llei de Pareto, segons la qual el 20% de l'esforç produeix el 80% del resultat, i el 80% restant només produeix el 20% del resultat.

Mentrestant, el rastrejador d'errors del Projecte V s'ha eliminat unes 10 publicacions demostració codi de baixa qualitat, per exemple, indica l'ús d'insercions C i l'ús a la biblioteca de funcions per esborrar el directori de l'ordre rm mitjançant la crida os.system("rm -rf $path"). Autor del projecte va dirque només va esborrar els missatges, publicat troll (amb canvis que confirmen la validesa de la crítica, es va quedar в editar l'historial).

Font: opennet.ru

Afegeix comentari