V-Programmiersprache Open Source

Übersetzt in die Kategorie der offenen Compiler für Sprache V. V ist eine statisch typisierte, maschinenkompilierte Sprache, die sich darauf konzentriert, die Entwicklung einfacher zu warten und sehr schnell zu kompilieren. Compiler-Code, Bibliotheken und zugehörige Tools ist offen unter der MIT-Lizenz.

Die Syntax von V ist der von Go sehr ähnlich und übernimmt einige Konstrukte von Oberon, Rust und Swift. Die Sprache ist so weit wie möglich vereinfacht und laut Entwickler reichen 30 Minuten Lernen aus, um die Grundlagen zu erlernen Dokumentation. Gleichzeitig bleibt die Sprache recht leistungsfähig und kann für die gleichen Aufgaben wie bei der Verwendung anderer Programmiersprachen verwendet werden (z. B. stehen Bibliotheken für 2D/3D-Grafiken, die Erstellung von GUIs und Webanwendungen zur Verfügung).

Die Schaffung einer neuen Sprache wurde durch den Wunsch ausgelöst, eine Kombination aus der Einfachheit der Syntax, der Kompilierungsgeschwindigkeit, der einfachen Parallelisierung von Operationen, der Portabilität und Wartbarkeit des Codes der Go-Sprache mit der Leistung von C/C++, der Sicherheit von Rust und anderen zu erreichen die Generierung von Maschinencode in der Zig-Kompilierungsphase. Außerdem wollte ich einen kompakten und schnellen Compiler haben, der ohne externe Abhängigkeiten funktioniert, den globalen Bereich (globale Variablen) entfernt und die Möglichkeit bietet, den Code „heiß“ neu zu laden.

Im Vergleich zu C++ ist die neue Sprache wesentlich einfacher, bietet eine schnellere Kompilierungsgeschwindigkeit (bis zum 400-fachen), wendet sichere Programmiertechniken an, weist keine Probleme mit undefiniertem Verhalten auf und bietet integrierte Tools zur Parallelisierung von Vorgängen. Im Vergleich zu Python ist V schneller, einfacher, sicherer und wartbarer. Im Vergleich zu Go hat V keine globalen Variablen, keine Nullen, alle Variablenwerte müssen immer definiert werden, alle Objekte sind standardmäßig unveränderlich, es wird nur eine Art der Zuweisung unterstützt („a := 0“), eine deutlich kompaktere Laufzeit und die Größe der resultierenden ausführbaren Dateien, das Vorhandensein einer direkten Portabilität von C, das Fehlen eines Garbage Collectors, eine schnellere Serialisierung, die Möglichkeit, Zeichenfolgen zu interpolieren („println('$foo: $bar.baz')“).

fn main() {
Bereiche := ['Spiel', 'Web', 'Tools', 'Wissenschaft', 'Systeme', 'GUI', 'Mobile'] a := 10
Wenn wahr {
bis := 20
}
für Fläche in Flächen {
println('Hallo, $area-Entwickler!')
}
}

