HyperPB: Un analizador Protobuf Go ultrarrápido que supera a UPB

2025-07-24
HyperPB: Un analizador Protobuf Go ultrarrápido que supera a UPB

Este artículo presenta HyperPB, un analizador Protobuf increíblemente rápido escrito en Go. Basado en las ventajas de UPB (uno de los tiempos de ejecución de Protobuf más rápidos), HyperPB aprovecha el ABI de registros de Go y la falta de comportamiento indefinido para optimizaciones significativas. Utilizando compilación JIT y PGO en línea, supera el código generado por el propio Protobuf Go y vtprotobuf en las pruebas de referencia. Su núcleo es un intérprete basado en tablas, mejorado con optimizaciones inteligentes como técnicas de copia cero, división de datos calientes/fríos y reutilización de arena.

Leer más
Desarrollo

GC de Go: Una inmersión profunda y un asignador de arena personalizado

2025-04-21
GC de Go: Una inmersión profunda y un asignador de arena personalizado

Este artículo profundiza en las complejidades del recolector de basura de Go y utiliza ese conocimiento para construir un asignador de arena de alto rendimiento. Al aprovechar inteligentemente el comportamiento del GC de Go, el autor logra una asignación de memoria más rápida que el asignador integrado de Go, especialmente para asignaciones a gran escala. El artículo detalla los principios de diseño, la implementación y los resultados de referencia del asignador de arena personalizado, y también analiza su rendimiento en entornos de alta concurrencia.

Leer más

Triples de destino: Una guía al caos del compilador

2025-04-15
Triples de destino: Una guía al caos del compilador

Este artículo profundiza en las complejidades de las triples de destino del compilador, como x86_64-unknown-linux-gnu. Explica los componentes de una triple (arquitectura, proveedor, SO, ABI) y revela las diferencias entre el manejo de GCC y LLVM. El artículo detalla las convenciones de nomenclatura para varias arquitecturas (x86, ARM, etc.), la representación del proveedor y el SO, y enfatiza la importancia de la coherencia para evitar confusiones. En última instancia, el autor aconseja en contra de inventar nuevas convenciones de triples de destino al crear nuevas cadenas de herramientas para facilitar la colaboración entre cadenas de herramientas.

Leer más
Desarrollo triples de destino