# 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