Quem criou a (s) ideia (s) das primeiras construções de laço?

while (1) {
      if (1+1==2) {
             print "Yes, you paid attention in Preschool!";
      } else {
             print "Wait... I thought 1+1=2";

Como desenvolvedor, todos precisam usar loops muito com freqüência. Nós sabemos isso. O que eu queria saber era quem pensava na ideia de ter loops? Que idioma introduziu loops? Qual foi a primeira construção de loop? Foi um loop while ? Um loop for ? etc?

por Dynamic 21.05.2012 / 12:56

6 respostas


Como mouviciel e Emilio Garavaglia observou, o conceito antecede a computação. No entanto, a primeira instância de um loop software foi o loop Ada Lovelace usado para calcular números Bernoulli , conforme descrito em Nota G de sua tradução do Esboço do Mecanismo Analítico Inventado por Charles Babbage , por L. F. Menabrea . A capacidade de loop do Analytical Engine é anotada no início por Menabrea:

This being understood, let us, at the beginning of the series of operations we wish to execute, place the needle C on the division 2, the needle B on the division 5, and the needle A on the division 9. Let us allow the hammer of the dial C to strike; it will strike twice, and at the same time the needle B will pass over two divisions. The latter will then indicate the number 7, which succeeds the number 5 in the column of first differences. If we now permit the hammer of the dial B to strike in its turn, it will strike seven times, during which the needle A will advance seven divisions; these added to the nine already marked by it will give the number 16, which is the square number consecutive to 9. If we now recommence these operations, beginning with the needle C, which is always to be left on the division 2, we shall perceive that by repeating them indefinitely, we may successively reproduce the series of whole square numbers by means of a very simple mechanism.

O mecanismo de loop do mecanismo analítico é diretamente herdado de Joseph Marie Jacquard tear mecânico (1801), conforme observado no livro de memórias de Menabrea:

It will now be inquired how the machine can of itself, and without having recourse to the hand of man, assume the successive dispositions suited to the operations. The solution of this problem has been taken from Jacquard's apparatus, used for the manufacture of brocaded stuffs, in the following manner:—

Two species of threads are usually distinguished in woven stuffs; one is the warp or longitudinal thread, the other the woof or transverse thread, which is conveyed by the instrument called the shuttle, and which crosses the longitudinal thread or warp. When a brocaded stuff is required, it is necessary in turn to prevent certain threads from crossing the woof, and this according to a succession which is determined by the nature of the design that is to be reproduced. Formerly this process was lengthy and difficult, and it was requisite that the workman, by attending to the design which he was to copy, should himself regulate the movements the threads were to take. Thence arose the high price of this description of stuffs, especially if threads of various colours entered into the fabric. To simplify this manufacture, Jacquard devised the plan of connecting each group of threads that were to act together, with a distinct lever belonging exclusively to that group. All these levers terminate in rods, which are united together in one bundle, having usually the form of a parallelopiped with a rectangular base. The rods are cylindrical, and are separated from each other by small intervals. The process of raising the threads is thus resolved into that of moving these various lever-arms in the requisite order. To effect this, a rectangular sheet of pasteboard is taken, somewhat larger in size than a section of the bundle of lever-arms. If this sheet be applied to the base of the bundle, and an advancing motion be then communicated to the pasteboard, this latter will move with it all the rods of the bundle, and consequently the threads that are connected with each of them. But if the pasteboard, instead of being plain, were pierced with holes corresponding to the extremities of the levers which meet it, then, since each of the levers would pass through the pasteboard during the motion of the latter, they would all remain in their places. We thus see that it is easy so to determine the position of the holes in the pasteboard, that, at any given moment, there shall be a certain number of levers, and consequently of parcels of threads, raised, while the rest remain where they were. Supposing this process is successively repeated according to a law indicated by the pattern to be executed, we perceive that this pattern may be reproduced on the stuff. For this purpose we need merely compose a series of cards according to the law required, and arrange them in suitable order one after the other; then, by causing them to pass over a polygonal beam which is so connected as to turn a new face for every stroke of the shuttle, which face shall then be impelled parallelly to itself against the bundle of lever-arms, the operation of raising the threads will be regularly performed. Thus we see that brocaded tissues may be manufactured with a precision and rapidity formerly difficult to obtain.

O tear de Jacquard é uma aplicação muito antiga de um loop no contexto de encomenda de uma máquina para produzir um resultado repetido :

The idea behind the Jacquard-loom was a system of punch cards and hooks. The cards were made very thick and had rectangular holes punched in them. The hooks and needles used in weaving were guided by these holes in the cardboard. When the hooks came into contact with the card they were held stationary unless it encountered one of the punched holes. Then the hook was able to pass through the hole with a needle inserting another thread, thus forming the desired pattern. Intricate patterns were achieved by having many cards arranged one after the other and/or used repeatedly.

O tear de Jacquard também é reconhecido como uma forma inicial de um programa armazenado armazenado :

If the impetus behind much of the development of calculating machines discussed so far had arisen from numerical computation, the motivation that led to the earliest form of 'stored program' was to come from a very different source: the textile industry. We have seen earlier that one of the fundamental aspects of computational systems is the concept of representing information and, although we have not done so explicitly, the application of this idea can be discerned in all of the artefacts that we have examined up to now: in the development of written representations for numeric values and the mechanical parallels that sprung from these. Thus, the alignment of pebbles on an abacus frame, the juxtaposition of moving scales on a slide-rule, and the configuration of cogged gears on the devices of Schickard, Pascal and Leibniz, are all examples of representational techniques that seek to simplify the complex processes underlying arithmetic tasks. There are, however, categories of information, and representations thereof, other than number upon which computational processes can be performed. The weaving technology developed by Joseph-Marie Jacquard in 1801 illustrates one example of such a category.

Charles Babbage também adaptou o procedimento de armazenamento de Jacquard para o Motor Analítico , a presença ou ausência de um buraco comunicou um comando on-off simples para a máquina:

The Analytical Engine has many essential features found in the modern digital computer. It was programmable using punched cards, an idea borrowed from the Jacquard loom used for weaving complex patterns in textiles. The Engine had a 'Store' where numbers and intermediate results could be held, and a separate 'Mill' where the arithmetic processing was performed. It had an internal repertoire of the four arithmetical functions and could perform direct multiplication and division. It was also capable of functions for which we have modern names: conditional branching, looping (iteration), microprogramming, parallel processing, iteration, latching, polling, and pulse-shaping, amongst others, though Babbage nowhere used these terms. It had a variety of outputs including hardcopy printout, punched cards, graph plotting and the automatic production of stereotypes - trays of soft material into which results were impressed that could be used as molds for making printing plates.

Os ramos condicionais da Máquina Analítica combinados com os laços mecânicos inspirados em Jacquard e o procedimento de armazenamento são assustadoramente similares (conceitualmente) ao seu exemplo, especialmente se adicionarmos Babbage's printer para a mixagem, para as print "..."; parts.

Obviamente, os loops mecânicos são anteriores ao tear de Jacquard, o primeiro dispositivo conhecido a funcionar de uma forma loop loop sendo o mecanismo Antikythera (100 aC), e se olharmos ainda mais para a história (e nos aventurarmos horrivelmente fora do tópico) , relógios de sol são provavelmente os mais antigos mecanismos criados pelo homem, nos quais é evidente uma compreensão dos laços, seguindo, é claro, o padrão repetitivo dos raios solares. e outras órbitas de corpos estelares.

No entanto, acho que no contexto da computação (e não cálculo ou qualquer outra coisa), o algoritmo analítico de números analíticos de Adou e Bernoulli pode ser creditado por introduzir loops, compartilhando pelo menos parte do crédito com o tear de Jacquard, tendo diretamente adaptado o conceito dele.

por 21.05.2012 / 14:17

Loops são anteriores à computação. Você pode encontrá-los em notação musical desde o canto gregoriano:

por 21.05.2012 / 13:12

O conceito de "fazer de novo" é de alguma forma "primitivo" para a percepção humana. Você pode dizer isso a 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 em que já esteve antes .

O loop mais simples é o ciclo entre dois estados (um relógio). Dado que qualquer número maior de estados pode resultar de uma contagem a partir dele, cada máquina mais complexa é construída sobre um "contador" incrementado por um relógio que pode fazer "saltar" sobre certas bandeiras representando certas operações combinatórias. Este é o núcleo de uma máquina Von Neumann em que cada computador baseado em microprocessador é baseado.

No código da máquina, um salto é codificado em JP-Z-nnnn (onde Z é a base da sua condição). Em linguagem de alto nível isto traduz-se quase imediatamente em

if(z) goto x;

Um loop não é nada mais do que um goto onde o rótulo x precede a própria instrução goto.

Qualquer outra formulação (para, do, enquanto, etc.) é apenas "açúcar sintático" para melhor domesticar o selvagem goto nos casos muito comuns de > repetindo até que algo aconteça

por 21.05.2012 / 13:37

O conceito de looping é uma das coisas que distinguem um computador completo de uma simples máquina de calcular. Se um sistema não suporta looping, então não é turing-complete e, portanto, não é um computador.

O primeiro design completo de Turing foi o Motor Analítico de Babbage, então ele deve ter tido um conceito de looping. No entanto, existem sistemas que possuem looping, mas não são Turing completos (porque omitem outra coisa). O trabalho de Babbage é provavelmente um bom ponto de partida.

por 21.05.2012 / 13:43

Assumindo que você quer dizer linguagens modernas de programação em computadores.

Algol60 tem "FOR", "DO", "UNTIL" e "WHILE", por isso foi antes de 1960 .

O Retro Computing Museum tem poucas línguas antes de 1960.

Kvikkalkul , a linguagem dos anos 50 para programar os subsetores nucleares suecos tem apenas o GOTO. (No entanto, Kvikkalkul é quase certamente uma farsa dos anos 90, não uma linguagem histórica real.)

Plankalkül de Konrad Zuse é o mais antigo que pude encontrar. Tem uma construção "für".

por 24.05.2012 / 20:30

O trabalho de Liebniz e Newton contém algoritmos com construções em 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 ideias são incompletas, mas descrevem a lógica estruturada com loops.

No entanto, a idéia de seqüências de repetição e contagem de loops controlados, bem como o que chamaríamos de são discutidos no trabalho do homem para quem os algoritmos são nomeados: Muhammad ibn Musa al-Khwarizmi do nono século. Seu segundo livro, um conjunto sobre cálculos por conclusão e balanceamento, era conhecido por Newton, Liebniz, Babbage, Lovelace, etc. .

É claro que al-Khwarizmi dependia, em parte, dos antigos gregos. Em algum momento nós provavelmente voltaremos para a versão de Adão e Eva de enxágüe, espuma, repita.

Para mais sobre Al-Khwārizmī e seu trabalho, veja:


por 22.08.2013 / 22:06