while (1) {
if (1+1==2) {
print "Yes, you paid attention in Preschool!";
} else {
print "Wait... I thought 1+1=2";
}
}
Como desarrollador, todos tenemos que usar bucles con mucha frecuencia. Lo sabemos. Lo que me preguntaba era, ¿quién pensó en la idea de tener bucles? ¿Qué idioma introdujo los bucles? ¿Cuál fue la primera construcción de bucle? ¿Fue un while
bucle? Un for
bucle? etc?
repeat
invocaría a otrorepeat
; nunca terminaría. Creo que tal vez las mujeres leen las instrucciones del champú de esa manera, pero los hombres lo leen como una iteración, y solo necesitan unos minutos para lavarse el cabello.Respuestas:
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:
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:
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 :
El telar de Jacquard también se reconoce como una forma muy temprana de un programa almacenado :
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:
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.
fuente
Los bucles son anteriores a la informática. Puedes encontrarlos en notación musical ya desde el canto gregoriano:
fuente
El concepto de "hacerlo de nuevo" es de alguna manera "primitivo" para la percepción humana. Puede decirle esto a un niño que acaba de elaborar una comprensión mínima del lenguaje natural.
En sistemas discretos, los bucles se encuentran en todas las máquinas de estados finitos cuando admite que puede alcanzar un estado que ya ha estado antes .
El ciclo más simple es el ciclo entre dos estados (un reloj). Dado que cualquier número mayor de estados puede resultar de un recuento, cada máquina más compleja se construye sobre un "contador" incrementado por un reloj que puede hacer "saltar" sobre ciertas banderas que representan ciertas operaciones combinadas. Este es el núcleo de una máquina Von Neumann en la que se basa cada computadora basada en microprocesador.
En el código de máquina, se codifica un salto
JP-Z-nnnn
(donde Z es el indicador de cuál es la base de su condición). En un lenguaje de nivel superior, esto se traduce casi de inmediato aUn bucle no es más que un lugar
goto
donde la etiqueta x precede a la instrucción goto misma.Cualquier otra formulación (for, do, while, etc.) es solo "azúcar sintáctico" para domesticar mejor el goto salvaje en los casos muy comunes de repetición hasta que algo sucede
fuente
El concepto de bucle es una de las cosas que distingue a una computadora en toda regla de una máquina de calcular simple. Si un sistema no admite bucles, entonces no está completo y, por lo tanto, no es una computadora.
El primer diseño completo de Turing fue el motor analítico de Babbage , por lo que debe haber tenido un concepto de bucle. Sin embargo, hay sistemas que tienen bucles pero no están completos de Turing (porque omiten algo más). Sin embargo, el trabajo de Babbage es probablemente un buen punto de partida.
fuente
Suponiendo que se refiere a lenguajes de programación de texto modernos.
Algol60 tiene "FOR", "DO", "UNTIL" y "WHILE", por lo que fue antes de 1960.
El Museo de Computación Retro tiene algunos idiomas antes de 1960.
Kvikkalkul , el lenguaje de los años 50 para la programación de submarinos nucleares suecos solo tiene GOTO. (Sin embargo, Kvikkalkul es casi seguramente un engaño de los años 90, no un lenguaje histórico real).
Plankalkül de Konrad Zuse es lo primero que pude encontrar. Tiene una construcción "für".
fuente
DO
bucles.El trabajo de Liebniz y Newton contiene algoritmos con construcciones de bucle. Liebniz construyó una calculadora mecánica y especuló (como lo hizo Lovelace años después) sobre una máquina para realizar análisis más sofisticados. Sus notas sobre estas ideas son incompletas, pero describen la lógica estructurada con bucles.
Sin embargo, la idea de secuencias de repetición y recuento de bucles controlados, así como lo que llamaríamos mientras que los bucles se discuten en el trabajo del hombre para el que se nombran los algoritmos: Muhammad ibn Musa al-Khwarizmi del siglo IX. Newton, Liebniz, Babbage, Lovelace, Lovelace, Lovelace, etc. .
Por supuesto, al-Khwarizmi confió, en parte, en los antiguos griegos. En algún momento, probablemente regresemos a la versión de enjuague, espuma y repetición de Adán y Eva.
Para más información sobre Al-Khwārizmī y su trabajo, ver:
http://www-groups.dcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html
fuente