¿Aprender la construcción del compilador mejora la habilidad / visión de resolución de problemas de programación? ¿Si es así, cómo? ¿O por qué no?

Vagando del tema de la habilidad de resolución de problemas per se, de la construcción del compilador uno puede aprender algunas cosas, que pueden ser importantes para la implementación de una solución.

Aquí hay algunas de estas cosas para C ++ (que es el lenguaje más popular entre los programadores competitivos):

  • Es útil aprender a distinguir las áreas de memoria de pila y pila. El primero se usa para variables locales y llamadas a funciones (por ejemplo, argumentos de función y dirección de retorno) y a menudo se limita a un valor no grande (como 4 MB). Este último se utiliza para variables globales y asignadas dinámicamente y generalmente no está limitado (excepto la memoria disponible). Teniendo en cuenta la posible limitación mencionada del tamaño de la pila, se debe prestar atención a:
    • Profundidad de recursión . Corresponde al tamaño de la pila, no a la memoria disponible. Entonces, si uno encuentra un desbordamiento de pila, debería considerar verificar el límite de tamaño de la pila y considerar establecerlo manualmente.
    • Arreglos regulares . La matriz regular declarada en una función (incluyendo main () ) se asignará en la pila, mientras que la matriz regular declarada globalmente se asignará en el montón. Para el primer caso, uno debe tener cuidado con el posible límite de tamaño de pila.
  • El orden de evaluación de varias cosas no está especificado . Para citar el orden de evaluación:
    • “El orden de evaluación de los operandos de casi todos los operadores de C ++ (incluido el orden de evaluación de argumentos de función en una expresión de llamada a función y el orden de evaluación de las subexpresiones dentro de cualquier expresión) no está especificado. El compilador puede evaluar operandos en cualquier orden , y puede elegir otro orden cuando la misma expresión se evalúa nuevamente.
    • Hay varias excepciones a esta regla (por ejemplo, para los operadores &&, || y,) que se indican a continuación “.
  • Las operaciones de punto flotante no son confiables . Para un cierto ejemplo, considere mirar aquí: Free Software Foundation (FSF)

No mucho, pero seguro sabrás qué método te ahorrará tiempo