Хто створив ідеї (-и) перших контурних конструкцій?


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

Як розробник, всім нам доводиться дуже часто використовувати петлі . Ми це знаємо. Мені було цікаво, хто думав про ідею мати петлі? Якою мовою введені петлі? Яка перша конструкція циклу? Це була whileпетля? forЦикл? тощо?


22
Чарльз Беббідж та Ада Ловелас, швидше за все.
mcfinnigan

28
Її вигадали в інструкції щодо шампуню, прополоскати, натерти, повторити. :-)
Гай Сіртон

13
@GuySirton, не будь дурним, це рекурсія.
mowwwalker

18
@ user838584 - якби це була рекурсія, кожен викликав repeatби іншу repeat- ви ніколи не закінчите. Я думаю, можливо, жінки читають інструкції з шампунем таким чином, але чоловіки читають це як ітерацію, і для миття волосся потрібно лише кілька хвилин.
Стів314

3
Комп'ютер без циклів - це калькулятор.
starblue

Відповіді:


102

Як зазначили Мувічієль та Еміліо Гаравалья , концепція передує обчислювальній техніці. Однак першим екземпляром програмного циклу стала петля Ада Лавлейса, яка використовується для обчислення чисел Бернуллі , як описано в примітці G її перекладу Ескіз аналітичного двигуна, винайденого Чарльзом Беббіджем , Л. Ф. Менабреа . Здатність Аналітичного двигуна до циклу відзначається Менабреєю рано:

Зрозумівши це, давайте на початку серії операцій, які ми бажаємо виконати, помістимо голку C на відділ 2, голку B на відділ 5 і голку A на відділ 9. Дозвольмо молоток циферблата C для удару; вона вдариться двічі, і в той же час голка В пройде через два відділи. В останньому тоді буде вказано число 7, яке введено число 5 у стовпчик перших відмінностей. Якщо ми дозволимо удару молотка циферблата B по черзі, він вдарить сім разів, під час якого голка А просуне сім відділів; ці додані до дев'яти вже позначених нею дадуть число 16, що є квадратним числом, послідовним 9. Якщо ми зараз розпочнемо ці операції, починаючи з голки C, яку завжди потрібно залишити на діленні 2,

Циклічний механізм аналітичного двигуна безпосередньо успадкований від механічного ткацького верстата Джозефа Марі Жаккарда (1801 р.), Як зазначається в мемуарі Менабрії:

Тепер буде запитано, як машина може сама по собі і, не звертаючись до руки людини, припустити наступні диспозиції, придатні до операцій. Вирішення цієї проблеми було взято з апарату Жаккарда, який використовується для виготовлення брокадованих матеріалів, таким чином:

