Tengo curiosidad sobre el nacimiento del compilador. ¿Cómo comenzó la programación? ¿Las personas primero construyeron hardware que reconocía un cierto conjunto de comandos, o definieron un lenguaje y luego construyeron hardware a su alrededor? Y en una nota relacionada, ¿cuál fue el primer lenguaje de programación?
programming-languages
history
compiler
assembly
David Cowden
fuente
fuente
Respuestas:
Esto tiene una respuesta muy clara, en realidad: el código fuente vino primero , por un gran margen.
Antes de dar los detalles técnicos, un poco de perspectiva:
Los primeros lenguajes de programación fueron todas traducidas al lenguaje de máquina o ensamblador con la mano . La idea de usar una pieza de software para automatizar esta traducción (ya sea a través de un compilador o un evaluador) siempre surgió más tarde, y estaba lejos de ser intuitiva.
Considere esta cita del artículo de Wikipedia sobre FORTRAN que ilustra la resistencia que los compiladores tuvieron que enfrentar:
=> Cuando el compilador FORTRAN llegó al mercado (1957), la gente ya estaba felizmente programando tanto en lenguaje ensamblador como en FORTRAN.
El caso fue similar para LISP (de Hackers & Painters ):
Una vez más, no solo el código fuente (en LISP) es anterior al intérprete, este último ni siquiera estaba implícito en el primero.
Pero estos desarrollos son relativamente tardíos. Incluso sin considerar el motor analítico de Charles Babbage y el primer programa relacionado de Ada Lovelace , hubo lenguajes de programación en el siglo XX que precedieron a los compiladores:
Plankalkül de Konrad Zuse y la construcción matemática del cálculo λ introducida por Alonzo Church. Ambos son indudablemente lenguajes de programación formalmente especificados, pero ninguno tenía un compilador en ese momento.
Para poner esto en perspectiva, el cálculo λ es de la década de 1930, y Plankalkül se desarrolló alrededor de 1945. Por el contrario, el primer compilador FORTRAN salió en 1957 (pero nuevamente tres años después de que se especificó FORTRAN).
fuente
La programación comenzó con personas que escriben el código de la máquina directamente en la memoria, en tarjetas perforadas y cinta de papel o incluso acortan enlaces en un panel de conexiones. Es difícil saber si el hardware se creó según las necesidades del software o viceversa. Ciertamente, el primer diseño de una computadora programable completa , el motor analítico de Babbage , fue anterior al primer programa documentado de Ada Lovelace .
En cuanto al primer lenguaje de programación, he argumentado que era el lenguaje de máquina del motor analítico de Babbage (de la pregunta ¿Cuál fue el primer lenguaje de programación escrito para computadoras? )
Para responder la pregunta en el título de su pregunta, dado que el lenguaje ensamblador es el código fuente , y los lenguajes ensambladores son anteriores a los lenguajes de alto nivel que podrían compilarse en ensamblador, el código fuente vino primero.
Además, un compilador nunca ha sido necesario , solo conveniente.
Es perfectamente posible escribir software directamente en la memoria si ha memorizado las tablas de códigos de operación apropiadas . De hecho, algunas computadoras antiguas requerían que el usuario ingresara el código de arranque en el teclado hexadecimal del panel frontal para que se iniciaran, pero podía tocar cualquier código que quisiera y se ejecutaría.
Es cierto que a medida que las CPU se vuelven más complejas, esto se vuelve más difícil, pero un conjunto de instrucciones simple como 6809 o Z80 (ignorando todos los modos indexados extraños) es relativamente fácil de programar incluso sin un ensamblador , y mucho menos un compilador de un lenguaje de alto nivel.
Si alguna vez se hubiera construido el motor analítico de Babbage, estoy seguro de que habría habido un Steampunk Mel , escribiendo programas optimizados directamente en tarjetas de telar.
fuente
movl $0, -20(%rbp)
, mientras que el código de máquina esC745EC00000000
, y es el último (bueno, algo así) lo que primero se ingresó manualmente o se leyó de la cinta de papel. En cuanto a si el código de máquina cuenta como código fuente , me inclino a decir "lo que sea que haga flotar su barco". Si lo está activando manualmente, entonces sí, diría que cuenta.El compilador fue primero . Fue escrito directamente en código de máquina, ya que la fuente no se pudo compilar sin un compilador.
Los artículos de Wikipedia como este sobre Lenguajes informáticos pueden responder la mayoría de las preguntas. Si no es así, simplemente elija uno de los libros de Tanenbaum, como Structured Computer Organization , que puede responder más preguntas de las que incluso puede hacer :)
No puedo decir nada más específico, porque su pregunta es demasiado amplia.
fuente
Los intérpretes existían antes que los compiladores, por lo que el código fuente existía antes que los compiladores.
Existen algunos artículos muy interesantes sobre la historia de la informática aquí . Se supone que el código fuente para el compilador FORTRAN II está disponible, pero esos enlaces están rotos.
Este artículo , de 1954, describe al intérprete Whirlwhind.
fuente
Esta pregunta gira fuertemente en nuestra interpretación semántica del 'código fuente'. Si lo definimos como 'instrucciones de computadora basadas en texto que se compilan', entonces presumiblemente un compilador vino primero.
Estoy más inclinado a ir con algo más autoritario, como el artículo de Mark Harman "Por qué el análisis y la manipulación del código fuente siempre serán importantes" presentado en la Décima Conferencia Internacional de Trabajo IEEE sobre Análisis y Manipulación del Código Fuente
Y creo que su respuesta está implícita en esa definición: el código fuente ciertamente fue lo primero.
fuente
Los algoritmos se clasificaron en papel, luego los alus se cablearon física / mecánicamente (cables móviles). Para cambiar el programa, mueva los cables y vuelva a ejecutar.
Más tarde, el lenguaje ensamblador se resolvió en papel, se tradujo al código de la máquina a mano, luego se usaron interruptores, etc. para alimentarlo a la memoria RAM. O tarjetas perforadas, etc. Eventualmente puede hacer un ensamblador, luego puede programar en ensamblaje, no código de máquina, luego puede hacer un compilador. Eventualmente puedes arrancar ese compilador. Y crea nuevos idiomas y nuevos compiladores, etc.
El primer idioma no era un idioma, luego el primer idioma fue el lenguaje ensamblador. Para cada procesador, el primer idioma es el lenguaje ensamblador (derivado del código de máquina). El conjunto de instrucciones está diseñado primero, luego el hardware para implementarlo, luego el ensamblador y luego los compiladores.
fuente