Aller au contenu
learn

V pour développeurs C#/Java — Mission

V promet un petit langage, proche de Go, qui compile vers C en une seconde environ, avec des variables immuables par défaut, sans null, sans exceptions, et avec un ramasse-miettes (GC) que l’on peut désactiver. J’écris du C# et je lis beaucoup de Java. Je veux savoir lesquelles de ces promesses tiennent en version 0.5.2, ce que V coûte en échange, et où sa documentation et son compilateur divergent.

Tu es à l’aise avec C# ou Java : classes, interfaces, génériques, exceptions, collections, LINQ ou streams. Tu n’as jamais écrit de V, et tu n’as pas besoin de connaître C. Chaque leçon part du concept que tu connais déjà et montre où V est d’accord, où il diffère, et ce que dit le compilateur quand tu te trompes.

C# Java V
Compile vers IL, exécuté par le CLR bytecode, exécuté par la JVM C, compilé en exécutable natif
Outil de build dotnet Maven, Gradle v lui-même
Fichier de projet .csproj pom.xml, build.gradle v.mod (optionnel)
Variable locale var x = 1; (mutable) var x = 1; (mutable) x := 1 (immuable), mut x := 1
Classe class, record, struct class, record struct avec des méthodes, sans héritage
Valeur absente null, int? null, Optional<T> ?T et none
Échec exceptions exceptions vérifiées et non vérifiées !T, error() et or { }
Mémoire GC générationnel GC (G1 par défaut) GC Boehm par défaut, -autofree, -gc none
Espaces de noms namespace package un module par dossier
Visibilité public, internal, private public, package-private, private pub ou privé au module

Sources : ramasse-miettes .NET, ramasse-miettes G1, documentation de V.

docs.vlang.io est générée à partir de doc/docs.md sur la branche master de V, qui a évolué depuis 0.5.2 : sa page The default compiler, par exemple, n’existe pas dans la documentation de 0.5.2. Ce cours renvoie à docs.vlang.io pour les concepts et vérifie chaque comportement avec 0.5.2 elle-même ; la documentation de la version étudiée est doc/docs.md au tag 0.5.2, et la bibliothèque standard est décrite sur modules.vlang.io.

Les leçons 3 et 4 lisent code/v-for-csharp-java/data/pages.csv : les 319 pages de ce site au commit cbcbb42, avec leur locale, leur cours, leur titre et leur nombre de lignes. C’est une copie du fichier que le cours LadybugDB extrait de ce dépôt.

Les leçons 5 à 8 lisent code/v-for-csharp-java/data/ga : les 111 projets .NET de GuitarAlchemist/ga au commit a26a7893, leurs 266 références de projet et 478 références de package, copiés eux aussi du cours LadybugDB. La leçon 7 parcourt leurs références en parallèle, la leçon 8 teste un module qui les analyse.

  • installer V sous Windows, Linux et macOS, et organiser un programme en modules ;
  • modéliser des données avec des structs, des méthodes, des interfaces et des types somme au lieu de classes ;
  • gérer l’absence et l’échec avec ?, ! et or { } au lieu de null et des exceptions ;
  • dire où un tableau, une map ou une struct est copié, partagé ou libéré ;
  • écrire du code concurrent avec spawn et des canaux (channels) ;
  • tester, formater et documenter un module, et appeler une bibliothèque C.
# Leçon Tu connais déjà
1 Installation, v run, modules et projets dotnet new, dotnet run, javac, java
2 Types, variables immuables, structs et méthodes var, readonly/final, classes, records
3 Erreurs : ?, ! et or { } null, Optional, exceptions
4 Tableaux, maps, slices et mémoire List<T>, Dictionary, ArrayList, HashMap, le GC
5 Interfaces et génériques interfaces, génériques, contraintes
6 Enums, types somme et match enums, hiérarchies scellées, expressions switch
7 Concurrence : spawn, canaux et shared Task, CompletableFuture, threads virtuels, lock/synchronized
8 Tests, v fmt, v vet et v doc xUnit/JUnit, dotnet format, analyseurs, commentaires de documentation XML
9 Appeler du C (à venir) P/Invoke, JNI, l’API FFM
10 JSON et un serveur web avec veb System.Text.Json, ASP.NET Core, Jackson, Spring
11 L’ORM et SQLite Entity Framework, JPA
12 Packages, compilation croisée et déploiement NuGet/Maven Central, dotnet publish, jlink
— Journal