Skip to content

Batman-creator/germaine

🇫🇷 GERMAINE

   ██████╗ ███████╗██████╗ ███╗   ███╗ █████╗ ██╗███╗   ██╗███████╗
  ██╔════╝ ██╔════╝██╔══██╗████╗ ████║██╔══██╗██║████╗  ██║██╔════╝
  ██║  ███╗█████╗  ██████╔╝██╔████╔██║███████║██║██╔██╗ ██║█████╗
  ██║   ██║██╔══╝  ██╔══██╗██║╚██╔╝██║██╔══██║██║██║╚██╗██║██╔══╝
  ╚██████╔╝███████╗██║  ██║██║ ╚═╝ ██║██║  ██║██║██║ ╚████║███████╗
   ╚═════╝ ╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝╚═╝  ╚═╝╚═╝╚═╝  ╚═══╝╚══════╝

Le langage de programmation web en français 🚀 The French Programming Language for Web Development

MIT License Rust Version


📖 Qu'est-ce que Germaine ?

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 |>

🎯 Exemple rapide

# 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')
})

🚀 Installation rapide

Prérequis

Installation

# 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 --version

📚 Premiers pas

1. Créer un nouveau projet

germaine init mon-projet
cd mon-projet

2. Créer votre premier fichier bonjour.grm

dé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()

3. Exécuter

germaine run bonjour.grm

🌟 Fonctionnalités principales

✨ Syntaxe française naturelle

# 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
}

🌐 Framework web intégré

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()

🗄️ ORM moderne

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()

🔄 Pipelines fonctionnels

# 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/Await natif

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)
    }
}

🛠️ CLI complète

# 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

📦 Gestionnaire de packages (GPM)

# 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

📖 Documentation


🎓 Exemples

Le dossier examples/ contient 9 exemples progressifs :

  1. 01-hello-world - Premier programme
  2. 02-variables - Variables et types
  3. 03-fonctions - Fonctions et paramètres
  4. 04-classes - POO complète
  5. 05-web-simple - Serveur web basique
  6. 06-api-rest - API REST complète
  7. 07-blog-complet - Blog avec base de données
  8. 08-temps-reel - Chat WebSocket
  9. 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.grm

🏗️ Architecture

germaine/
├── 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

🎯 Roadmap

  • 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

🤝 Contribuer

Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md pour commencer.

  1. Fork le projet
  2. Créer une branche (git checkout -b feature/amazing)
  3. Commit (git commit -m 'Ajouter une fonctionnalité')
  4. Push (git push origin feature/amazing)
  5. Ouvrir une Pull Request

📄 Licence

Ce projet est sous licence MIT - voir le fichier LICENSE pour plus de détails.


👨‍💻 Auteur

Ingénieur Lucien MBA


🙏 Remerciements

  • La communauté Rust pour les outils exceptionnels
  • Tous les contributeurs qui rendent Germaine meilleur
  • La communauté francophone des développeurs

⭐ Support

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

DocumentationExemplesCommunauté

About

Langage de programmation

Resources

License

Code of conduct

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors