in einen offenen Compiler fĂŒr V ist eine kompilierte Sprache mit statischer Typisierung, die sich darauf konzentriert, die Wartung der Entwicklung zu vereinfachen und eine sehr hohe Kompilierungsgeschwindigkeit zu gewĂ€hrleisten. Der Code des Compilers, der Bibliotheken und der zugehörigen Werkzeuge unter der MIT-Lizenz.
Ă€hnelt in vielerlei Hinsicht der Programmiersprache Go und leiht sich einige Konstruktionen aus Oberon, Rust und Swift. Die Sprache ist maximal vereinfacht, und laut dem Entwickler reicht eine Lernzeit von etwa 30 Minuten aus, um die grundlegenden Konzepte zu verstehen. Trotzdem bleibt die Sprache leistungsstark genug, um die gleichen Aufgaben zu erfĂŒllen wie andere Programmiersprachen (z. B. stehen Bibliotheken fĂŒr 2D/3D-Grafik, GUI-Entwicklung und Webanwendungen zur VerfĂŒgung).
Die Schaffung einer neuen Programmiersprache wurde durch den Wunsch inspiriert, die charakteristischen Merkmale der Go-Sprache zu kombinieren: die Einfachheit der Syntax, die Geschwindigkeit der Kompilierung, die einfache Parallelisierung von Operationen, PortabilitĂ€t sowie Wartbarkeit des Codes, mit der Leistung von C/C++, der Sicherheit von Rust und der Generierung von Maschinencode zur Kompilierungszeit von Zig. Zudem wollte ich einen kompakten und schnellen Compiler entwickeln, der ohne externe AbhĂ€ngigkeiten arbeitet, die globale Sichtbarkeit (globale Variablen) vermeidet und die Möglichkeit zur "heiĂen" Neu kompilierung des Codes bietet.
Im Vergleich zu C++ ist die neue Sprache deutlich einfacher, ermöglicht eine Geschwindigkeit der Kompilierung von bis zu 400 Mal und nutzt Praktiken fĂŒr sicheres Programmieren. Sie ist frei von Problemen mit undefiniertem Verhalten und bietet eingebaute Werkzeuge zur Parallelisierung von Operationen. Im Vergleich zu Python ist die Sprache V schneller, einfacher, sicherer und leichter zu pflegen. Im Vergleich zu Go gibt es in V keine globalen Variablen, keinen Null-Wert; alle Variablenwerte mĂŒssen immer definiert sein, alle Objekte sind standardmĂ€Ăig unverĂ€nderlich, es wird nur eine Art von Zuweisungen unterstĂŒtzt (âa := 0â), der Runtime und die GröĂe der finalen Ausgabedateien sind erheblich kompakter, es gibt volle PortabilitĂ€t mit C, keinen Garbage Collector, schnellere Serialisierung und die Möglichkeit der String-Interpolation (âprintln(â$foo: $bar.bazâ)â).
fn main() {
areas := [âgameâ, âwebâ, âtoolsâ, âscienceâ, âsystemsâ, âGUIâ, âmobileâ]
a := 10
if true {
a := 20
}
for area in areas {
println(âHello, $area developers!â)
}
}
Projektmerkmale:
- Ein kompakter und schneller Compiler, der zusammen mit der Standardbibliothek etwa 400 KB benötigt. Die hohe Kompiliergeschwindigkeit wird durch die direkte Maschinenkode-Generierung und ModularitĂ€t erreicht. Die Kompiliergeschwindigkeit betrĂ€gt etwa 1,2 Millionen Zeilen Code pro Sekunde auf einem CPU-Kern (es wird darauf hingewiesen, dass wĂ€hrend der AusfĂŒhrung V C verwenden kann, wodurch die Geschwindigkeit auf 100.000 Zeilen pro Sekunde sinkt). Der Selbstbau des Compilers, der ebenfalls in V geschrieben ist (es gibt auch eine Referenzversion in Go), dauert etwa 0,4 Sekunden. Bis Ende des Jahres wird mit der Fertigstellung zusĂ€tzlicher Optimierungen gerechnet, die die Bauzeit des Compilers auf 0,15 Sekunden reduzieren sollen. Laut den Tests des Entwicklers benötigt der Selbstbau von Go 512 MB Speicherplatz und dauert etwa anderthalb Minuten, Rust benötigt 30 GB und 45 Minuten, GCC â 8 GB und 50 Minuten, Clang â 90 GB und 25 Minuten.
Swift â 70 GB und 90 Minuten; - Programme werden in ausfĂŒhrbare Dateien ohne externe AbhĂ€ngigkeiten kompiliert. Die GröĂe der ausfĂŒhrbaren Datei eines einfachen HTTP-Servers nach der Erstellung betrĂ€gt nur 65 KB;
- Die Leistung kompilierter Anwendungen ist auf dem Niveau von Programmbauten in C;
- Nahtlose Interaktion mit C-Code ohne zusÀtzliche Overheads. Funktionen in C können aus V-Code aufgerufen werden und umgekehrt, V-Code kann in allen Sprachen aufgerufen werden, die mit C kompatibel sind;
- UnterstĂŒtzung fĂŒr die Ăbersetzung von C/C++-Projekten in die V-Sprache. Zum Ăbersetzen wird der Parser von Clang verwendet. Nicht alle Funktionen des C-Standards werden derzeit unterstĂŒtzt, aber die aktuellen Möglichkeiten des Transformators sind bereits ausreichend fĂŒr die V-Sprache fĂŒr das Spiel DOOM. Der C++-Translater befindet sich noch in der Anfangsphase der Entwicklung;
- Eingebaute UnterstĂŒtzung fĂŒr Serialisierung, unabhĂ€ngig von der Laufzeit;
- Minimierung von Speicherallokationsoperationen;
- Sicherheitsgarantie: Keine NULL-Werte, keine globalen Variablen, keine undefinierten Werte und keine Ăberschreibung von Variablen. Eingebaute Mittel zur ĂberprĂŒfung von PufferĂŒberlĂ€ufen. UnterstĂŒtzung von generischen Funktionen. StandardmĂ€Ăig unverĂ€nderliche Objekte und Strukturen;
- Möglichkeit der "heiĂen" Neuladen von Code (Reflexion von Ănderungen im Code zur Laufzeit ohne Neukompilierung);
- Ressourcen fĂŒr Multithreading. Ăhnlich wie in der Programmiersprache Go wird zur Erstellung eines neuen AusfĂŒhrungs-threads die Konstruktion ârun foo()â verwendet (analog zu âgo foo()â). ZukĂŒnftig ist die UnterstĂŒtzung von Goroutines und einem Thread-Scheduler geplant;
- UnterstĂŒtzung von Betriebssystemen wie Windows, macOS, Linux und *BSD. Bis Ende des Jahres ist die UnterstĂŒtzung von Android und iOS geplant;
- Speicherverwaltung zur Kompilierzeit (Ă€hnlich wie in Rust), ohne Verwendung von Garbage Collection;
- VerfĂŒgbarkeit eines plattformĂŒbergreifenden Toolkits fĂŒr die Grafikdarstellung, das fĂŒr das Rendering GDI+/Cocoa und OpenGL verwendet. Geplant ist die UnterstĂŒtzung von DirectX, Vulkan und Metal APIs. Es gibt Ressourcen fĂŒr die Arbeit mit 3D-Objekten, Skelettanimation und Kamerasteuerung;
- Eine Bibliothek zur Erstellung von grafischen BenutzeroberflĂ€chen mit nativen Designelementen fĂŒr jedes Betriebssystem. In Windows wird WinAPI/GDI+ verwendet, in macOS â Cocoa, in Linux â ein eigener Widget-Satz. Die Bibliothek wird bereits bei der Entwicklung eingesetzt â einem Client fĂŒr Slack, Skype, Gmail, Twitter und Facebook;
Es wird die Entwicklung einer Ă€hnlichen Anwendung wie Delphi fĂŒr das Design von BenutzeroberflĂ€chen geplant, inklusive einem deklarativen API, das vergleichbar mit SwiftUI und React Native ist, sowie die UnterstĂŒtzung fĂŒr die Erstellung von mobilen Anwendungen fĂŒr iOS und Android;

