V langage de programmation open source

Traduit dans la catégorie des compilateurs ouverts pour langue V. V est un langage compilé par machine à typage statique qui vise à rendre le développement plus facile à maintenir et très rapide à compiler. Code du compilateur, bibliothèques et outils associés est ouvert sous licence MIT.

La syntaxe de V est très similaire à celle de Go, empruntant certaines constructions à Oberon, Rust et Swift. Le langage est simplifié au maximum et, selon le développeur, 30 minutes d'étude suffisent pour apprendre les bases documentation. Dans le même temps, le langage reste assez puissant et peut être utilisé pour effectuer les mêmes tâches que lors de l'utilisation d'autres langages de programmation (par exemple, des bibliothèques sont disponibles pour les graphiques 2D/3D, la création d'interfaces graphiques et d'applications Web).

La création d'un nouveau langage a été motivée par le désir de combiner la simplicité de la syntaxe du langage Go, la vitesse de compilation, la facilité de parallélisation des opérations, la portabilité et la maintenabilité du code avec les performances du C/C++, la sécurité de Rust et la génération de code machine au stade de la compilation Zig. Je voulais également obtenir un compilateur compact et rapide qui pourrait fonctionner sans dépendances externes, se débarrasser de la portée globale (variables globales) et offrir la possibilité de recharger « à chaud » le code.

