Vercel Labs ha publicado scriptc, un compilador de TypeScript a nativo con licencia Apache-2.0 alojado en GitHub. Compila TypeScript sin modificar — verificado por el compilador TypeScript real — en ejecutables nativos autocontenidos, sin Node, sin V8 y sin motor JavaScript en el binario por defecto. Un programa compilado ocupa unos 170-200 KB con un arranque de aproximadamente 2,4 ms, frente a ~47 ms de Node; el consumo típico de memoria (RSS) es de 1-4 MB frente a 67-116 MB de Node.
El compilador clasifica cada construcción en tres niveles explícitos: compilado estáticamente (el modo por defecto), ejecutado dinámicamente mediante un motor quickjs-ng incrustado (~620 KB, activable con --dynamic) para el JS distribuido por dependencias npm o código tipado con any, y rechazado con un código de error específico, un marco de código y normalmente una sugerencia de reescritura. El comando `scriptc coverage` informa qué sentencias compilan estáticamente y qué bloqueos quedan. Los valores que cruzan de dinámico a estático se validan en tiempo de ejecución: un tipo mentiroso lanza un TypeError capturable en lugar de corromper memoria.
La superficie estática cubre clases con herencia simple y dispatch dinámico, closures, genéricos monomorfizados, uniones discriminadas, async/await sobre fibras stackful, excepciones, desestructuración, iteradores, template literals y expresiones regulares exactas según ECMAScript. La biblioteca estándar incluye cadenas UTF-16 exactas, arrays/Maps/Sets fieles a JS, JSON con casts validados en tiempo de ejecución, Math, typed arrays, Buffer y jerarquías de Error tipadas. Gran parte de la API de Node está soportada — fs, path, process, child_process, os, crypto, url, zlib, timers — además de la pila de servidor (net, http, https, tls con mbedTLS incluido, dgram, dns, fs.watch, readline) y fetch con el subconjunto web WHATWG sobre la pila net/TLS nativa. Con --dynamic, los paquetes npm se resuelven con el algoritmo de Node y se incrustan en la compilación; los binarios nunca leen node_modules en tiempo de ejecución.
La corrección se garantiza de dos maneras: un corpus de pruebas diferenciales de más de 800 programas se ejecuta tanto en Node como en binario nativo con coincidencia byte a byte de stdout, stderr y códigos de salida; y todo el corpus se reejecuta bajo AddressSanitizer con auditoría de recuento de referencias, donde fugas y use-after-free son fallos de build. Las divergencias deliberadas respecto a Node (unas decenas, sobre todo en internas de temporización y propiedades de objetos de error) están documentadas y numeradas; nada diverge en silencio. El formato de números es shortest-roundtrip, verificado por fuzzing contra Node con un millón de doubles.
Las válvulas de escape incluyen comptime(() => ...) para evaluación en tiempo de compilación, un FFI nativo (--ffi) que vincula declaraciones TypeScript de solo firma a llamadas C ABI, y casts verificados donde JSON.parse(...) as Config inserta una validación en tiempo de ejecución que nombra la ruta conflictiva. Arquitectónicamente, tsc analiza y verifica tipos hacia un IR tipado, desde el cual un backend LLVM (por defecto) o un backend C de referencia legible genera código compilado con clang. La instalación se hace con `npm install -g scriptc`; se requiere clang, macOS arm64 es la plataforma principal, y los binarios de Linux y Windows se generan por compilación cruzada con sus propias lanes de pruebas diferenciales. El proyecto es joven pero ya ha atraído atención, con 750 estrellas en GitHub.
Comentarios
Aún no hay comentarios — escribe el primero.
Inicia la conversación
Sin cuenta ni contraseña — introduce tu correo y te enviamos un enlace de acceso de un solo uso. ¿Primera vez? Todo se configura automáticamente.
Tu valoración se aplicará automáticamente al iniciar sesión.
Revisa tu bandeja de entrada
Hemos enviado un enlace de acceso a …. Ábrelo en este dispositivo — esta pestaña te conectará automáticamente.
Esperando tu clic …
·