www tipos pagina oficial net lenguaje dev compiladores compilador caracteristicas bloodshed compiler-theory

compiler theory - tipos - (Cuándo) ¿Debo aprender compiladores?



http www bloodshed net (9)

Debes aprender sobre los compiladores, por la sencilla razón de que la implementación de un compilador te convierte en un mejor programador . El compilador seguramente apestará, pero habrás aprendido mucho durante el proceso. Es una excelente forma de mejorar (o practicar) tus habilidades de programación.

De acuerdo con este http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html artículo, defnitely debería.

Presupuesto Resumen ejecutivo suave pero insistente: si no sabe cómo funcionan los compiladores, entonces no sabe cómo funcionan las computadoras. Si no está 100% seguro de saber cómo funcionan los compiladores, entonces no sabe cómo funcionan.

Pensé que era un artículo muy interesante, y el campo de aplicación es muy útil (hazte un favor y léelo) Pero, de nuevo, he visto exitosos ingenieros senior sw que no conocían muy bien los compiladores, o máquinas internas arquitectura para el caso, pero sabía una o dos cosas de cada elemento en la siguiente lista:

  • Un paradigma de programación (OO, funcional, ...)
  • Una API de lenguaje de programación (C #, Java ..) y al menos 2 muy diferentes dicen algunos! (Java / Haskell)
  • Un marco de programación (Java, .NET)
  • Un IDE para hacerte más productivo (Eclipse, VisualStudio, Emacs, ...)
  • Programación de mejores prácticas (consulte las reglas de fxcop, por ejemplo)
  • Principios de programación (DRY, High Cohesion, Low Coupling, ...)
  • Metodologías de programación ( TDD , MDE )
  • Patrones de diseño (Estructurales, Conductuales, ...)
  • Conceptos básicos de arquitectura (niveles, capas, modelos de proceso (cascada, ágil, ...)
  • Una herramienta de prueba (Pruebas unitarias, Pruebas de modelos, ...)
  • Una técnica GUI (WPF, Swing)
  • Una herramienta de documentación (Javadoc, Sandcastle ..)
  • Un lenguaje de modelado (y quizás una herramienta) (UML, VisualParadigm, Rational)
  • (indudablemente olvidando cosas muy importantes aquí)

No todas estas herramientas son necesarias para ser un buen programador (como una GUI cuando simplemente no la necesita) pero la mayoría sí lo son. ¿Dónde entran los compiladores, y son realmente tan importantes, ya que, como mencioné, muchos programadores parecen estar bien sin conocerlos y, sobre todo, convertirse en un buen programador se ve la multitud de dominios de conocimiento casi un logro de toda la vida: ), así que incluso si los compiladores son extremadamente importantes, ¿acaso no hay cosas aún más importantes?

¿O debería pedir ''The Unleashed Compilers Unlimited Bible (en 24H ..))) hoy?

Para aquellos que han leído el artículo, y quieren comenzar a estudiar de inmediato:

Recursos de aprendizaje sobre analizadores, intérpretes y compiladores


Desde una perspectiva práctica, la teoría general del compilador es menos preocupante que un ensamblador, un enlazador y un cargador para una plataforma específica. Por ejemplo, considero el compilador de GCC como un traductor de mi lenguaje C de alto nivel al lenguaje ensamblador de bajo nivel en una plataforma x86. Y la mayoría de las veces, refino manualmente;) el código generado por el compilador.

Desde una perspectiva científica, le sugiero que aprenda la teoría del compilador, le ayudará a comprender la gran idea sobre la que se basa la computadora. Y aún más, tendrás un ojo diferente sobre el mundo.


La teoría del compilador es útil, pero no esencial.

Aunque hay algunas técnicas que son útiles, como el análisis léxico y el análisis sintáctico.

Otro es el manejo de errores. Los compiladores necesitan muchos de estos. La entrada del usuario puede contener cualquier cosa, incluso lo inesperado. Y debes lidiar con todos estos.


Los cursos de compiladores generalmente se centran en cómo el código de alto nivel se analiza y se traduce en código de máquina. Eso es muy interesante, pero no crucial. Es más importante comprender qué es este código máquina que genera el compilador para que comprenda cómo funciona una computadora y cuál es el costo de cada construcción de lenguaje.

