La máquina analítica fue una propuesta de computadora mecánica digital de propósito general diseñada por el matemático y pionero de la informática inglés Charles Babbage . [2] [3] Fue descrita por primera vez en 1837 como la sucesora de la máquina diferencial de Babbage , que era un diseño para una calculadora mecánica más simple. [4]
El motor analítico incorporó una unidad lógica aritmética , flujo de control en forma de ramificaciones condicionales y bucles , y memoria integrada , lo que lo convirtió en el primer diseño de una computadora de propósito general que podría describirse en términos modernos como Turing-completo . [5] [6] En otras palabras, la estructura del motor analítico era esencialmente la misma que ha dominado el diseño de computadoras en la era electrónica. [3] El motor analítico es uno de los logros más exitosos de Charles Babbage.
Babbage nunca pudo completar la construcción de ninguna de sus máquinas debido a conflictos con su ingeniero jefe y a una financiación inadecuada. [7] [8] No fue hasta 1941 que Konrad Zuse construyó la primera computadora de propósito general, Z3 , más de un siglo después de que Babbage propusiera el motor analítico pionero en 1837. [3]
El primer intento de Babbage de crear un dispositivo de computación mecánica, la máquina diferencial , fue una máquina de propósito especial diseñada para tabular logaritmos y funciones trigonométricas mediante la evaluación de diferencias finitas para crear polinomios de aproximación . La construcción de esta máquina nunca se completó; Babbage tuvo conflictos con su ingeniero jefe, Joseph Clement , y finalmente el gobierno británico retiró su financiación para el proyecto. [9] [10] [11]
Durante este proyecto, Babbage se dio cuenta de que era posible un diseño mucho más general: la máquina analítica. [9] El trabajo sobre el diseño de la máquina analítica comenzó alrededor de 1833. [12] [4]
La entrada, que consistía en programas ("fórmulas") y datos, [13] [9] debía proporcionarse a la máquina a través de tarjetas perforadas , un método que se utilizaba en ese momento para dirigir telares mecánicos como el telar Jacquard . [14] Para la salida, la máquina tendría una impresora, un trazador de curvas y una campana. [9] La máquina también podría perforar números en tarjetas para leerlos más tarde. Empleaba aritmética ordinaria de punto fijo de base 10. [9]
Debía existir un almacén (es decir, una memoria) capaz de almacenar 1.000 números de 40 dígitos decimales [15] cada uno (aproximadamente 16,6 kB ). Una unidad aritmética (el "molino") sería capaz de realizar las cuatro operaciones aritméticas , además de comparaciones y opcionalmente raíces cuadradas . [16] Inicialmente (1838) fue concebido como una máquina diferencial curvada sobre sí misma, en un diseño generalmente circular, con el largo almacén saliendo hacia un lado. [17] Dibujos posteriores (1858) representan un diseño de cuadrícula regularizada. [18] [19] Al igual que la unidad central de procesamiento (CPU) en una computadora moderna, el molino dependería de sus propios procedimientos internos, aproximadamente equivalentes al microcódigo en las CPU modernas, que se almacenarían en forma de clavijas insertadas en tambores giratorios llamados "barriles", para llevar a cabo algunas de las instrucciones más complejas que el programa del usuario pudiera especificar. [7]
El lenguaje de programación que emplearían los usuarios era similar a los lenguajes ensambladores modernos . Eran posibles los bucles y las ramificaciones condicionales, por lo que el lenguaje tal como se concibió habría sido Turing-completo, tal como lo definió más tarde Alan Turing . Se utilizaban tres tipos diferentes de tarjetas perforadas: una para operaciones aritméticas, otra para constantes numéricas y otra para operaciones de carga y almacenamiento, transfiriendo números desde el almacenamiento a la unidad aritmética o viceversa. Había tres lectores separados para los tres tipos de tarjetas. Babbage desarrolló unas dos docenas de programas para la máquina analítica entre 1837 y 1840, y un programa más tarde. [14] [20] Estos programas tratan polinomios, fórmulas iterativas, eliminación gaussiana y números de Bernoulli . [14] [21]
En 1842, el matemático italiano Luigi Federico Menabrea publicó una descripción del motor en francés, [22] basada en las conferencias que Babbage dio cuando visitó Turín en 1840. [23] En 1843, la descripción fue traducida al inglés y ampliamente anotada por Ada Lovelace , quien se había interesado en el motor ocho años antes. [13] En reconocimiento a sus adiciones al artículo de Menabrea, que incluía una forma de calcular los números de Bernoulli usando la máquina (ampliamente considerada como el primer programa de computadora completo), se la ha descrito como la primera programadora de computadoras .
Más tarde en su vida, Babbage buscó formas de construir una versión simplificada de la máquina y ensambló una pequeña parte de ella antes de su muerte en 1871. [1] [7] [24]
En 1878, un comité de la Asociación Británica para el Avance de la Ciencia describió la máquina analítica como "una maravilla de ingenio mecánico", pero recomendó no construirla. El comité reconoció la utilidad y el valor de la máquina, pero no pudo estimar el costo de su construcción y no estaba seguro de si la máquina funcionaría correctamente una vez construida. [25] [26]
De manera intermitente, entre 1880 y 1910, [28] el hijo de Babbage, Henry Prevost Babbage, construyó una parte del molino y del aparato de impresión. En 1910, fue capaz de calcular una lista (errónea) de múltiplos de pi . [29] Esto constituía solo una pequeña parte de todo el motor; no era programable y no tenía almacenamiento. (Las imágenes populares de esta sección a veces han sido mal etiquetadas, lo que implica que era el molino entero o incluso el motor entero). El "molino de motor analítico" de Henry Babbage está en exhibición en el Museo de Ciencias de Londres. [27] Henry también propuso construir una versión de demostración del motor completo, con una capacidad de almacenamiento más pequeña: "quizás para una primera máquina diez (columnas) serían suficientes, con quince ruedas en cada una". [30] Una versión así podría manipular 20 números de 25 dígitos cada uno, y lo que se le podría decir que hiciera con esos números todavía podría ser impresionante. "Es sólo una cuestión de cartas y tiempo", escribió Henry Babbage en 1888, "... y no hay ninguna razón por la que no se deban utilizar (veinte mil) cartas, si es necesario, en una máquina analítica para los fines del matemático". [30]
En 1991, el Museo de Ciencias de Londres construyó un ejemplar completo y funcional de la máquina diferencial nº 2 de Babbage , un diseño que incorporaba mejoras que Babbage descubrió durante el desarrollo de la máquina analítica. [5] Esta máquina se construyó utilizando materiales y tolerancias de ingeniería que habrían estado disponibles para Babbage, lo que desmintió la sugerencia de que los diseños de Babbage no podrían haberse producido utilizando la tecnología de fabricación de su época. [31]
En octubre de 2010, John Graham-Cumming inició una campaña llamada "Plan 28" para recaudar fondos mediante "suscripción pública" para permitir un estudio académico e histórico serio de los planes de Babbage, con vistas a construir y probar un diseño virtual completamente funcional que, a su vez, permitiría la construcción del motor analítico físico. [32] [33] [34] En mayo de 2016, no se había intentado la construcción real, ya que aún no se podía obtener una comprensión consistente de los dibujos de diseño originales de Babbage. En particular, no estaba claro si podría manejar las variables indexadas que se requerían para el programa Bernoulli de Lovelace. [35] En 2017, el esfuerzo del "Plan 28" informó que estaba disponible una base de datos de búsqueda de todo el material catalogado y se había completado una revisión inicial de los voluminosos Scribbling Books de Babbage. [36]
Muchos de los dibujos originales de Babbage han sido digitalizados y están disponibles públicamente en línea. [37]
No se sabe que Babbage haya escrito un conjunto explícito de instrucciones para el motor, al estilo de un manual de procesador moderno. En lugar de eso, mostró sus programas como listas de estados durante su ejecución, mostrando qué operador se ejecutaba en cada paso con pocas indicaciones sobre cómo se guiaría el flujo de control.
Allan G. Bromley supuso que la baraja de cartas podría leerse en direcciones hacia adelante y hacia atrás como una función de ramificación condicional después de probar las condiciones, lo que haría que el motor fuera Turing-completo:
...las tarjetas podrían ordenarse para avanzar y retroceder (y por lo tanto, para que formaran un bucle)... [14]
La introducción por primera vez, en 1845, de operaciones de usuario para una variedad de funciones de servicio, incluyendo, lo más importante, un sistema eficaz para el control por parte del usuario de los bucles en los programas de usuario. No hay ninguna indicación de cómo se especifica la dirección de giro de las tarjetas de operación y variable. En ausencia de otra evidencia, he tenido que adoptar la suposición mínima predeterminada de que tanto las tarjetas de operación como las de variable solo se pueden girar hacia atrás según sea necesario para implementar los bucles utilizados en los programas de muestra de Babbage. No habría ninguna dificultad mecánica o de microprogramación para poner la dirección del movimiento bajo el control del usuario. [38]
En su emulador del motor, Fourmilab dice:
El lector de tarjetas del molino no se limita a procesar las tarjetas en cadena una tras otra desde el principio hasta el final. Además, puede, guiado por las propias tarjetas que lee y avisado por si la palanca de aceleración del molino está activada, hacer avanzar la cadena de tarjetas hacia adelante, saltándose las tarjetas intermedias, o hacia atrás, haciendo que las tarjetas leídas anteriormente se procesen nuevamente.
Este emulador proporciona un conjunto de instrucciones simbólicas escritas, aunque estas fueron creadas por sus autores en lugar de basarse en los trabajos originales de Babbage. Por ejemplo, un programa factorial se escribiría de la siguiente manera:
N° 6N1 1N2 1×L1L0S1–L0L2Asi queL2L0¿CB?11
donde CB es la instrucción de bifurcación condicional o "tarjeta de combinación" utilizada para hacer que el flujo de control salte, en este caso hacia atrás 11 tarjetas.
Babbage comprendió que la existencia de una computadora automática despertaría el interés en el campo ahora conocido como eficiencia algorítmica , y escribió en sus Pasajes de la vida de un filósofo : "En cuanto exista una máquina analítica, ésta guiará necesariamente el curso futuro de la ciencia. Siempre que se busque algún resultado con su ayuda, surgirá la pregunta: ¿Mediante qué proceso de cálculo puede la máquina llegar a esos resultados en el menor tiempo posible ?" [39]
A partir de 1872, Henry continuó diligentemente con el trabajo de su padre y luego se retiró de manera intermitente en 1875. [40]
Percy Ludgate escribió sobre el motor en 1914 [41] y publicó su propio diseño para un motor analítico en 1909. [42] [43] Fue elaborado en detalle, pero nunca construido, y los dibujos nunca han sido encontrados. El motor de Ludgate sería mucho más pequeño (alrededor de 8 pies cúbicos (230 L ), lo que corresponde a un cubo de 2 pies (61 cm) de lado) que el de Babbage, e hipotéticamente sería capaz de multiplicar dos números de 20 dígitos decimales en aproximadamente seis segundos. [44]
En su obra Ensayos sobre la automática (1914), Leonardo Torres Quevedo , inspirado por Babbage, diseñó una máquina calculadora electromecánica teórica que debía ser controlada por un programa de sólo lectura. El trabajo también contiene la idea de la aritmética de punto flotante . [45] [46] [47] En 1920, para celebrar el centenario de la invención del aritmómetro , Torres presentó en París el Aritmómetro Electromecánico, que consistía en una unidad aritmética conectada a una máquina de escribir (posiblemente remota), en la que se podían escribir órdenes y los resultados se imprimían automáticamente. [48] [49]
El artículo de Vannevar Bush Instrumental Analysis (1936) incluía varias referencias al trabajo de Babbage. Ese mismo año, inició el proyecto Rapid Arithmetical Machine para investigar los problemas de construcción de una computadora digital electrónica. [50]
A pesar de este trabajo preliminar, el trabajo de Babbage cayó en la oscuridad histórica, y la máquina analítica era desconocida para los constructores de máquinas de computación electromecánicas y electrónicas en las décadas de 1930 y 1940 cuando comenzaron su trabajo, lo que resultó en la necesidad de reinventar muchas de las innovaciones arquitectónicas que Babbage había propuesto. Howard Aiken , quien construyó la calculadora electromecánica rápidamente obsoleta, la Harvard Mark I , entre 1937 y 1945, elogió el trabajo de Babbage probablemente como una forma de realzar su propia estatura, pero no sabía nada de la arquitectura de la máquina analítica durante la construcción de la Mark I, y consideró su visita a la parte construida de la máquina analítica "la mayor decepción de mi vida". [51] La Mark I no mostró influencia de la máquina analítica y carecía de la característica arquitectónica más profética de la máquina analítica, la ramificación condicional . [51] De manera similar, J. Presper Eckert y John W. Mauchly no conocían los detalles del trabajo de la máquina analítica de Babbage antes de completar su diseño para la primera computadora electrónica de propósito general, la ENIAC . [52] [53]
Si se hubiera construido la máquina analítica, habría sido digital , programable y Turing-completa . Sin embargo, habría sido muy lenta. Luigi Federico Menabrea informó en Sketch of the Analytical Engine : "El Sr. Babbage cree que puede, con su máquina, formar el producto de dos números, cada uno de los cuales contiene veinte cifras, en tres minutos". [54] En comparación, el Harvard Mark I podría realizar la misma tarea en solo seis segundos (aunque es discutible que la computadora sea Turing-completa; el ENIAC, que lo es, también habría sido más rápido). Una CPU moderna podría hacer lo mismo en menos de una milmillonésima de segundo.