V-programmeertaal open source

Vertaald in de categorie van open compiler voor taal V. V is een statisch getypeerde, machinaal gecompileerde taal die erop gericht is de ontwikkeling gemakkelijker te onderhouden en zeer snel te compileren. Compilercode, bibliotheken en gerelateerde tools is open onder de MIT-licentie.

De syntaxis van V lijkt sterk op die van Go, waarbij enkele constructies zijn overgenomen van Oberon, Rust en Swift. De taal is zoveel mogelijk vereenvoudigd en volgens de ontwikkelaar is 30 minuten studeren voldoende om de basis te leren documentatie. Tegelijkertijd blijft de taal behoorlijk krachtig en kan hij worden gebruikt om dezelfde taken uit te voeren als bij het gebruik van andere programmeertalen (er zijn bijvoorbeeld bibliotheken beschikbaar voor 2D/3D-graphics, het maken van GUI's en webapplicaties).

De creatie van een nieuwe taal werd ingegeven door de wens om een ​​combinatie te bereiken van de eenvoud van de syntaxis van de Go-taal, de compilatiesnelheid, het gemak van parallellisatie van bewerkingen, de draagbaarheid en onderhoudbaarheid van code met de prestaties van C/C++, de veiligheid van Rust en het genereren van machinecode in de Zig-compilatiefase. Ik wilde ook een compacte en snelle compiler krijgen die zou kunnen werken zonder externe afhankelijkheden, de globale reikwijdte (globale variabelen) zou wegnemen en de mogelijkheid zou bieden om de code "hot" te herladen.

Vergeleken met C++ is de nieuwe taal aanzienlijk eenvoudiger, biedt een hogere compilatiesnelheid (tot 400 keer), hanteert veilige programmeertechnieken, is vrij van problemen met ongedefinieerd gedrag en biedt ingebouwde tools voor het parallelliseren van bewerkingen. Vergeleken met Python is V sneller, eenvoudiger, veiliger en beter te onderhouden. Vergeleken met Go heeft V geen globale variabelen, geen nulwaarden, alle variabelewaarden moeten altijd gedefinieerd zijn, alle objecten zijn standaard onveranderlijk, er wordt slechts één type toewijzing ondersteund (“a:= 0”), een aanzienlijk compactere runtime en de grootte van de resulterende uitvoerbare bestanden, de aanwezigheid van directe portabiliteit vanuit C, de afwezigheid van een garbage collector, snellere serialisatie, de mogelijkheid om strings te interpoleren (“println('$foo: $bar.baz')”).

fn hoofd() {
gebieden := ['game', 'web', 'tools', 'wetenschap', 'systemen', 'GUI', 'mobiel'] a := 10
als het klopt {
een := 20
}
voor oppervlakte in gebieden {
println('Hallo, $area-ontwikkelaars!')
}
}

Kenmerken van het project:

  • Compacte en snelle compiler, die samen met de standaardbibliotheek ongeveer 400 KB in beslag neemt. Een hoge compilatiesnelheid wordt bereikt door directe generatie van machinecode en modulariteit. De compilatiesnelheid is ongeveer 1.2 miljoen regels code per seconde op één CPU-kern (opgemerkt wordt dat V tijdens bedrijf C kan gebruiken, waarna de snelheid daalt tot 100 regels per seconde). Zelfassemblage van de compiler, die ook in de V-taal is geschreven (er is ook een referentieversie in Go), duurt ongeveer 0.4 seconde. Tegen het einde van het jaar zal naar verwachting het werk aan aanvullende optimalisaties zijn voltooid, waardoor de bouwtijd van de compiler zal worden teruggebracht tot 0.15 seconden. Afgaande op de tests uitgevoerd door de ontwikkelaar, vereist zelfassemblage van Go 512 MB schijfruimte en draait in anderhalve minuut, Rust vereist 30 GB en 45 minuten, GCC - 8 GB en 50 minuten, Clang - 90 GB en 25 minuten,
    Snel - 70 GB en 90 minuten;

  • Programma's worden gecompileerd in uitvoerbare bestanden zonder externe afhankelijkheden. De uitvoerbare bestandsgrootte van een eenvoudige http-server na montage is slechts 65 KB;
  • De prestaties van gecompileerde applicaties liggen op het niveau van assemblages van C-programma's;
  • De mogelijkheid om naadloos te communiceren met C-code, zonder extra overhead. Functies in de C-taal kunnen worden aangeroepen vanuit code in de V-taal, en omgekeerd kan code in de V-taal worden aangeroepen in elke taal die compatibel is met C;
  • Ondersteuning voor het vertalen van C/C++-projecten naar een representatie in de taal V. Voor de vertaling wordt een parser van Clang gebruikt. Nog niet alle functionaliteiten van de C-standaard worden ondersteund, maar de huidige mogelijkheden van de vertaler zijn al voldoende vertaling in de taal van de V-game DOOM. De C++-vertaler bevindt zich nog in een vroeg ontwikkelingsstadium;
  • Ingebouwde serialisatie-ondersteuning, zonder gebonden te zijn aan runtime;
  • Minimaliseren van geheugentoewijzingsbewerkingen;
  • Veiligheid garanderen: geen NULL, globale variabelen, ongedefinieerde waarden en herdefinitie van variabelen. Ingebouwde bufferoverschrijdingscontrole. Ondersteuning voor generieke functies (Generic). Objecten en structuren die standaard niet kunnen worden gewijzigd;
  • Mogelijkheid tot “hot” herladen van code (on-the-fly wijzigingen in de code weerspiegelen zonder hercompilatie);
  • Hulpmiddelen voor het garanderen van multithreading. Net als in de Go-taal wordt een constructie als “run foo()” gebruikt om een ​​nieuwe uitvoeringsthread te starten (vergelijkbaar met “go foo()”). In de toekomst is ondersteuning voor goroutines en een threadplanner gepland;
  • Ondersteuning voor Windows, macOS, Linux, *BSD-besturingssystemen. Het is de bedoeling om tegen het einde van het jaar ondersteuning voor Android en iOS toe te voegen;
  • Geheugenbeheer tijdens het compileren (zoals in Rust), zonder gebruik van een garbage collector;
  • Beschikbaarheid van een multi-platform toolkit voor grafische uitvoer, met behulp van GDI+/Cocoa en OpenGL voor rendering (ondersteuning voor DirectX, Vulkan en Metal API's is gepland). Er zijn tools voor het werken met 3D-objecten, skeletanimatie en camerabesturing;
  • Beschikbaarheid van een bibliotheek voor het genereren van grafische interfaces met ontwerpelementen die eigen zijn aan elk besturingssysteem. Windows gebruikt WinAPI/GDI+, macOS gebruikt Cocoa en Linux gebruikt zijn eigen set widgets. De bibliotheek wordt al gebruikt bij de ontwikkeling Voltage machine — client voor Slack, Skype, Gmail, Twitter en Facebook;

    Het plan is om een ​​Delphi-achtige interface-ontwerpapplicatie te creëren, een declaratieve API te bieden vergelijkbaar met SwiftUI en React Native, en ondersteuning te bieden voor het maken van mobiele applicaties voor iOS en Android;

    V-programmeertaal open source

  • Beschikbaarheid van een ingebouwd webframework, dat wordt gebruikt om een ​​website, forum en blog voor de projectontwikkelaars te creëren. Precompilatie van HTML-sjablonen wordt ondersteund, zonder deze bij elk verzoek te verwerken;
  • Ondersteuning voor kruiscompilatie. Om het uitvoerbare bestand voor Windows te bouwen, voert u gewoon "v -os windows" uit, en voor Linux - "v -os linux" (ondersteuning voor cross-compilatie voor macOS wordt later verwacht). Cross-compilatie werkt ook voor grafische toepassingen;
  • Ingebouwde afhankelijkheidsmanager, pakketbeheerder en buildtools. Om het programma te bouwen, voert u gewoon "v." uit, zonder make of externe hulpprogramma's te gebruiken. Om extra bibliotheken te installeren, voert u bijvoorbeeld "v get sqlite" uit;
  • Beschikbaarheid van plug-ins voor ontwikkeling in de V-taal in editors VS-code и Vim.

ontwerp gadegeslagen gemeenschap met scepticisme, aangezien uit de gepubliceerde code bleek dat nog niet alle aangegeven mogelijkheden zijn geïmplementeerd en dat er een zeer grote hoeveelheid werk nodig is om alle plannen te implementeren.
Bovendien had de repository dat aanvankelijk ook geplaatst gebroken code die problemen heeft met montage en uitvoering. Er wordt aangenomen dat de auteur nog niet het stadium heeft bereikt waarin hij het begint op te merken De wet van Pareto, waarbij 20% van de inspanning 80% van het resultaat oplevert, en de resterende 80% van de inspanning slechts 20% van het resultaat oplevert.

Ondertussen zijn er ongeveer 10 berichten verwijderd uit de bugtracker van Project V demonstratie code van lage kwaliteit geeft bijvoorbeeld het gebruik aan van C-inserts en het gebruik in de bibliotheek van functies voor het verwijderen van de directory van het rm-commando via de aanroep os.system("rm -rf $path"). Auteur van het project zeidat hij alleen de berichten heeft verwijderd, gepubliceerd trol (met wijzigingen die de geldigheid van de kritiek bevestigen, bleef в geschiedenis bewerken).

Bron: opennet.ru

Voeg een reactie