██████╗ ███████╗██████╗ ███╗ ███╗ █████╗ ██╗███╗ ██╗███████╗
██╔════╝ ██╔════╝██╔══██╗████╗ ████║██╔══██╗██║████╗ ██║██╔════╝
██║ ███╗█████╗ ██████╔╝██╔████╔██║███████║██║██╔██╗ ██║█████╗
██║ ██║██╔══╝ ██╔══██╗██║╚██╔╝██║██╔══██║██║██║╚██╗██║██╔══╝
╚██████╔╝███████╗██║ ██║██║ ╚═╝ ██║██║ ██║██║██║ ╚████║███████╗
╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝
Le langage de programmation web en français 🚀 The French Programming Language for Web Development
Germaine est un langage de programmation moderne, performant et élégant, entièrement en français. Il combine :
- ✨ Syntaxe naturelle en français -
soit,définir,si...sinon,tantque,pour - 🚀 Performance native - Compilé vers bytecode optimisé avec VM rapide
- 🌐 Framework web intégré - Serveur HTTP, WebSocket, routing, middleware natifs
- 🗄️ ORM moderne - Accès bases de données élégant et sécurisé
- ⚡ Async/Await natif - Programmation asynchrone intuitive
- 📦 Gestionnaire de packages - GPM (Germaine Package Manager)
- 🎯 Type safety - Système de types fort avec inférence
- 🔄 Pipelines fonctionnels - Programmation fonctionnelle avec opérateur
|>
# Hello World simple
imprimer('Bonjour le monde !')
# Serveur web en quelques lignes
importer { Serveur, Route } depuis '@germaine/web'
soit app = nouveau Serveur({ port: 8000 })
@Route.get('/api/salut/:nom')
async définir saluer(req, res) {
soit nom = req.params.nom
retourner res.json({
message: 'Bonjour ' + nom + ' !',
heure: Date.maintenant()
})
}
app.démarrer(() => {
imprimer('🚀 Serveur démarré sur http://localhost:8000')
})
- Rust 1.75+ (installer Rust)
- Git
# Cloner le repository
git clone https://github.com/lucienmba/germaine.git
cd germaine
# Compiler en mode release
cargo build --release
# Installer globalement
cargo install --path .
# Vérifier l'installation
germaine --versiongermaine init mon-projet
cd mon-projetdéfinir main() {
imprimer('🇫🇷 Bienvenue dans Germaine !')
soit nom = 'Lucien'
soit message = saluer(nom)
imprimer(message)
}
définir saluer(nom: texte) -> texte {
retourner 'Bonjour ' + nom + ', bienvenue en Germaine !'
}
main()
germaine run bonjour.grm# Variables
soit nom = 'Lucien MBA'
soit age = 25
soit actif = vrai
# Fonctions
définir calculer(a: entier, b: entier) -> entier {
retourner a + b
}
# Conditions
si age >= 18 {
imprimer('Majeur')
} sinon {
imprimer('Mineur')
}
# Boucles
pour i dans gamme(0, 10) {
imprimer(i)
}
tantque actif {
imprimer('En cours...')
actif = faux
}
importer { Serveur, Route, Middleware } depuis '@germaine/web'
soit app = nouveau Serveur({ port: 8000, debug: vrai })
app.utiliser(Middleware.cors())
app.utiliser(Middleware.json())
@Route.get('/api/users')
async définir liste_users(req, res) {
soit users = attendre BaseDonnées.users.tous()
retourner res.json(users)
}
@Route.post('/api/users')
async définir créer_user(req, res) {
soit { nom, email } = req.corps
soit user = attendre BaseDonnées.users.créer({ nom, email })
retourner res.statut(201).json(user)
}
app.démarrer()
importer { BaseDonnées, Modèle, Champs } depuis '@germaine/db'
classe Utilisateur hérite Modèle {
id = Champs.entier({ auto: vrai, clé_primaire: vrai })
nom = Champs.texte({ requis: vrai })
email = Champs.texte({ unique: vrai })
age = Champs.entier()
}
# CRUD facile
soit user = attendre Utilisateur.créer({
nom: 'Lucien MBA',
email: 'lucien@germaine.dev',
age: 25
})
soit tous = attendre Utilisateur.trouver_tous()
soit adultes = attendre Utilisateur.où('age', '>=', 18).tous()
# Transformer des données élégamment
soit résultat = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|> filtrer(x => x % 2 == 0)
|> mapper(x => x * 2)
|> réduire((a, b) => a + b)
imprimer(résultat) # 60
async définir charger_données(url: texte) -> Résultat {
essayer {
soit réponse = attendre http.get(url)
soit données = attendre réponse.json()
retourner Succès(données)
} capturer erreur {
retourner Échec(erreur)
}
}
# Créer un projet
germaine init mon-projet
germaine init mon-api --template=api
# Développement avec hot-reload
germaine dev
germaine dev --port 3000
# Build
germaine build
germaine build --release
# Tests
germaine test
germaine test --watch
# Formatage
germaine fmt
# Linting
germaine lint --fix
# Documentation
germaine doc --serve
# REPL interactif
germaine repl# Installer un package
gpm installer express-grm
# Installer toutes les dépendances
gpm installer
# Chercher des packages
gpm chercher web
# Publier un package
gpm publier
# Mettre à jour
gpm mise-à-jour- 📘 Guide de démarrage
- 📙 Référence du langage
- 📗 Tutoriel Web
- 📕 Bibliothèque standard
- 📔 Architecture du compilateur
Le dossier examples/ contient 9 exemples progressifs :
- 01-hello-world - Premier programme
- 02-variables - Variables et types
- 03-fonctions - Fonctions et paramètres
- 04-classes - POO complète
- 05-web-simple - Serveur web basique
- 06-api-rest - API REST complète
- 07-blog-complet - Blog avec base de données
- 08-temps-reel - Chat WebSocket
- 09-ecommerce - Site e-commerce complet
# Exécuter un exemple
germaine run examples/01-hello-world/hello.grm
germaine dev examples/05-web-simple/serveur.grmgermaine/
├── src/
│ ├── lexer/ # Tokenization
│ ├── parser/ # Analyse syntaxique (AST)
│ ├── analyzer/ # Analyse sémantique
│ ├── compiler/ # Compilation vers bytecode
│ ├── vm/ # Machine virtuelle
│ └── stdlib/ # Bibliothèque standard
├── examples/ # 9 exemples progressifs
├── tests/ # Tests complets
└── docs/ # Documentation
- Lexer et parser complets
- Compilateur vers bytecode
- Machine virtuelle optimisée
- Framework web intégré
- ORM pour bases de données
- Bibliothèque standard
- JIT compilation avec Cranelift
- IDE/VSCode extension
- Debugger interactif
- Package registry en ligne
- Optimisations avancées
- Support WASM
Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md pour commencer.
- Fork le projet
- Créer une branche (
git checkout -b feature/amazing) - Commit (
git commit -m 'Ajouter une fonctionnalité') - Push (
git push origin feature/amazing) - Ouvrir une Pull Request
Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.
Ingénieur Lucien MBA
- 🌐 Website: germaine.dev
- 📧 Email: lucien@germaine.dev
- 🐙 GitHub: @lucienmba
- 💼 LinkedIn: Lucien MBA
- La communauté Rust pour les outils exceptionnels
- Tous les contributeurs qui rendent Germaine meilleur
- La communauté francophone des développeurs
Si vous aimez Germaine, n'hésitez pas à :
- ⭐ Star le projet sur GitHub
- 🐛 Reporter des bugs
- 💡 Suggérer des fonctionnalités
- 📢 Partager avec la communauté
Fait avec ❤️ en France 🇫🇷
Germaine - Coder en français n'a jamais été aussi élégant