У тканих виробах зазвичай розрізняють два види ниток; одна - це основна або поздовжня нитка, інша - ватяна або поперечна нитка, яка передається інструментом, що називається човником, і яка перетинає поздовжню нитку або основу. Коли потрібні брокатні речі, необхідно, в свою чергу, не допускати перетину певних ниток, і це відповідно до послідовності, яка визначається характером конструкції, яка має бути відтворена. Раніше цей процес був тривалим і складним, і потрібно було, щоб робітник, відвідавши проект, який він повинен був скопіювати, повинен сам регулювати рухи, які повинні робити нитки. Звідси виникла висока ціна цього опису продуктів, особливо якщо нитки різних кольорів увійшли до тканини. Щоб спростити це виробництво, Жаккард розробив план з'єднання кожної групи ниток, які повинні діяти разом, з чітким важелем, що належить виключно до цієї групи. Усі ці важелі закінчуються стержнями, які об'єднані в один пучок, мають зазвичай форму паралелопіпеда з прямокутною основою. Стрижні циліндричні, і відокремлені один від одного невеликими інтервалами. Таким чином, процес підняття ниток вирішується на процес переміщення цих різних важелів у потрібному порядку. Для цього береться прямокутний лист картону, дещо більший за розміром, ніж переріз пучка важелів. Якщо цей лист нанести на основу пучка, а потім подати рух, що рухається, на картон, цей останній переміститься разом з ним усіми стрижнями пучка, і, отже, нитки, які пов'язані з кожною з них. Але якби картон, замість того, щоб бути простим, пробивали отворами, відповідні кінцівкам важелів, які його зустрічають, то, оскільки кожен із важелів під час руху останнього пройде через картон, всі вони залишаться в своїх місця. Таким чином, ми бачимо, що так легко визначити положення отворів у картоні, щоб у будь-який момент піднялася певна кількість важелів і, отже, посилки з ниток, а решта залишалася там, де вони були. Припустимо, що цей процес послідовно повторюється відповідно до закону, визначеного шаблоном, який слід виконати, ми вважаємо, що ця модель може бути відтворена на матеріалах. Для цього нам потрібно просто скласти серію карток відповідно до необхідного закону, і розташувати їх у відповідному порядку один за одним; потім, примушуючи їх проходити через багатокутний промінь, який так з’єднаний, щоб перетворити нове обличчя для кожного ходу човника, яке обличчя потім має бути приведене паралельно до себе до пучка важелів, операція підняття нитки будуть регулярно виконуватись. Таким чином, ми бачимо, що броковані тканини можуть виготовлятися з точністю та швидкістю, яку раніше було важко отримати.

Ткацький верстат Жаккарда - це дуже раннє застосування циклу в контексті замовлення машини для отримання повторного виходу :

Ідеєю жакардового ткацького верстата була система перфокарт та гачків. Картки були зроблені дуже товстими і мали в них пробиті прямокутні отвори. Цими отворами у картоні керувались гачки та голки, що використовувались у ткацтві. Коли гачки контактували з карткою, вони трималися нерухомими, якщо на них не траплявся один із пробитих отворів. Потім гачок зміг пройти через отвір голкою, вставивши ще одну нитку, формуючи таким чином потрібний візерунок. Складні структури були досягнуті, якщо багато карт розташовувались одна за одною та / або використовувались повторно.

Жаккардовий ткацький верстат також визнаний дуже ранньою формою збереженої програми :

Якщо поштовх, що стоїть за великою частиною розроблених досі обчислювальних машин, виникав із чисельних обчислень, мотивація, що призвела до найдавнішої форми "збереженої програми", повинна надходити з зовсім іншого джерела: текстильної промисловості. Раніше ми бачили, що одним із фундаментальних аспектів обчислювальних систем є концепція представлення інформації, і, хоча ми цього не зробили прямо, чітко, застосування цієї ідеї можна виявити у всіх артефактах, які ми досліджували до цього часу: у розробці письмових уявлень про числові значення та механічні паралелі, що випливали з них. Таким чином, вирівнювання камінчиків на рамці абакуса, суміщення рухомих ваг на слайді-правилі та конфігурація зубчастих передач на пристроях Шикарда, Паскаля та Лейбніца, - це всі приклади зображувальних прийомів, які прагнуть спростити складні процеси, що лежать в основі арифметичних завдань. Однак існують категорії інформації та їх уявлення, крім кількості, за якою можна виконувати обчислювальні процеси. Технологія ткацтва, розроблена Джозефом-Марі Жакардом у 1801 році, ілюструє один приклад такої категорії.

Чарльз Беббідж також адаптував процедуру зберігання Жаккарда в аналітичному двигуні , наявність або відсутність отвору передала машині просту команду відключення:

Аналітичний двигун має безліч суттєвих особливостей, які можна знайти в сучасному цифровому комп'ютері. Це було програмовано за допомогою перфокарт, ідея, запозичена із жакардового ткацького верстата, що використовується для плетіння складних візерунків з текстилю. Двигун мав "Магазин", де можна було б проводити номери та проміжні результати, і окремий "Млин", де проводилася обробка арифметики. Він мав внутрішній репертуар із чотирьох арифметичних функцій і міг виконувати пряме множення та ділення. Він також міг виконувати функції, для яких у нас є сучасні назви: умовне розгалуження, циклічне повторення (ітерація), мікропрограмування, паралельна обробка, ітерація, фіксація, опитування та формування імпульсу, серед інших, хоча Беббідж ніколи не використовував ці терміни. Він мав найрізноманітніші виходи, включаючи друк на паперовій копії, перфокарти,