Así que prefiero decir que debe conocer un lenguaje ensamblador (me refiero a un subconjunto limitado de lenguaje ensamblador para una arquitectura) para comprender cómo funciona una computadora y este último es definitivamente necesario para un programador competente para que entienda qué falla de segmentación es , cuándo optimizar y cuándo no y otras cosas similares de bajo nivel.


No es necesario que comprenda los compiladores para ser un buen programador, pero puede ser útil. Una de las cosas que me di cuenta al aprender sobre ellos, es que la compilación es simplemente una traducción.

Si alguna vez ha traducido de un idioma a otro, acaba de completar la compilación.

Entonces, ¿cuándo debería aprender sobre los compiladores?

Cuando lo desee o lo necesite para resolver un problema.


Si solo quieres ser un programador ordinario y escribir cosas ... no necesitas tomar compiladores.

Si desea aprender informática y apreciar y convertirse realmente en un científico informático, DEBE tomar compiladores.

¡Los compiladores son un microcosmos de la informática! Contiene todos y cada uno de los problemas, incluidos (entre otros) AI (algoritmos codiciosos y búsqueda heurística), algoritmos, teoría (lenguajes formales, autómatas), sistemas, arquitectura, etc.

Puedes ver mucha informática reunirse de una manera increíble. No solo entenderá más acerca de por qué los lenguajes de programación funcionan de la manera en que lo hacen, sino que se convertirá en un mejor codificador para tener esa comprensión. Aprenderá a entender el bajo nivel, lo que ayuda al alto nivel.

Como programadores, a menudo nos gusta hablar de que las cosas son una "caja negra" ... pero las cosas son mucho más suaves cuando se comprende un poco sobre lo que hay en la caja. Incluso si no compila un compilador completo, seguramente aprenderá mucho. Verás los formalismos detrás del análisis sintáctico (y te darás cuenta de que no se trata solo de un montón de casos especiales pirateados), y un montón de problemas completos de NP. Verá por qué la teoría de la informática es tan importante de entender para las cosas prácticas. (Después de todo, los compiladores son extremadamente prácticos ... y no tendríamos los compiladores que tenemos hoy sin formalismos).

Realmente espero que consideres aprender sobre ellos ... te ayudará a pasar al siguiente nivel como científico de la computación :-).


Si tiene la intención de escribir un código de tiempo extremadamente crítico en tiempo real, se beneficiará al comprender cómo el compilador optimiza su código. Sin embargo, en realidad se beneficiará más al comprender la arquitectura subyacente de su hardware.

Según mi experiencia, si comprende cómo funciona el hardware y cómo el compilador interpreta su código, podrá escribir código que haga exactamente lo que pretende que haga. Me han atrapado en varias ocasiones, escribiendo código que el compilador optimizó y haciendo que el hardware hiciera algo que no pretendía.

En general, comprender la pila completa de software-hardware no es esencial para escribir buenos algoritmos y códigos, ¡pero sin duda será de gran ayuda!


Si va a trabajar a un nivel lo suficientemente alto como para preocuparse por UML y el código de autodescripción, podría recorrer toda su carrera sin querer o necesitar detalles íntimos de cómo funciona el compilador.

Pero, si eres un codificador de las trincheras y no tienes aspiraciones de administrar a tus amigos, es probable que algún día te des cuenta de que estás en guerra con tu compilador. Podría ser un error al azar que aparece o una conversación en el pasillo sobre while-verses-for loops. Se dará cuenta de que la asamblea (o IL, probablemente, en los próximos años) está un poco a la izquierda de lo que necesita y se desplegará otro universo.

Entonces, supongo que mi respuesta es, solo sé consciente del compilador por el momento, que está haciendo bastante, pero no te preocupes demasiado por eso.


Solo mi opinión, pero creo que a los compiladores no se les presta suficiente atención en los cursos de CS, ni en los míos, ni en los demás afaik. Creo que cualquier especialista en CS debería hacer 2 cosas después de un año sabático o terminar su especialidad: volver a aprender si es necesario autómatas finitos y tal vez un lenguaje formal de métodos. Apliquelo. Escribe un compilador simple con este conocimiento. Alex Aiken tiene un tutorial en línea muy útil sobre cómo escribir un compilador para el COOL (Classroom Object Oriented Language) que es un subconjunto de Scala a partir de 2013 ver. Al menos al momento de escribir.