Divirtiéndonos con el Código Fuente de Go

¡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.

Prerrequisitos

Descripción General del Taller

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:

Ejercicio 0

Introducción y Configuración

Comienza clonando y configurando el entorno del código fuente de Go.

Ejercicio 1

Compilando Go Sin Cambios

Aprende a compilar el toolchain de Go desde el código fuente sin modificaciones.

Ejercicio 2

Añadiendo el Operador Flecha "=>" para Goroutines

Aprende a modificar el scanner/lexer añadiendo "=>" como sintaxis alternativa para iniciar goroutines.

Ejercicio 3

Múltiples Keywords "go" - Mejora del Parser

Aprende a modificar el parser permitiendo múltiples keywords "go" consecutivos (go go go myFunction).

Ejercicio 4

Parámetros de Inlining - Experimentos con Function Inlining

Explora el comportamiento del inliner modificando los parámetros de inlining de funciones.

Ejercicio 5

Modificación de gofmt - Indentación y Transformación AST

Modifica gofmt para usar 4 espacios en lugar de tabs y añade una transformación AST personalizada reemplazando "hello" con "helo".

Ejercicio 6

Pase SSA - Detectando División por Potencias de Dos

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.

Ejercicio 7

Go Paciente - Haciendo que Go Espere a las Goroutines

Modifica el runtime de Go para esperar a que todas las goroutines terminen antes de finalizar el programa.

Ejercicio 8

Detective de Goroutines Dormidas - Monitoreo del Estado del Runtime

Añade logging al scheduler de Go para monitorear goroutines que se van a dormir.

Ejercicio 9

Select Predecible - Eliminando la Aleatoriedad del Select de Go

Modifica la implementación del select de Go para que sea determinista en lugar de aleatorio.

Ejercicio 10

Stack Traces Estilo Java - Haciendo los Panics de Go Familiares

Transforma los stack traces verbosos de Go al formato estilo Java.

Ejercicio 11

D&D Work Stealing - Tirando Dados por Goroutines

Añade una tirada de dado d20 al algoritmo de work stealing del planificador de Go para controlar los robos de goroutines entre procesadores.

Cómo Empezar

  1. Comienza con el Ejercicio 0 para configurar tu entorno
  2. Trabaja los ejercicios en orden
  3. Después del ejercicio 1, puedes elegir el ejercicio que quieras.

Consejos para el Éxito

Recursos

Referencias en Video

Los ejercicios de este taller están basados en ideas de mis charlas:

Entendiendo el Compilador de Go

Profundización en el proceso de compilación de Go

Entendiendo el Runtime de Go

Exploración del sistema de runtime de Go

Completando el Taller

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:

Contribuir

¿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!

Comenzar con el Ejercicio 0 →