Como señalaron Mouviciel y Emilio Garavaglia , el concepto es anterior a la informática. Sin embargo, la primera instancia de un bucle de software fue el bucle que Ada Lovelace utilizó para calcular los números de Bernoulli , como se describe en la Nota G de su traducción del Boceto del motor analítico inventado por Charles Babbage , de LF Menabrea . Menabrea observó la capacidad del bucle analítico de bucle desde el principio:
Entendiendo esto, permítannos, al comienzo de la serie de operaciones que deseamos ejecutar, colocar la aguja C en la división 2, la aguja B en la división 5 y la aguja A en la división 9. Permitamos martillo de la esfera C para golpear; Golpeará dos veces y, al mismo tiempo, la aguja B pasará sobre dos divisiones. Este último indicará el número 7, que sucede al número 5 en la columna de primeras diferencias. Si ahora permitimos que el martillo del dial B golpee a su vez, golpeará siete veces, durante las cuales la aguja A avanzará siete divisiones; estos agregados a los nueve ya marcados por él darán el número 16, que es el número cuadrado consecutivo a 9. Si ahora reiniciamos estas operaciones, comenzando con la aguja C, que siempre se debe dejar en la división 2,
El mecanismo de bucle del motor analítico se hereda directamente del telar mecánico de Joseph Marie Jacquard (1801), como se señala en las memorias de Menabrea:
Ahora se preguntará cómo la máquina puede por sí misma y, sin recurrir a la mano del hombre, asumir las disposiciones sucesivas adecuadas para las operaciones. La solución de este problema se ha tomado del aparato de Jacquard, utilizado para la fabricación de productos brocados, de la siguiente manera:
Dos especies de hilos generalmente se distinguen en materiales tejidos; uno es el hilo de urdimbre o longitudinal, el otro el hilo de urdimbre o transversal, que es transportado por el instrumento llamado lanzadera, y que cruza el hilo o urdimbre longitudinal. Cuando se requiere un material brocado, es necesario a su vez evitar que ciertos hilos crucen el tejido, y esto de acuerdo con una sucesión que está determinada por la naturaleza del diseño que se va a reproducir. Anteriormente, este proceso era largo y difícil, y era necesario que el trabajador, al ocuparse del diseño que debía copiar, regulara él mismo los movimientos que debían tomar los hilos. De allí surgió el alto precio de esta descripción de productos, especialmente si los hilos de varios colores entraron en la tela. Para simplificar esta fabricación, Jacquard ideó el plan de conectar cada grupo de hilos que debían actuar juntos, con una palanca distinta perteneciente exclusivamente a ese grupo. Todas estas palancas terminan en varillas, que están unidas en un solo paquete, que generalmente tiene la forma de un paralelepípedo con una base rectangular. Las varillas son cilíndricas y están separadas entre sí por pequeños intervalos. El proceso de elevar los hilos se resuelve así en el movimiento de estos diversos brazos de palanca en el orden requerido. Para lograr esto, se toma una hoja rectangular de cartón, algo más grande que una sección del paquete de brazos de palanca. Si esta hoja se aplica a la base del paquete y luego se comunica un movimiento de avance al cartón, este último moverá con él todas las barras del paquete, y, en consecuencia, los hilos que están conectados con cada uno de ellos. Pero si el cartón, en lugar de ser liso, se perforara con agujeros correspondientes a las extremidades de las palancas que lo unen, entonces, dado que cada una de las palancas pasaría a través del cartón durante el movimiento de este último, todos permanecerían en su lugares. Por lo tanto, vemos que es fácil determinar la posición de los agujeros en el cartón, que, en cualquier momento, habrá un cierto número de palancas, y en consecuencia de paquetes de hilos, levantados, mientras que el resto permanece donde fueron. Suponiendo que este proceso se repita sucesivamente de acuerdo con una ley indicada por el patrón a ejecutar, percibimos que este patrón puede reproducirse en el material. Para este propósito solo necesitamos componer una serie de tarjetas de acuerdo con la ley requerida, y organizarlos en el orden adecuado uno tras otro; luego, al hacer que pasen sobre una viga poligonal que está tan conectada como para girar una nueva cara por cada golpe del transbordador, dicha cara se impulsará paralelamente contra el haz de brazos de palanca, la operación de elevar el los hilos se realizarán regularmente. Así, vemos que los tejidos brocados pueden fabricarse con una precisión y rapidez anteriormente difíciles de obtener.
El telar de Jacquard es una aplicación muy temprana de un bucle en el contexto de ordenar una máquina para producir una salida repetida :
La idea detrás del telar Jacquard era un sistema de tarjetas perforadas y ganchos. Las tarjetas se hicieron muy gruesas y tenían agujeros rectangulares perforados en ellas. Los ganchos y agujas utilizados en el tejido fueron guiados por estos agujeros en el cartón. Cuando los ganchos entraron en contacto con la tarjeta, se mantuvieron estacionarios a menos que se encontrara con uno de los agujeros perforados. Luego, el gancho pudo pasar a través del orificio con una aguja insertando otro hilo, formando así el patrón deseado. Se lograron patrones intrincados al tener muchas tarjetas organizadas una tras otra y / o utilizadas repetidamente.
El telar de Jacquard también se reconoce como una forma muy temprana de un programa almacenado :
Si el impulso detrás de gran parte del desarrollo de las máquinas de cálculo discutido hasta ahora había surgido de la computación numérica, la motivación que condujo a la primera forma de `` programa almacenado '' fue provenir de una fuente muy diferente: la industria textil. Hemos visto anteriormente que uno de los aspectos fundamentales de los sistemas computacionales es el concepto de representar información y, aunque no lo hemos hecho explícitamente, la aplicación de esta idea se puede discernir en todos los artefactos que hemos examinado hasta ahora: en el desarrollo de representaciones escritas para valores numéricos y los paralelos mecánicos que surgieron de estos. Por lo tanto, la alineación de los guijarros en un marco de ábaco, la yuxtaposición de escalas móviles en una regla de cálculo y la configuración de engranajes dentados en los dispositivos de Schickard, Pascal y Leibniz, Todos son ejemplos de técnicas de representación que buscan simplificar los procesos complejos que subyacen a las tareas aritméticas. Sin embargo, existen categorías de información y representaciones de la misma, distintas del número sobre el cual se pueden realizar procesos computacionales. La tecnología de tejido desarrollada por Joseph-Marie Jacquard en 1801 ilustra un ejemplo de dicha categoría.
Charles Babbage también adaptó el procedimiento de almacenamiento de Jacquard en el motor analítico , la presencia o ausencia de un agujero comunicaba un simple comando de encendido y apagado a la máquina:
El motor analítico tiene muchas características esenciales que se encuentran en la computadora digital moderna. Era programable usando tarjetas perforadas, una idea tomada del telar Jacquard utilizado para tejer patrones complejos en textiles. El motor tenía una 'Tienda' donde se podían mantener números y resultados intermedios, y un 'Molino' separado donde se realizaba el procesamiento aritmético. Tenía un repertorio interno de las cuatro funciones aritméticas y podía realizar multiplicación y división directa. También era capaz de funciones para las que tenemos nombres modernos: ramificación condicional, bucle (iteración), microprogramación, procesamiento paralelo, iteración, enclavamiento, sondeo y modelado de pulsos, entre otros, aunque Babbage en ninguna parte usó estos términos. Tenía una variedad de resultados que incluían impresión impresa, tarjetas perforadas,
Las ramas condicionales del motor analítico combinadas con los bucles mecánicos inspirados en Jacquard y el procedimiento de almacenamiento son abrumadoramente similares (conceptualmente) a su ejemplo, especialmente si agregamos la impresora Babbage a la mezcla, para las print "...";
partes.
Obviamente, los bucles mecánicos son anteriores al telar de Jacquard, el primer dispositivo conocido que funciona de manera circular es el mecanismo Antikythera (100 aC), y si miramos aún más en la historia (y nos aventuramos terriblemente fuera del tema), los relojes de sol son probablemente los mecanismos más antiguos creados por el hombre. donde es evidente la comprensión de los bucles, siguiendo, por supuesto, el patrón repetitivo de las órbitas del sol y de otros cuerpos estelares.
Sin embargo, creo que en el contexto de la informática (y no el cálculo ni nada más), el algoritmo de cálculo de números de Analytical Engine y Bernoulli de Ada puede acreditarse para introducir bucles, compartiendo al menos parte del crédito con el telar de Jacquard, habiendo adaptado directamente el concepto de eso.