Platzi
Platzi

¡Invierte en ti y celebremos! Adquiere un plan Expert o Expert+ a precio especial.

Antes: $349
$259
Currency
Antes: $349
Ahorras: $90
COMIENZA AHORA
Termina en: 9D : 4H : 10M : 35S

Debes iniciar sesión

Para ver esta clase crea una cuenta sin costo o inicia sesión

Historia de los intérpretes y compiladores

3/11

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!
![](139910042_10218835409860290_7627854908570398675_o.jpg


Ken Thompson y Dennis Ritchie, creadores de UNIX y C (y un montón de cosas más jaja). Dos pioneros.

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

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

Grace Murray Hopper

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.

Konrad_Zuse_(1992).jpg
Konrad Zuse, creador del primer compilador en 1951.

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
Unsuccessful HTTP response

la computadora mark 1, la primera computadora construida por IBM

mark-1.PNG

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 😯

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

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

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
IBM_650_EMMA.jpg
UNIVAC I
102667576p-03-01.jpg

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

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!
![](139910042_10218835409860290_7627854908570398675_o.jpg


Ken Thompson y Dennis Ritchie, creadores de UNIX y C (y un montón de cosas más jaja). Dos pioneros.

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

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

Grace Murray Hopper

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.

Konrad_Zuse_(1992).jpg
Konrad Zuse, creador del primer compilador en 1951.

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
Unsuccessful HTTP response

la computadora mark 1, la primera computadora construida por IBM

mark-1.PNG

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 😯

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

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

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
IBM_650_EMMA.jpg
UNIVAC I
102667576p-03-01.jpg

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