Умовні гілки Analytical Engine у ​​поєднанні з механічними шлейфами, натхненими жаккардом і процедурою зберігання, є неприємно схожими (концептуально) на ваш приклад, особливо якщо ми додаємо принтер Babbage до суміші, для print "...";деталей.

Очевидно, механічні петлі передували ткацькому верстату Жаккарда, першим відомим пристроєм, який працював у петельному режимі, був механізм Антікітера (100 р. До н.е.), і якщо ми ще більше заглянемо в історію (і ризикуємо жахливо від теми), сонячні годинники , мабуть, є найстаршими механізмами, створеними людиною там, де зрозуміле розуміння петель, слідуючи, звичайно, за повторюваною схемою орбіт сонця та інших зоряних тіл.

Однак я думаю, що в контексті обчислень (а не обчислення чи чогось іншого) алгоритм обчислення чисел Бернуллі в аналітичному двигуні та Ада може бути зарахований за введення циклів, поділивши принаймні частину кредитів із ткацьким верстатом Жакарда, безпосередньо адаптувавши концепцію з це.


3
Перед ткацьким верстатом Жаккарда ви можете знайти механічні петлі в карильонах, як, наприклад, у Брюгге, де дзвони управляються обертанням циліндра .
mouviciel

6
@mouviciel Я бачу мою чудовисько і я піднімаю тобі механізм Антикітера. ; П
янніс

2
+1 для вашої енциклопедичної відповіді, включаючи комп’ютер 2000 років!
mouviciel

2
ця прекрасна відповідь зробила мені улюблене питання. Він не тільки відповідає на питання, але й є прикладом "як відповісти на запитання". Гарна робота, шановний пане.
Чані

Прийняв цю відповідь, тому що вона була одночасно переконливою, енциклопедичною та просто простою!
Динамічний

50

Петлі передують обчисленням. Ви можете знайти їх у музичній нотації ще під час григоріанського співу:

повторити знак


2
Це може бути чудовою відповіддю, якщо до нього було додано трохи більше деталей. Все-таки чудова робота.
Динамічний

Будь ласка, дайте більше посилань (найдавніша дата, найдавніша музична нотація, що стосується циклів / повторень)
Skippy Fastol

@SkippyFastol У цій статті: en.wikipedia.org/wiki/Repeat_sign#Other_notation
cwallenpoole

32

Поняття "зроби це знову" є якось "примітивним" для людського сприйняття. Ви можете сказати це дитині, яка щойно розробила мінімальне розуміння природної мови.

У дискретних системах петлі знаходяться у всіх машинах з кінцевим станом, коли ви визнаєте, що можете досягти стану, у якому ви були раніше .

Найпростіший цикл - це цикл між двома станами (годинник). Зважаючи на те, що будь-яка більша кількість станів може бути результатом підрахунку від нього, кожна більш складна машина будується на «лічильнику», посиленому годинником, який може «перестрибувати» на певні прапори, що представляють певні комбінаційні операції. Це ядро ​​машини Von Neumann, на якій базується кожен мікропроцесорний комп'ютер.

У машинному коді стрибком кодується стрибок JP-Z-nnnn(де Z - прапор whatefer ypu, що базується на вашому стані). У мові вищого рівня це перекладається майже відразу

if(z) goto x;

Цикл - це не що інше, як gotoмітка x передує самій інструкції goto.

Будь-яка інша формулювання (для, зробити, в той час, і т.д.) є просто «синтаксичний цукор» , щоб краще приручити з диким Гото в дуже загальних випадках повторювати до тих пір , поки що - то відбувається


4

