Diferencias clave entre C y Rust para programadores de sistemas

Este artículo técnico compara las particularidades del lenguaje C con Rust, dirigido a programadores de sistemas que ya dominan el primer. A diferencia de la abundante documentación sobre 'Rust para C', este texto detalla aspectos específicos de C que pueden resultar contraintuitivos para quienes pr

Vx: lenguaje de programación para computación heterogénea

Vx es un lenguaje de programación de sistemas diseñado para la computación heterogénea, integrando CPU, GPU, NPU y memoria de aceleradores en su sistema de tipos. A diferencia de los lenguajes tradicionales que tratan los aceleradores como infraestructura opaca, Vx define la ubicación de los datos c

El viaje de Zig: de la programación de sistemas a la perfección

El artículo 'The Zig Journey' detalla una chara impartida por el autor en la conferencia Zigtoberfest en Múnich, donde se presenta una metodología de tres niveles para dominar el lenguaje de programación Zig. El texto argumenta que el objetivo principal de Zig no es solo ser una alternativa a Go o R

Goose: lenguaje de sistemas seguro en memoria y rápido

Goose es un lenguaje de programación de sistemas diseñado para ofrecer seguridad de memoria sin las sobrecargas típicas de los lenguajes modernos. Su arquitectura elimina el montón de memoria (heap), el recolector de basura (GC) y las anotaciones de vida, basándose en pila de datos gestionados por e

Cerberus: un modelo formal para esclarecer la semántica de C

El lenguaje C sigue siendo una pieza central de la infraestructura informática, pero su definición formal —el estándar ISO— se ha distanciado tanto de las propiedades que el código de sistemas asume como de las que los compiladores implementan, y ninguna de esas visiones está claramente caracterizad

Arena Allocator: una alternativa a malloc para gestionar memoria en C

El artículo 'Untangling Lifetimes: The Arena Allocator' propone una estrategia de gestión de memoria en C que supera las limitaciones del par tradicional malloc/free. El autor argumenta que la percepción generalizada de que la gestión manual es inherentemente compleja y propensa a errores surge de e

El puntero dual de Mojo: seguro por defecto, inseguro por operación

Mojo, lenguaje orientado al cálculo de alto rendimiento, introduce un tipo de puntero bruto con un comportamiento singular: puede ser seguro o inseguro según la operación que se le aplique, en lugar de exigir variantes separadas como hace Rust. Esta dualidad es posible gracias al modelo de propiedad

Asignación estática y trabajo constante: patrones para sistemas robustos

Este ensayo técnico analiza dos patrones de diseño aplicados en sistemas de software críticos: la asignación estática de memoria y el principio de trabajo constante. El autor parte de los riesgos de seguridad del par malloc/free, donde un use-after-free puede convertirse en confusión de tipos y perm

Los obstáculos reales que impiden reemplazar al lenguaje C

El lenguaje C no solo es un estándar sintáctico: es todo un ecosistema de herramientas, compiladores, analizadores estáticos y soporte multiplataforma consolidado durante décadas. Sustituirlo exige que la alternativa aporte mejoras tangibles que justifiquen rehacer la cadena de producción. Este artí

La experiencia de programar en Zig viniendo de Rust: una comparativa práctica

Un desarrollador con siete años de experiencia en Rust relata su transición a Zig al reimplementar en este lenguaje la librería jsonpath-rust, un procesador del lenguaje de consulta JSONPath definido en RFC 9535. El nuevo proyecto, llamado zig-jsonpath, le sirvió como banco de pruebas para comparar

Construir software de sistemas con Nix: entornos reproducibles para Rust y BPF

Nix es, a la vez, un gestor de paquetes, un sistema de compilación, un lenguaje para definir builds y la base de la distribución Linux NixOS. Su pieza más práctica para equipos de desarrollo son los flakes, que funcionan como un lockfile universal: fijan una revisión concreta del repositorio nixpkgs

Absolutistas de la seguridad de memoria: más allá de Rust

El artículo analiza el debate en torno a la seguridad de memoria en lenguajes de programación y arremete contra los llamados «absolutistas», que descalifican a Rust por contar con bloques `unsafe` sin aplicar el mismo rasero a C, C++ o Zig. El texto parte de una observación: aunque durante años la d

Por qué malloc reserva más memoria de la que pides

Un programador que pidió 13 bytes con malloc descubrió, mientras construía su propio asignador de memoria por curiosidad, que la reserva nunca coincide con lo solicitado. La respuesta está en los metadatos que el asignador guarda junto a cada bloque. El artículo parte de un bump allocator, el diseñ

Reflexiones sobre los tipos enteros en los lenguajes de programación

Este artículo analiza los sistemas de tipos enteros en los lenguajes de programación más extendidos y defiende el enfoque de Rust como modelo más riguroso. El autor repasa cómo C, C#, Go y Swift manejan los enteros: en C, el desbordamiento de enteros con signo es comportamiento indefinido y conviven

Solod (So): un subconjunto estricto de Go que compila a C

Solod (So): un subconjunto estricto de Go que compila a C En un ecosistema saturado de nuevos lenguajes de programación que prometen ser "como Go pero con más características" o "como Rust pero más simples", Solod (So) irrumpe con una propuesta radicalmente diferente: no añade complejidad, sino que

Fil-C presenta ensamblador inline con seguridad de memoria