Merkmale des Projekts:

  • Kompakter und schneller Compiler, der zusammen mit der Standardbibliothek etwa 400 KB belegt. Durch direkte Generierung von Maschinencode und Modularität wird eine hohe Kompilierungsgeschwindigkeit erreicht. Die Kompilierungsgeschwindigkeit beträgt ungefähr 1.2 Millionen Codezeilen pro Sekunde auf einem CPU-Kern (es wird darauf hingewiesen, dass V während des Betriebs C verwenden kann, dann sinkt die Geschwindigkeit auf 100 Zeilen pro Sekunde). Die Selbstassemblierung des Compilers, der ebenfalls in der V-Sprache geschrieben ist (es gibt auch eine Referenzversion in Go), dauert etwa 0.4 Sekunden. Bis Ende des Jahres sollen die Arbeiten an weiteren Optimierungen abgeschlossen sein, wodurch die Compiler-Build-Zeit auf 0.15 Sekunden verkürzt wird. Den vom Entwickler durchgeführten Tests zufolge benötigt die Selbstassemblierung von Go 512 MB Speicherplatz und läuft in eineinhalb 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 ohne externe Abhängigkeiten in ausführbare Dateien kompiliert. Die Größe der ausführbaren Datei eines einfachen HTTP-Servers beträgt nach der Assemblierung nur 65 KB;
  • Die Leistung kompilierter Anwendungen liegt auf dem Niveau von Assemblies von C-Programmen;
  • Die Möglichkeit, nahtlos und ohne zusätzlichen Aufwand mit C-Code zu interagieren. Funktionen in der C-Sprache können aus Code in der V-Sprache aufgerufen werden, und umgekehrt kann Code in der V-Sprache in jeder mit C kompatiblen Sprache aufgerufen werden;
  • Unterstützung für die Übersetzung von C/C++-Projekten in eine Darstellung in der V-Sprache. Für die Übersetzung wird ein Parser von Clang verwendet. Noch werden nicht alle Funktionen des C-Standards unterstützt, die aktuellen Fähigkeiten des Übersetzers reichen jedoch bereits aus Übersetzung in der Sprache des V-Spiels DOOM. Der C++-Übersetzer befindet sich noch in einem frühen Entwicklungsstadium;
  • Integrierte Serialisierungsunterstützung, ohne an die Laufzeit gebunden zu sein;
  • Minimierung von Speicherzuweisungsvorgängen;
  • Gewährleistung der Sicherheit: keine NULL, globale Variablen, undefinierte Werte und Neudefinition von Variablen. Integrierte Pufferüberlaufprüfung. Unterstützung für generische Funktionen (Generic). Objekte und Strukturen, die standardmäßig nicht geändert werden können;
  • Möglichkeit des „heißen“ Code-Neuladens (das Änderungen im Code im laufenden Betrieb ohne Neukompilierung widerspiegelt);
  • Tools zur Gewährleistung von Multithreading. Genau wie in der Go-Sprache wird ein Konstrukt wie „run foo()“ verwendet, um einen neuen Ausführungsthread zu starten (ähnlich wie „go foo()“). Zukünftig ist die Unterstützung von Goroutinen und einem Thread-Scheduler geplant;
  • Unterstützung für Windows-, macOS-, Linux- und *BSD-Betriebssysteme. Es ist geplant, bis Ende des Jahres Unterstützung für Android und iOS hinzuzufügen;
  • Speicherverwaltung zur Kompilierzeit (wie in Rust), ohne Verwendung eines Garbage Collectors;
  • Verfügbarkeit eines Multiplattform-Toolkits für die Grafikausgabe, das GDI+/Cocoa und OpenGL zum Rendern verwendet (Unterstützung für DirectX-, Vulkan- und Metal-APIs ist geplant). Es gibt Tools für die Arbeit mit 3D-Objekten, Skelettanimationen und Kamerasteuerung;
  • Verfügbarkeit einer Bibliothek zum Generieren grafischer Schnittstellen mit Designelementen, die für jedes Betriebssystem typisch sind. Windows verwendet WinAPI/GDI+, macOS verwendet Cocoa und Linux verwendet seine eigenen Widgets. Die Bibliothek wird bereits in der Entwicklung verwendet Volt — Client für Slack, Skype, Gmail, Twitter und Facebook;

    Der Plan besteht darin, eine Delphi-ähnliche Interface-Design-Anwendung zu erstellen, eine deklarative API ähnlich SwiftUI und React Native bereitzustellen und Unterstützung für die Erstellung mobiler Anwendungen für iOS und Android bereitzustellen;

    V-Programmiersprache Open Source

  • Verfügbarkeit eines integrierten Webframeworks, mit dem eine Website, ein Forum und ein Blog für die Projektentwickler erstellt werden. Die Vorkompilierung von HTML-Vorlagen wird unterstützt, ohne dass diese bei jeder Anfrage verarbeitet werden müssen.
  • Unterstützung für Cross-Compilation. Um die ausführbare Datei für Windows zu erstellen, führen Sie einfach „v -os windows“ und für Linux „v -os linux“ aus (Cross-Compilation-Unterstützung für macOS wird später erwartet). Cross-Compilation funktioniert auch für grafische Anwendungen;
  • Integrierter Abhängigkeitsmanager, Paketmanager und Build-Tools. Um das Programm zu erstellen, führen Sie einfach „v.“ aus, ohne make oder externe Dienstprogramme zu verwenden. Um zusätzliche Bibliotheken zu installieren, führen Sie einfach zum Beispiel „v get sqlite“ aus;
  • Verfügbarkeit von Plugins für die Entwicklung in der V-Sprache in Editoren VS-Code и Vim.

Entwicklung wahrgenommen Gemeinschaft mit Skepsis, da der veröffentlichte Code zeigte, dass noch nicht alle deklarierten Fähigkeiten implementiert wurden und ein sehr großer Arbeitsaufwand erforderlich ist, um alle Pläne umzusetzen.
Darüber hinaus verfügte zunächst das Endlager über platziert Defekter Code, der Probleme bei der Assemblierung und Ausführung hat. Es wird davon ausgegangen, dass der Autor noch nicht das Stadium erreicht hat, in dem er beginnt, es zu bemerken Paretos Gesetz, wonach 20 % des Aufwands 80 % des Ergebnisses erzeugen und die restlichen 80 % des Aufwands nur 20 % des Ergebnisses.

Mittlerweile wurden etwa 10 Beiträge aus dem Bugtracker von Project V entfernt Demonstration Code von geringer Qualität weist beispielsweise auf die Verwendung von C-Inserts und die Verwendung von Funktionen in der Bibliothek zum Löschen des Verzeichnisses des Befehls rm durch den Aufruf os.system("rm -rf $path") hin. Autor des Projekts sagtedass er nur die Nachrichten gelöscht hat, veröffentlicht Troll (mit Änderungen, die die Gültigkeit der Kritik bestätigen, остались в Verlauf bearbeiten).

Source: opennet.ru

Kommentar hinzufügen