¡Bienvenido a un taller interactivo donde aprenderás a modificar y experimentar con el código fuente del lenguaje de programación Go! Este taller práctico te guiará a través de la comprensión, compilación y modificación del compilador y runtime de Go.
Este taller usa Go versión 1.26.1 - haremos checkout del tag de release específico para asegurar consistencia en todos los ejercicios.
Este taller consta de 12 ejercicios que te llevarán a través del proceso desde compilar Go desde el código fuente hasta hacer modificaciones en diferentes partes del compilador, herramientas y runtime. Obtendrás conocimientos sobre los internos de Go, desde cosas como el lexer o parser, hasta comportamientos del runtime:
Comienza clonando y configurando el entorno del código fuente de Go.
Aprende a compilar el toolchain de Go desde el código fuente sin modificaciones.
Aprende a modificar el scanner/lexer añadiendo "=>" como sintaxis alternativa para iniciar goroutines.
Aprende a modificar el parser permitiendo múltiples keywords "go" consecutivos (go go go myFunction).
Explora el comportamiento del inliner modificando los parámetros de inlining de funciones.
Modifica gofmt para usar 4 espacios en lugar de tabs y añade una transformación AST personalizada reemplazando "hello" con "helo".
Crea un pase SSA personalizado en el compilador que detecta operaciones de división por potencias de dos que podrían optimizarse con bit shifts.
Modifica el runtime de Go para esperar a que todas las goroutines terminen antes de finalizar el programa.
Añade logging al scheduler de Go para monitorear goroutines que se van a dormir.
Modifica la implementación del select de Go para que sea determinista en lugar de aleatorio.
Transforma los stack traces verbosos de Go al formato estilo Java.
Añade una tirada de dado d20 al algoritmo de work stealing del planificador de Go para controlar los robos de goroutines entre procesadores.
git para rastrear tus cambios y revertir cuando sea necesarioLos ejercicios de este taller están basados en ideas de mis charlas:
Profundización en el proceso de compilación de Go
Exploración del sistema de runtime de Go
Al completar todos los ejercicios, habrás:
¡Felicidades! Habrás ganado la confianza para seguir explorando el código fuente de Go. Este conocimiento te permite:
¿Encontraste un problema, tienes una idea de mejora o quieres añadir más ejercicios? ¡Por favor abre un issue o envía un pull request!