V pour développeurs C#/Java — Mission
Sections
Réglages de lecture
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
Code et termes techniques en anglais
Désactivé : la voix de la page lit tout, sans pause entre deux voix.
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
D’autres voix : Microsoft Edge propose des voix naturelles en ligne, et Windows (Paramètres › Heure et langue › Voix), macOS et Android en installent d’autres.
Pourquoi j’apprends ça
Section intitulée « Pourquoi j’apprends ça »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.
À qui s’adresse ce cours
Section intitulée « À qui s’adresse ce cours »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.
V en un tableau
Section intitulée « V en un tableau »| 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.
La documentation et la version
Section intitulée « La documentation et la version »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 données
Section intitulée « Les données »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.
À la fin de ce cours, je saurai
Section intitulée « À la fin de ce cours, je saurai »- 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
?,!etor { }au lieu denullet des exceptions ; - dire où un tableau, une map ou une struct est copié, partagé ou libéré ;
- écrire du code concurrent avec
spawnet 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 |
Ressources
Section intitulée « Ressources »- Documentation de V, et
doc/docs.mdau tag 0.5.2 - Bibliothèque standard de V
- Code source de V, et la release 0.5.2 qu’utilise ce cours
- Tests du langage V : la documentation indique que le compilateur et ses tests font foi quand ils la contredisent