Концепція циклічного циклу - одна з речей, що відрізняють повноцінний комп'ютер від простої обчислювальної машини. Якщо система не підтримує циклічне завершення, вона не є повною, а отже, не є комп'ютером.

Перший дизайн Тьюрінга був аналітичним двигуном Беббіджа , тому він, мабуть, мав концепцію петління. Однак є системи, які мають циклічний цикл, але не є Тьюрінгом повним (оскільки вони опускають щось інше). Хоча робота Беббіджа - це, мабуть, хороша відправна точка.


6
В лямбдальному обчисленні немає петель (і немає умов, ні стрибків), але воно є повним. Рекурсія така ж потужна, як ітерація.

3
ви можете переписати будь-яку петлю на рекурсивну функцію та усунути цикли
храповик виродка

5
Стаття Вікіпедії про петлі описує рекурсію як спосіб вираження циклу, а не цілком неспоріднене поняття. en.wikipedia.org/wiki/Program_loop#Loops Що стосується процесорів, які не мають циклів, у них є інструменти, необхідні для їх реалізації (перехід на адресу довільної пам'яті)
GordonM

8
Точно для висловлення петель можна використовувати рекурсію . Це є абсолютно інша концепція, незважаючи на те, що вони ізоморфні один одному. Чашка кави - це не пончик лише тому, що топологи нібито їх плутають.

4
Щоправда, але будь-яка система, яка має повну схему, повинна мати спосіб вираження концепції виконання однієї і тієї ж послідовності кілька разів, механізм може бути рекурсією або стрибком назад у списку інструкцій чи будь-що інше, що досягає того ж ефекту. Якщо система не передбачає жодного способу повторення набору інструкцій (крім фізичного повторення інструкцій у списку), це не може бути завершеним Turing. Аналітичний двигун був Тьюрінгом завершеним, тому він повинен здійснювати циклічне в тій чи іншій формі.
GordonM

3

Припускаючи, що ви маєте на увазі сучасні текстові мови комп'ютерного програмування.

У Algol60 є "ЗА", "ДО", "ДО ВСІХ" і "ВІД", так було до 1960 року.

До 1960 року музей ретро обчислювальної техніки має кілька мов.

Квіккалкуль , мова з програмування шведських ядерних підводів 50-х років має лише GOTO. (Однак Квіккалкул - це майже напевно підступ з 90-х, не справжня історична мова.)

Plankalkül від Конрада Зузе - це найдавніше, що я міг знайти. Він має конструкцію "für".


Планкалкюл був фактично не опублікований до недавнього часу, і Квіккалкуль вже давно, як кажуть, є прихисткою. У цьому світлі, мабуть, заслуга повинна йти до Джона Бекуса та команди FORTRAN , які працювали у цьому компіляторі у 1957 році з DOпетлями.
Росс Паттерсон

2

Робота Лібніза та Ньютона містить алгоритми з контурними конструкціями. Лібніц побудував механічний калькулятор і розмірковував (як це робив Ловелас через роки пізніше) про машину для виконання більш складного аналізу. Його замітки до цих ідей є схематичними, але вони описують стилізовану логіку з петлями.

Однак ідеї послідовностей повторень і підрахунку керованих циклів, а також того, що ми би назвали під час циклів , обговорюються в роботі людини, для якої названі алгоритми: Мухаммед ібн Муса аль-Хварізмі з дев'ятого століття. Друга його книга "Аль-Кітаб аль-Мухтасар фі-гісаб аль-Джабр ва'л-мукабала (الكتاب المختصر في حساب الجبر والمقابلة") - відомий Ньютону, Лібніц, Любнізу, Баббіджу, Баббіджу, Любнізу, Баббіджу. .

Звичайно, Аль-Хварізмі частково спирався на древніх греків. В якийсь момент ми, мабуть, повернемося до версії полоскання Адама та Єви, прополоскати, повторити.

Більше про Аль-Хварізмі та його роботи дивіться:

http://www-groups.dcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.