Введение

Программа Darwin, созданная в августе 1961 года Виктором А. Виссоцким, Робертом Моррисом-старшим и М. Дугласом Макилроем, была игровой программой. (Денниса Ричи иногда ошибочно называют соавтором, но он не принимал участия в её разработке.) Игра была разработана в лаборатории Белл и запускалась на мейнфрейме IBM 7090. Игра продолжалась всего несколько недель, пока Моррис не создал "бескомпромиссную" программу, которая положила ей конец, поскольку никому не удалось разработать программу, способную её победить.

Описание

Игра состояла из программы, называемой "судьей", и выделенной области памяти компьютера, известной как "арена", в которую загружались две или более небольших программ, написанных игроками. Программы были написаны на машинном коде 7090 и могли вызывать ряд функций, предоставляемых судьей, для зондирования других областей в арене, уничтожения программ противников и захвата свободной памяти для своих копий. Игра завершалась по истечении заданного времени или когда оставались только копии одной программы. Игрок, написавший последнюю выжившую программу, объявлялся победителем. В каждой программе до 20 ячеек памяти (меньше в более поздних версиях игры) могли быть обозначены как защищенные. Если одна из этих защищенных ячеек подвергалась зондированию другой программой, судья немедленно передавал управление программе, которая подверглась зондированию. Эта программа продолжала выполняться, пока, в свою очередь, не обнаруживала защищенную ячейку другой программы, и так далее. Программы отвечали за копирование и перемещение самих себя, но им было запрещено изменять ячейки памяти за пределами своей области без разрешения судьи. Поскольку программы выполнялись непосредственно компьютером, не существовало физического механизма для предотвращения жульничества. Вместо этого исходный код программ становился доступным для изучения после каждой игры, позволяя игрокам учиться друг у друга и проверять, не чистили ли их противники. Самая маленькая программа, способная к воспроизводству, поиску врагов и их уничтожению, состояла примерно из 30 инструкций. Макилрой разработал программу из 15 инструкций, которая могла находить и уничтожать врагов, но не воспроизводиться; хотя она и не была очень эффективной в уничтожении, она была практически неуязвима, поскольку была короче лимита в 20 защищенных инструкций. В более поздних играх этот лимит на защищенные инструкции был снижен из-за этого. "В конечном итоге смертельная" программа, разработанная Моррисом, содержала 44 инструкции и использовала адаптивную стратегию. Как только ей удавалось успешно определить начало вражеской программы, она зондировала небольшое расстояние вперед от этой точки. Если ей удавалось уничтожить врага, она запоминала это расстояние и использовала его при последующих столкновениях. Если же она попадала в защищенную ячейку, она выбирала другое расстояние в момент получения управления обратно. Любые новые копии инициализировались с успешным значением. Таким образом, программа Морриса эволюционировала в несколько подвидов, каждый из которых был специально адаптирован для уничтожения конкретного врага.