¿Qué vino primero, el compilador o la fuente?


17

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?



1
Una de las subpreguntas era una pregunta en sí misma: ¿Cuál fue el primer lenguaje de programación escrito para computadoras? .
Mark Booth

¿Seguramente esto es algo que podrías buscar ?
Caleb

@Caleb leyó los comentarios en la respuesta de SkyDan ..
David Cowden

2
@Brian Supuesto válido, pero resulta estar equivocado. No es un problema de huevo de gallina en absoluto, hay una respuesta muy clara (pista: el más votado a continuación está mal). El código fuente a largo anterior a los compiladores.
Konrad Rudolph

Respuestas:


30

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:

… El primer compilador FORTRAN [se entregó] en abril de 1957. Este fue el primer compilador optimizador, porque los clientes eran reacios a usar un lenguaje de programación de alto nivel a menos que su compilador pudiera generar código cuyo rendimiento fuera comparable al del lenguaje ensamblador codificado a mano . [énfasis mío]

=> 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 ):

Steve Russell dijo, mira, ¿por qué no programo esta evaluación ...? Y le dije, ho, ho, estás confundiendo la teoría con la práctica, esta evaluación está destinada a la lectura, no a la informática. Pero él siguió adelante y lo hizo. Es decir, compiló la evaluación en mi artículo en el código de máquina IBM 704, corrigiendo el error, y luego lo publicitó como un intérprete de Lisp, que ciertamente era. Entonces, en ese momento, Lisp tenía esencialmente la forma que tiene hoy ... "

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).


¡Gran respuesta! No sabía que el código solía compilarse a mano, pero eso tiene sentido.
ckb

10

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.


1
¿Realmente leíste la definición del código fuente en el enlace de wikipedia que publicaste? Como se dijo anteriormente, el código de la máquina no es el código fuente. Y código de máquina! = Ensamblaje. El código de la máquina estuvo allí primero.
oculto

@ MarkBooth Creo que MIPS y AVR son aún más simples ...
David Cowden

44
@occulus - ¿De qué manera el lenguaje ensamblador no es el código fuente ? El lenguaje ensamblador asigna una instrucción de lenguaje ensamblador a un código de máquina y puede ensamblarse trivialmente en su cabeza, si conoce sus tablas de códigos operativos. Honestamente, niños en estos días ... * 8 ')
Mark Booth

1
Para mí, el lenguaje ensamblador es movl $0, -20(%rbp), mientras que el código de máquina es C745EC00000000, 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.
John Bode

@JohnBode - Oh, estoy de acuerdo, pero dada la correspondencia 1: 1 entre las instrucciones de ensamblaje y las instrucciones del código de máquina, el ensamblaje es solo una cuestión de traducción mecánica (ensamblaje), la lógica es idéntica. La compilación implica una traducción mucho más compleja: muchas (aunque Occam es un lenguaje de alto nivel y muchas declaraciones de Occam mapeadas 1: 1 en las instrucciones de Transputer debido a su arquitectura MISC . * 8 ').
Mark Booth

6

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.


20
También se podría argumentar que la fuente fue primero, porque para las primeras "computadoras" la fuente era equivalente al binario (es decir, se programaron directamente en el lenguaje legible por máquina).
Joachim Sauer

55
@Joachim Por definición, el código fuente es un texto legible por humanos que el compilador traduce al código de máquina. El código de máquina en sí mismo, por lo tanto, no es el código fuente.
SkyDan

11
El compilador fue primero, pero se implementó en redes neuronales biológicas.
Den

8
¿Por qué es tan altamente votado? Está incorrecto. El código fuente en lenguajes de alto nivel (especialmente λ-cálculo, Plankalkül y LISP) es anterior a los compiladores e intérpretes. Esto ni siquiera tiene en cuenta los programas semiformales que escribió Ada Lovelace.
Konrad Rudolph

44
@SkyDan ¿Cuál es tu definición entonces? No conozco ninguna definición sensata para la cual su respuesta sea correcta (tanto para "compilador" como para "código fuente en un lenguaje de alto nivel", y mucho menos para un nivel bajo).
Konrad Rudolph

4

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.


1

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

Definición 1 (Código fuente): Para mayor claridad, se entiende por "código fuente" cualquier descripción completamente ejecutable de un sistema de software. Por lo tanto, se interpreta que incluye código de máquina, lenguajes de muy alto nivel y representaciones gráficas ejecutables de sistemas.

Y creo que su respuesta está implícita en esa definición: el código fuente ciertamente fue lo primero.


"Presumiblemente un compilador vino primero" - solo si define "compilado" como "traducido por una herramienta automática", en lugar de "traducido a código máquina a mano".
Konrad Rudolph

Muy interesante papel. Me gusta esa definición de código fuente, aunque en realidad hace que mi pregunta no sea una pregunta ..
David Cowden

@KonradRudolph no es la unidad que realiza la compilación, ya sea una intervención de máquina, humana o divina, llamada 'compilador'?
Kirk Broadhurst

0

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.