Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Historia de los intérpretes y compiladores

3/11
Recursos

Aportes 26

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Corrado Böhm creo el primer compilador en 1951 para su tesis de doctorado. Se le ocurrió que podíamos expresar palabras en inglés para dar instrucciopnes de cómputo.

El año siguiente, Grace Murray Hopper creo el primer compilador para el sistema A0, este se considera el primer compilador real, también fue la primera en usar la palabra compilador 👀

El primer compilador comercial fue creado para el lenguaje Fortran

Creado por John Backus

Justamente existe una forma de describir la sintaxis llamada “Sintaxis Backus-Naur”. Este compilador fue creado por todo un equipo en 18 AÑOS.
.
Los primeros compiladores eran escritos en Assembly, pero necesitabamos escribir compiladores en su propio lenguaje… pero aquí viene el problema del Bootstrap… escribir un compilador en un lenguaje de alto nivel tiene dos ventajas:
.

  1. Es más fácil de mantener
  2. Te permite ver de manera más fácil las limitantes de tu lenguaje

.
La forma en la que se crea el compilador es… bueno, tienes que programarlo dos veces:D
.
Primero creas el compilador en algún otro lenguaje, este lenguaje lo compilará a lenguaje máquina, recordemos que lo que la computadora entiende son 0’s y 1’s, aquí no importa si lo escribiste en Python, Assembler, Pascal, al final todo esto será lenguaje máquina, ejecutable les llamamos nosotros, entonces, este ejecutable que ya entiende cuál es la sintaxis de nuestro lenguaje de programación podemos usarlo para escribir el mismo compilador, pero ahora en nuestro lenguaje de programación, y ese compilador lo compilaremos con el compilador que escribimos antes 😄
.
Y a partir de ya tener este compilador listo, podemos empezar a usar nuestro propio lenguaje para escribirlo y para compilarlo.
.
Una de las primeras implementaciones de los compiladores fue el Navy Electronics Laboratory International ALGOL Compiler (NELIAC) que se creó para ALGOL 58 en 1958.
.
La idea fue tan popular que casi todos los lenguajes tienen compiladores en sus propios lenguajes 😄
.
Los compiladores tienen diferentes partes:
.

  1. Frontend: Se encarga del análisis léxico, sintáctico y semántico
  2. Backend: Se encarga de construir el ejecutable

.
Los lenguajes de programación se especifican en gramática sin contexto porque existen algoritmos para poder parsear esta gramática sin contexto. Fue Noam Chomsky el que diseñ+o esta idea.
.
A Donald Nutt se le ocurrió crear los LTR parsers (Left To Right). Estos parsers crecen con el tamaño del programa de manera lineal O(n).
.
Los lenguajes de programación tienen varias fases:
.

  • Análisis Léxico: Que se siga la estructura del lenguaje.
  • Análisis sintáctico: Que la sintaxis del lenguaje sea correcta.

.
Sin embargo, se dieron cuenta que en lugar de tener que escribir un lexer o un parser, se podían autogenerar si las definiciones de los lenguajes se escribían en gramática sin contexto. De aquí llegan los lexers y parsers generators.
.
Compilaciómn cruzada: Antes no era normal generar código de un lenguaje para diferentes S. O. Con la compilación cruzada podemos usar una idea base para generar código para otro sistema. La primera implementación de esto fue para la UNIVAC II donde se pudo crear generar ejecutables para la IBM705:

UNIVAC II

IBM 705

Y después de eso llegaron los optimizadores 👀. Uno de los primeros en lograrlos fueron los creadores de Fortran. Se sugirió usar grafos y otras estructuras de datos para hacer estas optimizaciones. Una de las ideas principales fueron que se eliminara todo ese código que no se ejecuta nunca.
.
Luego llegó la idea de JIT (Just In Time) Compilation. Con esto tienes las ventajas de los interpretes y un análisis estadístico para que en tiempo de ejecución el programa se compile rápidamente a código máquina. Un ejemplo de lenguajes que usan JIT es JavaScript.
.
Los generadores de código son una tendencia que se ha usado últimamente para crear código que corra en otros sistemas, un buen ejemplo en JavaScript. Este lenguaje es la base de otros como TypeScript que acaba siendo compilado a JavaScript 😄

