Guide complet

Tout ce qu\'il faut savoir pour commencer et maîtriser DAVINOC.

Installation

DAVINOC et son écosystème s\'installent en quelques étapes simples. Le projet nécessite un environnement Node.js avec Bun comme runtime principal pour le compilateur et les outils CLI.

# Cloner le dépôt
git clone https://github.com/davinoc/davinoc.git
cd davinoc

# Installer les dépendances
bun install

# Lancer les tests (88 tests)
bun test

# Utiliser le lanceur Python
python vinok.py parse fichier.vinok

Prérequis

  • Node.js >= 18 — Moteur JavaScript
  • Bun >= 1.0 — Runtime et test runner
  • Python >= 3.8 — Lanceur CLI (optionnel)

Démarrage rapide

Créez votre premier fichier VINOK et analysez-le en quelques secondes. Voici un fichier de configuration minimal pour un projet DAVINOC :

# mon-projet/vinok-conf.vinok
projet = [
    nom = "mon-projet",
    version = "0.1.0",
    auteur = "Votre Nom",
]

runtime = [
    cible = "dvb",
    optimisation = "standard",
    points_entree = ["src/main.dv"],
]

dependances = [
    "davinoc-core@^1.0",
    "davinoc-io@^0.5",
]

Puis analysez-le avec la commande :

python vinok.py parse vinok-conf.vinok
# ou directement
bun run src/cli.ts parse vinok-conf.vinok

Format VINOK

VINOK est un format de configuration conçu pour être lisible, minimal et expressif. Il supporte quatre types de valeurs fondamentales et plusieurs fonctionnalités avancées qui le distinguent des formats traditionnels comme JSON ou YAML.

Types de base

# Chaînes
nom = "DAVINOC"
description = \"""\n    Un langage moderne\n    pour le futur.
"""

# Nombres
version_majeure = 1
pi = 3.14159

# Booléens
mode_debug = vrai
production = faux

# Lists et objets
tags = ["langage", "compilé", "moderne"]
config = [
    port = 8080,
    host = "localhost",
    ssl = vrai,
]

Objets séparés par retours à la ligne

Une fonctionnalité unique de VINOK : les objets peuvent être définis sur des lignes consécutives avec des crochets vides [], chacun sur sa propre ligne :

# Équivalent à [nom="Alice", age=30]
[]
nom = "Alice"
[]
age = 30

Interpolation

base_url = "https://api.example.com"
endpoint = "${base_url}/v1/utilisateurs"
message = "Version ${version} par ${auteur}"

Clés backtick

# Les clés entre backticks sont supportées
# mais dépouillées dans la sortie JSON
`custom-key` = "valeur"
# Résultat JSON : { "custom-key": "valeur" }

DVLX — Le superset typé

DVLX (.dvx) est à DAVINOC ce que TypeScript est à JavaScript. Il ajoute un système de types statiques optionnel, les génériques, les interfaces, le pattern matching et les macros. Les fichiers DVLX compilent vers du ByteCode DVB exécutable par la VM DAVINOC.

Interfaces et types

interface Repository<T> {
    trouver(id: Texte) -> T | Rien
    sauvegarder(entity: T) -> Booléen
    supprimer(id: Texte) -> Booléen
}

type Résultat<T, E> = Ok(T) | Erreur(E)

Pattern matching

fonction traiter(résultat: Résultat<Données, Erreur>) {
    match résultat {
        Ok(données) => écrire("Succès: ${données}"),
        Erreur(e)   => écrire("Échec: ${e.message}"),
    }
}

CLI — Les 6 commandes

L\'interface en ligne de commande DAVINOC offre six commandes essentielles, chacune wrapped dans un gestionnaire d\'erreurs robuste avec messages Rust-style :

parse

Analyse un fichier VINOK et affiche l\'AST résultant. Utile pour comprendre la structure parsée et déboguer les fichiers de configuration.

vinok parse config.vinok

validate

Valide un fichier VINOK et retourne un résultat binaire avec un message d\'erreur formaté si des problèmes sont détectés. Retourne [false, "[E001] msg"] en cas d\'erreur.

vinok validate config.vinok

convert

Convertit entre les formats VINOK et JSON, permettant une interopérabilité parfaite avec les écosystèmes existants. Les clés backtick sont automatiquement dépouillées dans la sortie JSON.

vinok convert config.vinok --to json
vinok convert data.json --to vinok

run

Exécute un fichier DVB compilé dans la machine virtuelle DAVINOC. Gère automatiquement les dépendances et les points d\'entrée définis dans la configuration VINOK du projet.

vinok run programme.dvb

format

Formate un fichier VINOK selon les conventions standard : indentation, espacement, tri des clés. Garantit un style cohérent dans tout le projet.

vinok format config.vinok

init

Initialise un nouveau projet DAVINOC avec la structure de fichiers standard, un fichier vinok-conf.json et les exemples de base.

vinok init mon-projet

Erreurs Rust-style

Le système d\'erreurs de DAVINOC est directement inspiré du compilateur Rust. Chaque erreur inclut un code unique, la localisation précise, le contexte du code source et des suggestions de correction. La classe VinokError et sa méthode format() génèrent automatiquement ces messages détaillés.

error[E0042]: clé dupliquée 'nom'
  --> config.vinok:5:1
   |
 3 |    nom = "Alice",
   |    ---- première définition ici
 5 |    nom = "Bob",
   |    ^^^^ clé dupliquée
   |
   = note: chaque clé doit être unique dans un objet
   = aide: renommez la clé ou supprimez l\'une des occurrences

Les erreurs sont gérées via un helper die() dans le CLI qui attrape toutes les exceptions et affiche le message formaté avant de terminer avec un code de sortie non-nul.

Exemples

Voici des exemples complets tirés du projet DAVINOC pour illustrer les différentes capacités du langage et de son écosystème de configuration.

Fichier VINOK complet

# examples/full.vinok
projet = [
    nom = "davinoc-demo",
    version = "1.0.0",
    description = \"""\n        Démonstration complète\n        du format VINOK avec\n        toutes les fonctionnalités.\n    """,
]

serveur = [
    hote = "0.0.0.0",
    port = 3000,
    tls = faux,
]

dependances = [
    "davinoc-core@^1.0.0",
    "davinoc-web@^2.0.0",
    "davinoc-db@^0.8.0",
]

scripts = [
    dev  = "davinoc run src/main.dv --watch",
    build = "davinoc build --optim agressive",
    test  = "davinoc test --coverage",
]

Package VINOK

# examples/pkg.vinok
[]
nom = "mon-package"
[]
version = "0.1.0"
[]
description = "Un package DAVINOC"
[]
licence = "MIT"
[]
auteur = "Alice"
[]
repo = "https://github.com/alice/mon-package"