while (1) {
if (1+1==2) {
print "Yes, you paid attention in Preschool!";
} else {
print "Wait... I thought 1+1=2";
}
}
Como desenvolvedor, todos temos que usar loops com muita frequência. Nós sabemos isso. O que eu queria saber era: quem pensou na ideia de ter laços? Que idioma introduziu loops? Qual foi a primeira construção de loop? Foi um while
loop? Um for
laço? etc?
repeat
chamaria outrorepeat
- você nunca terminaria. Acho que talvez as mulheres leiam as instruções de xampu dessa maneira, mas os homens leem como iteração e precisam apenas de alguns minutos para lavar os cabelos.Respostas:
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:
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:
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 :
O tear de Jacquard também é reconhecido como uma forma muito precoce de um programa armazenado :
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:
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.
fonte
Os loops são anteriores à computação. Você pode encontrá-los em notação musical desde o canto gregoriano:
fonte
O conceito de "faça de novo" é de alguma forma "primitivo" para a percepção humana. Você pode contar isso para uma criança que acabou de elaborar uma compreensão mínima da linguagem natural.
Em sistemas discretos, loops são encontrados em todas as máquinas de estados finitos quando você admite que pode alcançar um estado que já havia estado antes .
O loop mais simples é o ciclo entre dois estados (um relógio). Dado que qualquer número mais alto de estados pode resultar de uma contagem, toda máquina mais complexa é controlada por um "contador" incrementado por um relógio que pode "saltar" sobre certas bandeiras que representam certas operações combinatórias. Esse é o núcleo de uma máquina Von Neumann em que todos os computadores baseados em microprocessadores se baseiam.
No código de máquina, um salto é codificado
JP-Z-nnnn
(onde Z é o sinalizador mais baixo em que você baseia sua condição). Em linguagem de nível superior, isso se traduz quase imediatamente emUm loop nada mais é do que a
goto
onde o rótulo x precede a própria instrução goto.Todas as outras formulações (para, faça, enquanto, etc.) são apenas "açúcar sintático" para domesticar melhor o goto selvagem nos casos muito comuns de repetição até que algo aconteça
fonte
O conceito de loop é uma das coisas que diferencia um computador completo de uma simples máquina de calcular. Se um sistema não suporta loop, ele não está completo e, portanto, não é um computador.
O primeiro projeto completo de Turing foi o Analytical Engine de Babbage , por isso deve ter um conceito de loop. No entanto, existem sistemas com loop, mas o Turing não é completo (porque omitem outra coisa). O trabalho de Babbage provavelmente é um bom ponto de partida.
fonte
Supondo que você queira dizer linguagens de programação de computador de texto modernas.
O Algol60 possui "FOR", "DO", "ATÉ" e "WHILE", assim como antes de 1960.
O Museu da Computação Retro tem algumas línguas antes de 1960.
Kvikkalkul , o idioma dos anos 50 para a programação de submarinos nucleares suecos, possui apenas GOTO. (No entanto, Kvikkalkul é quase certamente uma farsa dos anos 90, não uma linguagem histórica real.)
O Plankalkül de Konrad Zuse é o mais antigo que pude encontrar. Ele tem uma construção "für".
fonte
DO
loops.O trabalho de Liebniz e Newton contém algoritmos com construções de loop. Liebniz construiu uma calculadora mecânica e especulou (como Lovelace fez anos depois) sobre uma máquina para realizar análises mais sofisticadas. Suas anotações sobre essas idéias são incompletas, mas descrevem a lógica estruturada com loops.
No entanto, a idéia de sequências de repetição e contagem de loops controlados, bem como o que chamaríamos de loops são discutidos no trabalho do homem para quem os algoritmos são nomeados: Muhammad ibn Musa al-Khwarizmi, do século IX. Seu segundo livro, al-Kitab al-mukhtasar fi hisab al-jabr wa'l-muqabala, era conhecido por Newton, Liebniz, Babbage, Lovelace, entre outros. .
É claro que al-Khwarizmi confiava, em parte, nos antigos gregos. Em algum momento, provavelmente voltaremos à versão de Adão e Eva de enxaguar, ensaboar, repetir.
Para mais informações sobre Al-Khwārizmī e seu trabalho, consulte:
http://www-groups.dcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html
fonte