Brendan Eich - Creador de JavaScript!
![](


Grace Murray Hopper, creadora del Sistema A-0; primer compilador desarrollado para una computadora en 1552.

Grace Murray Hopper

Bueno me pareció larga la clase pero aprendí demasiado jaja ahora todo tiene sentido jaja

  • Interesante lo de compilación cruzada , por ejemplo Java y su funcionamiento en diferentes sistemas operativos. Aunque esto aprendí que funcione mediante JVM ->

El lenguaje Java requiere de una máquina virtual, o un “CPU virtual” en el que se ejecuta todo el código que se escribe en el lenguaje. Esto permite que el mismo ejecutable binario pueda ejecutarse en todos los sistemas, apoyado por el software Java, a través del uso de una máquina virtual Java (JVM).

  • JavaScript que compila durante su ejecución y dentro del proceso realiza análisis y optimización. Hay un curso específicamente de este proceso y del motor V8: https://platzi.com/clases/javascript-navegador/

  • Y los generadores de código lo entendí bastante bien con TypeScript, dado que es un lenguaje que compila JavaScript. Así como los preprocesadores CSS que compilan código CSS.

Pequeña historia de la IBM 705
IBM 705

la computadora mark 1, la primera computadora construida por IBM

Dennis Ritcher, sin el, la programación no hubiera despegado 😃
Si no se ve la imagen, puedo decir que, gracias a el existio Ensamblador, la cual fue uno de los pilares importantes para que se haya creado cobol, LISP, Fortran y lo demas, es historia :3


Konrad Zuse, creador del primer compilador en 1951.

Diferencia entre un interprete y un compilador
Estos son dos tipos de traductores de lenguajes de programación:
Compilador, que analiza el programa fuente y lo traduce a otro equivalente escrito en otro lenguaje (por ejemplo, en el lenguaje de la máquina). Su acción equivale a la de un traductor humano, que toma un libro y produce otro equivalente escrito en otra lengua.
Intérprete, que analiza el programa fuente y lo ejecuta directamente, sin generar ningún código equivalente. Su acción equivale a la de un intérprete humano, que traduce las frases que oye sobre la marcha, sin producir ningún escrito permanente. Intérpretes y compiladores tienen diversas ventajas e inconvenientes que los hacen complementarios:
Un intérprete facilita la búsqueda de errores, pues la ejecución de un programa puede interrumpirse en cualquier momento para estudiar el entorno (valores de las variables, etc.). Además, el programa puede modificarse sobre la marcha, sin necesidad de volver a comenzar la ejecución.

Un compilador suele generar programas más rápidos y eficientes, ya que el análisis del lenguaje fuente se hace una sola vez, durante la generación del programa equivalente. En cambio, un intérprete se ve obligado generalmente a analizar cada instrucción tantas veces como se ejecute (incluso miles o millones de veces).

Un intérprete permite utilizar funciones y operadores más potentes, como por ejemplo ejecutar código contenido en una variable en forma de cadenas de caracteres. Usualmente, este tipo de instrucciones es imposible de tratar por medio de compiladores. Los lenguajes que incluyen este tipo de operadores y que, por tanto, exigen un intérprete, se llaman interpretativos. Los lenguajes compilativos, que permiten el uso de un compilador, prescinden de este tipo de operadores.

Para crear FF me toco hacerlo dos veces la primera en java y luego en FF. importante tener una test suite que te permita hacer estas cosas sin peligro... en FF son 5000. pruebas de las diferentes construcciones.

Resume mucho lo que vi en las materias de Autómatas en la Universidad.
Lastimosamente debo la materia aún jaja D:
Pero muy cierto todo lo que David nos hablo en esta clase y las etapas que se realizan al querer crear nuestro compilador para nuestro lenguaje.
Muchas Gracias 😄

Yo que he empezado ahora a oír el término de JIT por php 8 y resulta que es de los 60 😯

el termino acuñado para los lenguajes que generan codigo a otro lenguaje es transpiler


John Backus, creo el primer compilador comercial para el lenguaje FORTRAN en 1957.

Empieza el profe explcando que los humanos no piensan en binario.

Corrado Bohm idea el primer compilador práctico en 1951 en su tesis de doctorado donde planteaba usara palabras de lenguaje natural para expresar cómputos.
Grace Hopper en 1952 creó el primer compilador para su sistema A0 y es el primer compilador del mundo.
En 1957 se crea el primer compilador comercial por Jhon Backus - Fokus y su creación duró 18 años.
Posteriormente se crean compiladores de alto nivel escritos en su propio lenguaje. Ejemplo: en 1962 se crea el compilador de Lix.
Finalmente llega la gramática sin contexto y parseo donde encontramos.
En 1965 Donald Nutt genera los LR parser estos parsers crecen con el tamaño del programa de manera lineal.

Los lenguajes de programación tienen varias faces:

  1. Análisis léxico.
  2. Análisis sintáctico.
    Posteriormente llegan los generadores de parsers en 1960 por Robert Mcurt para DMG.
    Compilación cruzada se utiliza para generar ejecutables para diferentes sistemas.
    Just in time compilation tuvo su auge durante los 80 y se populariza en los 90 por Java y actualmente se utiliza en JavaScript.
    Los generadores de código fueron de las últimos avances.

Están genial estas clases. No todo es práctica y conceptos técnicos. También hay que aprender historia y las bases y teoría detrás de los conceptos.

Creador de Python

Guido van Rossum

Gracias por tan impresionante contenido del curso, sería conveniente bibliografía para, poder profundizar en el tema

Noam Chomsky, pensador político y creador de la idea de gramática sin contexto.

IBM 650

UNIVAC I

Grace Murray Hopper acuño el termino Compilador.

INCREIBLEEEE
Me gusto como el profesor conto la historia, que emoción

Interesante la clase, el compilador gfortran es muy bueno y de hecho superior al compilador de C, aunque de fortran no tengo buenos recuerdos jaja