Jose Luis Montañes Ojados 5dc0946a19 add JLANG_free and Object
2026-02-15 22:12:19 +01:00
2026-02-15 20:48:01 +01:00
2026-02-15 20:48:01 +01:00
2026-02-15 22:12:19 +01:00
2026-02-15 20:48:01 +01:00
2026-02-15 20:48:01 +01:00
2026-02-15 22:12:19 +01:00

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
Description
No description provided
Readme 166 KiB
Languages
C 98.9%
Objective-J 1%