Como mouviciel e Emilio Garavaglia observaram, o conceito antecede a computação. No entanto, a primeira instância de um loop de software foi o loop que Ada Lovelace usou para calcular os números de Bernoulli , conforme descrito na Nota G de sua tradução do esboço do mecanismo analítico inventado por Charles Babbage , por LF Menabrea . A capacidade do mecanismo analítico de fazer um loop é notada cedo por Menabrea:
Entendendo isso, vamos, no início da série de operações que desejamos executar, colocar a agulha C na divisão 2, a agulha B na divisão 5 e a agulha A na divisão 9. Vamos permitir que o martelo do mostrador C para golpear; ele ataca duas vezes e, ao mesmo tempo, a agulha B passa por duas divisões. O último indicará o número 7, que sucede ao número 5 na coluna das primeiras diferenças. Se agora permitirmos que o martelo do mostrador B toque por sua vez, ele tocará sete vezes, durante o qual a agulha A avançará sete divisões; estes somados aos nove já marcados por ele fornecerão o número 16, que é o número quadrado consecutivo a 9. Se agora recomeçarmos essas operações, começando com a agulha C, que sempre será deixada na divisão 2,
O mecanismo de loop do Analytical Engine é herdado diretamente do tear mecânico de Joseph Marie Jacquard (1801), conforme observado nas memórias de Menabrea:
Agora será perguntado como a máquina pode, por si mesma, e sem recorrer à mão do homem, assumir as disposições sucessivas adequadas às operações. A solução desse problema foi retirada do aparelho da Jacquard, usado para a fabricação de produtos em brocado, da seguinte maneira:
Duas espécies de fios são geralmente diferenciadas nos tecidos; um é o fio de urdidura ou longitudinal, o outro o fio de trama ou transversal, que é transportado pelo instrumento chamado lançadeira e que atravessa o fio ou urdidura longitudinal. Quando é necessário um material de brocado, é necessário, por sua vez, impedir que certos fios cruzem o woof, e isso de acordo com uma sucessão que é determinada pela natureza do desenho a ser reproduzido. Antigamente, esse processo era demorado e difícil, e era necessário que o trabalhador, atendendo ao projeto que ele deveria copiar, deveria ele próprio regular os movimentos que os fios deveriam executar. Daí surgiu o alto preço dessa descrição de animais, especialmente se fios de várias cores entrassem no tecido. Para simplificar essa fabricação, Jacquard concebeu o plano de conectar cada grupo de segmentos que deveriam agir juntos, com uma alavanca distinta pertencendo exclusivamente a esse grupo. Todas essas alavancas terminam em hastes, que são unidas em um feixe, tendo geralmente a forma de um paralelepípedo com uma base retangular. As hastes são cilíndricas e são separadas umas das outras por pequenos intervalos. O processo de elevação das roscas é, portanto, resolvido no de mover esses vários braços de alavanca na ordem necessária. Para isso, é feita uma folha retangular de papelão, um pouco maior em tamanho do que uma seção do feixe de braços de alavanca. Se esta folha for aplicada à base do pacote, e um movimento de avanço for então comunicado ao cartão, este último moverá com ela todas as hastes do pacote, e, consequentemente, os threads que estão conectados a cada um deles. Mas se o papelão, em vez de liso, fosse perfurado com orifícios correspondentes às extremidades das alavancas que o encontram, então, como cada uma das alavancas passaria pelo papelão durante o movimento desta, todas elas permaneceriam em suas lugares. Vemos, portanto, que é fácil determinar a posição dos furos no papelão, que, a qualquer momento, haja um certo número de alavancas e, conseqüentemente, pacotes de fios levantados, enquanto o restante permanece onde eles estavam. Supondo que esse processo seja repetido sucessivamente de acordo com uma lei indicada pelo padrão a ser executado, percebemos que esse padrão pode ser reproduzido no material. Para esse fim, precisamos apenas compor uma série de cartões de acordo com a lei exigida, e organizá-los em ordem adequada, um após o outro; então, fazendo com que passem sobre um feixe poligonal que é conectado de modo a virar uma nova face para cada movimento da lançadeira, essa face será então impelida paralelamente a si mesma contra o feixe de braços de alavanca, a operação de elevar o threads serão executados regularmente. Assim, vemos que os tecidos brocados podem ser fabricados com uma precisão e rapidez anteriormente difíceis de obter.
O tear de Jacquard é uma aplicação muito precoce de um loop no contexto de ordem de uma máquina para produzir uma saída repetida :
A idéia por trás do tear Jacquard era um sistema de cartões perfurados e ganchos. As cartas eram muito grossas e tinham furos retangulares. Os ganchos e agulhas usados na tecelagem foram guiados por esses furos no papelão. Quando os ganchos entraram em contato com o cartão, eles foram mantidos imóveis, a menos que encontrassem um dos orifícios perfurados. Em seguida, o gancho passou pelo orifício com uma agulha inserindo outra linha, formando o padrão desejado. Padrões intricados foram alcançados tendo muitos cartões dispostos um após o outro e / ou usados repetidamente.
O tear de Jacquard também é reconhecido como uma forma muito precoce de um programa armazenado :
Se o ímpeto por trás de grande parte do desenvolvimento das máquinas de calcular discutidas até o momento surgiu da computação numérica, a motivação que levou à forma mais antiga de "programa armazenado" veio de uma fonte muito diferente: a indústria têxtil. Vimos anteriormente que um dos aspectos fundamentais dos sistemas computacionais é o conceito de representação de informações e, embora ainda não o tenhamos explicitado, a aplicação dessa ideia pode ser discernida em todos os artefatos que examinamos até agora: no desenvolvimento de representações escritas para valores numéricos e os paralelos mecânicos que surgiram a partir deles. Assim, o alinhamento de seixos em uma estrutura de ábaco, a justaposição de escalas móveis em uma régua de cálculo e a configuração de engrenagens dentadas nos dispositivos de Schickard, Pascal e Leibniz, são exemplos de técnicas representacionais que buscam simplificar os processos complexos subjacentes às tarefas aritméticas. Existem, no entanto, categorias de informações e representações das mesmas, além do número sobre o qual os processos computacionais podem ser executados. A tecnologia de tecelagem desenvolvida por Joseph-Marie Jacquard em 1801 ilustra um exemplo dessa categoria.
Charles Babbage também adaptou o procedimento de armazenamento de Jacquard no Analytical Engine , a presença ou ausência de um furo comunicava à máquina um simples comando on-off:
O mecanismo analítico possui muitos recursos essenciais encontrados no computador digital moderno. Era programável usando cartões perfurados, uma idéia emprestada do tear Jacquard usada para tecer padrões complexos em têxteis. O mecanismo possuía uma 'loja' onde os números e resultados intermediários poderiam ser mantidos e uma 'fábrica' separada onde o processamento aritmético era realizado. Tinha um repertório interno das quatro funções aritméticas e podia realizar multiplicação e divisão direta. Também era capaz de funções para as quais temos nomes modernos: ramificação condicional, loop (iteração), microprogramação, processamento paralelo, iteração, trava, polling e modelagem de pulso, entre outras, embora Babbage em nenhum lugar usasse esses termos. Ele tinha uma variedade de saídas, incluindo impressão em papel, cartões perfurados,
As ramificações condicionais do Analytical Engine combinadas com os loops mecânicos inspirados em Jacquard e o procedimento de armazenamento são assustadoramente semelhantes (conceitualmente) ao seu exemplo, especialmente se adicionarmos a impressora de Babbage à mistura, para as print "...";
peças.
Obviamente, loops mecânicos são anteriores ao tear de Jacquard, o primeiro dispositivo conhecido a funcionar em loop, sendo o mecanismo Antikythera (100 aC), e se olharmos ainda mais para a história (e nos aventurarmos terrivelmente fora de tópico), os relógios de sol provavelmente serão os mecanismos mais antigos criados pelo homem. onde a compreensão dos loops é evidente, seguindo, é claro, o padrão repetitivo das órbitas do Sol e de outros corpos estelares.
No entanto, acho que, no contexto da computação (e não o cálculo ou qualquer outra coisa), o algoritmo de cálculo dos números do Analytical Engine e do Bernalli de Ada pode ser creditado pela introdução de loops, compartilhando pelo menos parte do crédito com o tear de Jacquard, tendo adaptado diretamente o conceito de isto.