Una implementación moderna de Wollok en Rust, enfocada en la enseñanza de programación orientada a objetos.
- 🎯 Objetivo
- ✨ Características
- 🚀 Instalación
- 📚 Documentación del Lenguaje
- 🏗️ Arquitectura
- 🤝 Contribuir
- 📜 Licencia
Wollok-rs es una reimplementación de Wollok en Rust que busca:
- Mejor rendimiento: Aprovechando la velocidad y seguridad de Rust
- Modularidad: Arquitectura basada en crates independientes
- Extensibilidad: Diseño que facilita nuevas características
- Compatibilidad: Mantener la esencia pedagógica de Wollok original
- Literales: Números, strings, booleanos, null
- Colecciones: Arrays
[1, 2, 3]y Sets#{1, 2, 3} - Objetos: Declaración con
objecty cuerpo con propiedades/métodos - Variables:
const(inmutables) ylet(mutables) - Propiedades: Con
propertypara getters/setters automáticos - Métodos: Con parámetros y cuerpos de bloque o inline
- Comentarios: Soporte para
//comentarios de línea - Asignaciones: Expresiones de asignación con
=
- Clases: Declaración, constructores, herencia
- Manejo de Errores:
falliblemethods con?(propagación) y!(assertion) - Closures: Sintaxis simple
() => expr(sin llaves) - Imports: Sistema de módulos e importaciones
- Tests: Framework de testing integrado
- Wollok Game: Librería para juegos
- Mixins: Composición de comportamiento
- Herencia:
inheritskeyword ysupercalls - Polimorfismo: Dynamic dispatch
- REPL: Consola interactiva
- LSP: Language Server Protocol
- Debugging: Soporte para debuggers
- Rust 1.80+ (Instalar Rust)
git clone https://github.com/romancitodev/wollok-rs.git
cd wollok-rs
cargo build --release# Ejecutar el ejemplo incluido
cargo run
# Con logs de debug
RUST_LOG=debug cargo runLa documentación completa del lenguaje está organizada en módulos:
- Características Básicas: Variables, literales, comentarios
- Objetos: Declaración, propiedades, métodos
- Colecciones: Arrays, sets, operaciones
- Expresiones: Asignaciones, llamadas a métodos
- Características Avanzadas: Features planeadas para el futuro
- Comparación con Wollok Original: Diferencias y similitudes
object calculadora {
property memoria = 0
method sumar(a, b) = a + b
method guardarEnMemoria(valor) {
memoria = valor
}
method recuperarMemoria() = memoria
}
const resultado = calculadora.sumar(5, 3)
calculadora.guardarEnMemoria(resultado)El proyecto está organizado en varios crates:
wollok-rs/
├── crates/
│ ├── wollok-lexer/ # Tokenización y análisis léxico
│ ├── wollok-ast/ # Parser y AST
│ ├── wollok-common/ # Tipos y utilidades compartidas
│ └── wollok-cli/ # Interfaz de línea de comandos
└── src/ # Ejecutable principal
- Lexer (
wollok-lexer): Convierte texto a tokens - Parser (
wollok-ast): Genera AST desde tokens - Análisis (planeado): Validación semántica
- Evaluación (planeado): Interpretación del código
¡Las contribuciones son bienvenidas! Por favor:
- Fork el proyecto
- Crea tu feature branch (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push al branch (
git push origin feature/AmazingFeature) - Abre un Pull Request
# Ejecutar tests
cargo test
# Formatear código
cargo fmt
# Linter
cargo clippy
# Con just (opcional)
just test
just fmt
just clippyEste proyecto está licenciado bajo LICENSE - ver el archivo para detalles.
Nota: Este proyecto está en desarrollo activo. Muchas características están planeadas pero no implementadas. Ver issues para el estado actual.