Comparé au C++, le nouveau langage est nettement plus simple, offre une vitesse de compilation plus rapide (jusqu'à 400 fois), pratique des techniques de programmation sûres, est exempt de problèmes de comportement indéfini et fournit des outils intégrés pour les opérations de parallélisation. Comparé à Python, V est plus rapide, plus simple, plus sûr et plus maintenable. Par rapport à Go, V n'a pas de variables globales, pas de valeurs nulles, toutes les valeurs des variables doivent toujours être définies, tous les objets sont immuables par défaut, un seul type d'affectation est pris en charge (« a := 0 »), un format nettement plus compact. le temps d'exécution et la taille des fichiers exécutables résultants, la présence d'une portabilité directe depuis C, l'absence de garbage collector, une sérialisation plus rapide, la possibilité d'interpoler des chaînes (« println('$foo: $bar.baz') »).

fn principal() {
domaines := ['jeu', 'web', 'outils', 'science', 'systèmes', 'GUI', 'mobile'] a := 10
si vrai {
un := 20
}
pour la zone dans les zones {
println('Bonjour, développeurs $area !')
}
}

Caractéristiques du projet:

  • Compilateur compact et rapide qui, avec la bibliothèque standard, occupe environ 400 Ko. Une vitesse de compilation élevée est obtenue grâce à la génération directe de code machine et à la modularité. La vitesse de compilation est d'environ 1.2 million de lignes de code par seconde sur un cœur de processeur (il est à noter que pendant le fonctionnement V peut utiliser C, la vitesse chute alors à 100 0.4 lignes par seconde). L'auto-assemblage du compilateur, qui est également écrit en langage V (il existe également une version de référence en Go), prend environ 0.15 seconde. D'ici la fin de l'année, les travaux sur des optimisations supplémentaires devraient être terminés, ce qui réduira le temps de construction du compilateur à 512 seconde. À en juger par les tests effectués par le développeur, l'auto-assemblage de Go nécessite 30 Mo d'espace disque et s'exécute en une minute et demie, Rust nécessite 45 Go et 8 minutes, GCC - 50 Go et 90 minutes, Clang - 25 Go et XNUMX minutes,
    Swift - 70 Go et 90 minutes ;

  • Les programmes sont compilés dans des fichiers exécutables sans dépendances externes. La taille du fichier exécutable d'un simple serveur http après assemblage n'est que de 65 Ko ;
  • Les performances des applications compilées se situent au niveau des assemblages de programmes C ;
  • La possibilité d’interagir de manière transparente avec le code C, sans surcharge supplémentaire. Les fonctions du langage C peuvent être appelées à partir du code du langage V, et vice versa, le code du langage V peut être appelé dans n'importe quel langage compatible avec C ;
  • Prise en charge de la traduction de projets C/C++ en une représentation dans le langage V. Un analyseur de Clang est utilisé pour la traduction. Toutes les fonctionnalités du standard C ne sont pas encore supportées, mais les capacités actuelles du traducteur sont déjà suffisantes pour traduction dans le langage du jeu V DOOM. Le traducteur C++ en est encore à ses premiers stades de développement ;
  • Prise en charge intégrée de la sérialisation, sans être liée au runtime ;
  • Minimiser les opérations d'allocation de mémoire ;
  • Assurer la sécurité : pas de NULL, de variables globales, de valeurs non définies et de redéfinition des variables. Vérification intégrée du dépassement de tampon. Prise en charge des fonctions génériques (Generic). Objets et structures qui ne peuvent pas être modifiés par défaut ;
  • Possibilité de rechargement de code « à chaud » (reflétant les changements de code à la volée sans recompilation) ;
  • Outils pour assurer le multithreading. Tout comme dans le langage Go, une construction telle que « run foo() » est utilisée pour démarrer un nouveau thread d'exécution (similaire à « go foo() »). À l'avenir, la prise en charge des goroutines et d'un planificateur de threads est prévue ;
  • Prise en charge des systèmes d'exploitation Windows, macOS, Linux et *BSD. Il est prévu d'ajouter la prise en charge d'Android et d'iOS d'ici la fin de l'année ;
  • Gestion de la mémoire au moment de la compilation (comme dans Rust), sans utiliser de garbage collector ;
  • Disponibilité d'une boîte à outils multiplateforme pour la sortie graphique, utilisant GDI+/Cocoa et OpenGL pour le rendu (le support des API DirectX, Vulkan et Metal est prévu). Il existe des outils pour travailler avec des objets 3D, l'animation squelettique et le contrôle de la caméra ;
  • Disponibilité d'une bibliothèque de génération d'interfaces graphiques avec des éléments de conception natifs de chaque OS. Windows utilise WinAPI/GDI+, macOS utilise Cocoa et Linux utilise son propre ensemble de widgets. La bibliothèque est déjà utilisée en développement Voltage — client pour Slack, Skype, Gmail, Twitter et Facebook ;

    Le plan est de créer une application de conception d'interface de type Delphi, de fournir une API déclarative similaire à SwiftUI et React Native et de prendre en charge la création d'applications mobiles pour iOS et Android ;

    V langage de programmation open source

  • Disponibilité d'un framework Web intégré, utilisé pour créer un site Web, un forum et un blog pour les développeurs de projets. La précompilation des modèles HTML est prise en charge, sans les traiter à chaque requête ;
  • Prise en charge de la compilation croisée. Pour créer le fichier exécutable pour Windows, exécutez simplement « v -os windows » et pour Linux - « v -os linux » (la prise en charge de la compilation croisée pour macOS est attendue plus tard). La compilation croisée fonctionne également pour les applications graphiques ;
  • Gestionnaire de dépendances intégré, gestionnaire de packages et outils de construction. Pour construire le programme, exécutez simplement « v », sans utiliser make ni d'utilitaires externes. Pour installer des bibliothèques supplémentaires, exécutez simplement, par exemple, « v get sqlite » ;
  • Disponibilité de plugins pour le développement en langage V dans les éditeurs Code VS и Vim.

Développement perçu communauté avec scepticisme, puisque le code publié a montré que toutes les capacités déclarées n'ont pas encore été mises en œuvre et qu'une très grande quantité de travail est nécessaire pour mettre en œuvre tous les plans.
De plus, au départ, le référentiel avait mis code cassé qui présente des problèmes d'assemblage et d'exécution. On suppose que l’auteur n’a pas encore atteint le stade où il commence à remarquer La loi de Pareto, selon lequel 20 % de l'effort produit 80 % du résultat, et les 80 % d'effort restants ne produisent que 20 % du résultat.

Pendant ce temps, le système de suivi des bogues du Projet V a vu environ 10 messages supprimés de manifestation un code de mauvaise qualité, par exemple, indique l'utilisation d'inserts C et l'utilisation dans la bibliothèque de fonctions pour supprimer le répertoire de la commande rm via l'appel os.system("rm -rf $path"). Auteur du projet ditqu'il a seulement supprimé les messages, publié troll (avec des changements confirmant le bien-fondé de la critique, est resté в modifier l'historique).

Source: opennet.ru

Ajouter un commentaire