first commit
This commit is contained in:
52
readme.md
Normal file
52
readme.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# j-lang
|
||||
|
||||
La idea de j-lang es crear un "proto-lenguaje" parecido a python pero implementado desde 0 para validar y aprender más sobre la gestión de memoria.
|
||||
|
||||
Actualmente en `mem-heap\src\allocator.h` ya hay una implementeción de un Memory Allocator casi funcional.
|
||||
|
||||
## 🗺️ Hoja de Ruta: Proyecto Proto-Lenguaje
|
||||
Esta ruta va desde lo más bajo (la memoria) hasta lo más alto (ejecutar código).
|
||||
|
||||
### Fase 1: El Cimiento (Gestión de Memoria) 🏗️
|
||||
Objetivo: Tener un malloc y free propios que gestionen metadatos compactos.
|
||||
|
||||
Estado: ¡Ya estás aquí!
|
||||
|
||||
Tareas clave:
|
||||
- [ ] Terminar CMA_malloc con la cabecera compactada (Size + Marked + InUse).
|
||||
- [ ] Implementar una función CMA_free que pueda liberar un bloque específico.
|
||||
|
||||
### Fase 2: El Modelo de Objetos (Object Model) 📦
|
||||
Objetivo: Definir cómo se ve un número, una cadena o una lista dentro de tu memoria C.
|
||||
Conexión: Cada objeto de tu lenguaje será un struct en C que comienza con tu CMA_metadata.
|
||||
|
||||
Tareas clave:
|
||||
- [ ] Crear un enum para los tipos (ENTERO, STRING, LISTA).
|
||||
- [ ] Definir el struct Object genérico que envuelve tus datos.
|
||||
|
||||
### Fase 3: El Front-End (Lexer y Parser) 📖
|
||||
Objetivo: Convertir el texto del código fuente en algo que C entienda.
|
||||
|
||||
Tareas clave:
|
||||
- [ ] Lexer (Tokenizador): Romper el texto x = 10 en fichas: [ID:x], [OP:=], [NUM:10].
|
||||
- [ ] Parser: Organizar esas fichas en un Árbol de Sintaxis Abstracta (AST). Por ejemplo, un nodo "Asignación" que tiene un hijo "x" y otro "10".
|
||||
|
||||
### Fase 4: El Motor (Evaluador o VM) ⚙️
|
||||
Objetivo: Recorrer el árbol y "hacer" lo que dice.
|
||||
|
||||
Tareas clave:
|
||||
- [ ] Crear una función recursiva eval(nodo) que ejecute la lógica.
|
||||
|
||||
Si es un nodo SUMA, suma los hijos. Si es un nodo IMPRIMIR, muestra en pantalla.
|
||||
|
||||
### Fase 5: El Recolector de Basura (Garbage Collector) 🧹
|
||||
Objetivo: Automatizar la limpieza.
|
||||
|
||||
Tareas clave:
|
||||
- [ ] Implementar Mark (Marcar): Recorrer todos los objetos accesibles desde tus variables y poner el bit Marked a 1.
|
||||
- [ ] Implementar Sweep (Barrer): Recorrer todo el heap linealmente (usando tu función next_block). Si un bloque tiene Marked == 0 y InUse == 1, llamar a CMA_free.
|
||||
|
||||
## Estructura del proyecto
|
||||
|
||||
- vm: maquina virtual de j-lang
|
||||
- projects: carpeta con scripts en j-lang
|
||||
Reference in New Issue
Block a user