BookinglyTech News
Software

Halis: un lenguaje de sistemas con seguridad por defecto y sin recolección de basura

El proyecto de código abierto apuesta por un enfoque estricto: errores de desbordamiento, nulidad y carreras de datos se eliminan en compilación.

3 min de lecturaDev.to0 vistas

Un lenguaje de programación llamado Halis, compilado y autocontenido, ha publicado su código en un repositorio público tras un periodo de desarrollo en solitario. La premisa es clara: la seguridad de memoria y la integridad de datos no son características opcionales, sino el estado predeterminado del sistema. El autor, conocido como HieuLouis, describe el proyecto como la respuesta a la fricción constante entre rendimiento y control que enfrentan los desarrolladores de sistemas.

Compilador y arquitectura

El compilador, denominado hlc, está escrito completamente en Halis. El proceso de arranque utiliza dos pasos de compilación que generan un resultado byte a byte idéntico, un hecho verificado automáticamente por la cadena de arranque en cada construcción. Esto garantiza que el lenguaje se compila a sí mismo sin dependencias externas para su propio funcionamiento.

El desarrollo ha sido una apuesta personal sin financiación externa ni equipo grande, lo que sugiere que el estadio actual es funcional pero probablemente carece de la madurez de herramientas como Rust o Zig. El código está disponible para revisión, permitiendo a la comunidad evaluar la implementación real frente a la propuesta teórica.

Siete garantías del compilador

La propuesta técnica se centra en eliminar comportamientos indefinidos desde la raíz. El compilador rechaza código que viola siete garantías fundamentales:

En primer lugar, las operaciones de entrada y salida (I/O) son efectos declarados explícitamente. Una función sin una cláusula uses es pura por definición; no puede acceder al sistema de archivos ni a la red. Si una función llama a otra que realiza I/O, incluso tras cinco capas de llamadas, y no declara ese efecto, la compilación falla.

El desbordamiento de enteros, la división por cero y el acceso fuera de límites de matrices no provocan comportamientos indefinidos, sino que detienen la ejecución de forma segura. No existe una opción para desactivar estas comprobaciones en nombre del rendimiento.

El lenguaje prohíbe valores nulos, variables no inicializadas y variables globales ocultas. El sistema de tipos obliga a manejar los valores ausentes de forma explícita.

La gestión de memoria se realiza sin recolector de basura. Utiliza contabilidad de referencias con liberación exacta al salir del ámbito. El autor indica que las pruebas de presión de memoria mantienen un uso de memoria real constante, inferior a 256 MB en espacios de direcciones limitados.

Los efectos de I/O se dividen en ocho capacidades específicas: Fs, Clock, Args, Exit, Net, Rand, Proc y Conc. Se verifican estáticamente a través de todo el grafo de llamadas. Una función que solo necesita leer la hora del sistema no puede abrir una conexión de red.

El seguimiento de datos contaminados (taint tracking) es nativo. Los tipos tainted[T] envuelven valores potencialmente controlados por atacantes. El compilador impide pasar estos valores a puntos de salida como print o net_lookup sin una sanitización explícita previa mediante funciones de la biblioteca estándar.

Por último, la libertad de carreras de datos (data-race freedom) se asegura por construcción, aunque el artículo original se corta antes de detallar el mecanismo específico de sincronización.

Halis intenta resolver problemas que otros idiomas dejan al desarrollador o a herramientas de análisis estático. Si logra mantener la seguridad sin penalizar excesivamente el rendimiento, podría encontrar nichos en sistemas críticos. Por ahora, es un proyecto activo y abierto, pero la falta de un roadmap público o pruebas de rendimiento comparativas limita su adopción inmediata.