- Es gibt ein integriertes Web-Framework, das zur Erstellung der Webseite, des Forums und des Entwicklerblogs des Projekts verwendet wird. Die Vorcompilierung von HTML-Vorlagen wird unterstĂŒtzt, ohne dass diese bei jedem Request verarbeitet werden mĂŒssen;
- UnterstĂŒtzung fĂŒr Cross-Compilation. Um eine ausfĂŒhrbare Datei fĂŒr Windows zu erstellen, genĂŒgt es, âv -os windowsâ auszufĂŒhren, und fĂŒr Linux âv -os linuxâ (Cross-Compilation fĂŒr macOS wird spĂ€ter erwartet). Die Cross-Compilation funktioniert auch fĂŒr grafische Anwendungen;
- Ein integrierter AbhĂ€ngigkeitsmanager, Paketmanager und Build-Tool. Um das Programm zu kompilieren, reicht es, âv .â auszufĂŒhren, ohne make oder externe Tools nutzen zu mĂŒssen. Zum Installieren zusĂ€tzlicher Bibliotheken genĂŒgt es, beispielsweise âv get sqliteâ auszufĂŒhren;
- Plugins fĂŒr die Entwicklung in der Sprache V in den Editoren vorhanden und .
Entwicklung von der Gemeinschaft , da der veröffentlichte Code gezeigt hat, dass noch nicht alle angekĂŒndigten Funktionen umgesetzt sind und zur Umsetzung aller PlĂ€ne eine sehr groĂe Menge an Arbeit erforderlich ist.
AuĂerdem war im Repository ursprĂŒnglich nicht funktionierender Code, der Probleme beim Build und bei der AusfĂŒhrung aufweist. Es wird angenommen, dass der Autor noch nicht den Punkt erreicht hat, an dem man , gemÀà dem 20 % des Aufwands 80 % des Ergebnisses liefern, wĂ€hrend die restlichen 80 % des Aufwands nur 20 % des Ergebnisses bringen, bemerkt.
In der Fehlerverfolgung des Projekts V wurden inzwischen etwa 10 Nachrichten mit niedriger CodequalitĂ€t entfernt, zum Beispiel wird auf die Verwendung von C-Inserts und die Nutzung von Funktionen in der Bibliothek hingewiesen, die das Verzeichnis mit dem Befehl rm ĂŒber einen Aufruf von os.system(«rm -rf $path») löschen. Der Autor des Projekts , dass er lediglich die Nachrichten entfernt hat, (wĂ€hrend die Ănderungen, die die Berechtigung zur Kritik bestĂ€tigen, in ).
Quelle: opennet.ru