Fil-C, una variante de C y C++ con seguridad de memoria desarrollada por pizlonator, incorpora compatibilidad con ensamblador inline manteniendo las garantías de seguridad. La función, aún en fase preliminar y no incluida en el lanzamiento 0.679, requiere compilar desde el código fuente. El proyect

Zig by Example: un repositorio para aprender Zig con ejemplos anotados

El repositorio "Zig by Example", mantenido por el usuario boringcollege en GitHub, ofrece una introducción práctica al lenguaje de programación Zig mediante una colección de ejemplos anotados. La propuesta sigue la misma filosofía didáctica que el popular "Go by Example" de Mark McGranaghan, del que

Explorando la gestión automática de buffers con io_uring

UringMachine, una gema de Ruby para realizar operaciones de E/S mediante io_uring —la interfaz de Linux para E/S asíncrona de alto rendimiento—, está incorporando un sistema de gestión automática de buffers inspirado en el mecanismo de buffer rings del kernel. ¿Qué es io_uring y por qué importa? i

Rust para programadores de Python: guía completa de formación

Esta guía de formación titulada 'Rust for Python Programmers: Complete Training Guide' está dirigida a desarrolladores con experiencia en Python que quieran aprender Rust, el lenguaje de sistemas con tipado estático y seguridad de memoria garantizada en tiempo de compilación. El material parte de la

Rusty Penguin crea un sistema operativo ternario desde cero en Rust puro

Rusty Penguin es un sistema operativo completo desarrollado desde cero en Rust puro, sin depender del kernel Linux ni de libc. Su innovación clave reside en la adopción de la lógica ternaria (-1, 0, +1) como primitiva fundamental en todas las capas: desde el planificador hasta el motor de inferencia

Lone: intérprete de Lisp en C desde cero

Lone es un intérprete de Lisp escrito en C que se distingue por su desarrollo 'desde cero' sin utilizar librerías estándar como libc. Su sistema de gestión de memoria, conocido como el 'heap', es el tema central de esta explicación y representa un caso de estudio valioso sobre cómo se construyen los

Propuesta controvertida: limitar llms en zig days

Zig Days son eventos colaborativos de programación de un día, generalmente los sábados, que sirven como el formato insignia de la comunidad Zig. Su objetivo principal es fomentar un entorno donde los desarrolladores puedan aplicar el pensamiento de sistemas para crear software de alta calidad. Sin e

Arrays en C: entre datos y punteros

Los arrays en C son una fuente común de confusión para desarrolladores debido a su comportamiento híbrido entre tipos de datos y punteros. Técnicamente, un array `T[n]` representa una secuencia contigua de valores en memoria, pero en la práctica se 'decomponen' (decay) en punteros `T*` en casi todas

Firecracker: Crean Runtime Serverless Similar a AWS Lambda

Este artículo describe la construcción de un runtime de servidorless similar a AWS Lambda utilizando microVMs de Firecracker, un proyecto personal del autor Vivek Jadhav. El objetivo principal es entender el funcionamiento interno de las plataformas serverless, que a menudo se perciben como 'mágicas

De Lisp a Magia: La Evolución de un Recolector de Basura

Este artículo, escrito por Matheus Afonso Martins Moreira, narra la evolución de un recolector de basura llamado 'Baby's Second Garbage Collector', originalmente concebido como una solución simple y precisa en el lenguaje dinámico 'lone lisp'. La historia se presenta de forma alegórica, utilizando m

Programación: ¿Siempre es más lento lo de bajo nivel?

Este artículo explora el concepto de "costos ocultos" en la programación, desafiando la idea de que los lenguajes de alto nivel son inherentemente menos eficientes que los lenguajes de bajo nivel como C o C++. El autor observa que los programadores de sistemas a menudo evitan lenguajes con recolecci

C: la API de archivos más eficiente, según expertos

El artículo de maurycyz.com argumenta que C posee la mejor API para la manipulación de archivos, destacando una flexibilidad y eficiencia que carecen otros lenguajes de programación. La clave de esta superioridad reside en la capacidad de C para tratar los archivos como si fueran datos en memoria a

Rust: Una herramienta, no una solución mágica

Rust: Una herramienta útil pero no mágica El lenguaje de programación Rust, celebrado durante una década como el más admirado según las encuestas de Stack Overflow, no es la solución mágica que algunos defienden. Así lo aseguran dos voces del sector tecnológico que, desde perspectivas distintas, ad

TAL: Ensamblador seguro para software crítico

## Lenguaje Ensamblador Tipado (TAL): Un Puente Seguro entre Lenguajes de Alto Nivel y Hardware ¿Qué es y por qué es importante? En el mundo del desarrollo de software, especialmente en áreas críticas como sistemas operativos, kernels móviles y aplicaciones que requieren una seguridad extrema, la

Deno: Guía completa de Interfaz con Lenguajes de Bajo Nivel

El Denonomicon se presenta como una guía profunda sobre la Interfaz de Función Extranjera (FFI) de Deno, un tema que, aunque cubierto brevemente en la documentación oficial de Deno, requiere una explicación más detallada para su correcta utilización. La FFI es esencial para permitir que Deno, un ent

Software moderno: ¿Más grande, menos eficiente?

El artículo "The Apollo 11 Paradox" plantea una crítica contundente a la dirección actual del desarrollo de software, señalando una preocupante tendencia a la ineficiencia y la pérdida de conexión con los fundamentos de la computación. El ejemplo citado, la disparidad entre los 4KB de RAM utilizados