Бой в памяти: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м robot Modifying: fi:Core War
м clean up, replaced: 1-ое → 1-е (2)
 
(не показаны 53 промежуточные версии 39 участников)
Строка 1: Строка 1:
{{Карточка программы
'''Бой в памяти''' ({{lang-en|Core War}}) — разновидность компьютерной игры «[[Дарвин (компьютерная игра)|Дарвин]]» разработанная [[Дьюдни, Александр|А. К. Дьюдни]]. Помогал разрабатывать игру Дэвид Джонс (David Jones), студент кафедры информатики университета Западного Онтарио, где преподавал Дьюдни. Статьи, посвящённые игре, публиковались в журнале [[Scientific American]] в [[1984]]—[[1987]], в колонке Computer Recreations (Занимательный компьютер). Игра вызвала значительный интерес у читателей, и впоследствии было основано международное общество International Core War Society со штаб-квартирой в [[США]] и отделениями во многих странах мира, включая [[СССР]]. Также было разаработано несколько стандартов, описывающих правила игры. Разработкой «Боя в памяти» Дьюдни побудила история о двух противоборствующих программах [[Creeper|CREEPER и REAPER]] (см. [[компьютерный вирус]]). Обстоятельства разработки CREEPER/REAPER дошли до Дьюдни в несколько искажённом виде, так по словам Р. Томлинсона, ни заражения [[ARPANET|ARPANet]], ни «поединка» между двумя программами в действительности не было.
| name = Core War
| logo =
| screenshot = Core War PMars Screenshot.png
| caption = Игра «Core War» под управлением симулятора pMARS
| collapsible =
| author = [[Джонс, Дэвид Гордон|Д. Г. Джонс]] и [[Дьюдни, Александр|А. К. Дьюдни]]
| developer =
| released = 1984
| latest_release_version =
| latest_release_date =
| latest_preview_version =
| latest_preview_date =
| programming_language =
| operating_system =
| platform =
| size =
| language =
| status =
| genre = [[Игра для программистов]]
| license =
| website =
}}
'''Бой в памяти''' ({{lang-en|Core War}}) — разновидность компьютерной игры «[[Дарвин (игра)|Дарвин]]», разработанная [[Дьюдни, Александр|Александром К. Дьюдни]]. Помогал разрабатывать игру [[Джонс, Дэвид Гордон|Дэвид Джонс]], студент кафедры информатики [[Университет Западной Онтарио|университета Западной Онтарио]], где преподавал Дьюдни.


В данной игре игроки разрабатывают компьютерные программы на специальном языке программирования, похожем на [[Язык ассемблера|ассемблер]] — Redcode. Программы размещаются в циклически замкнутом участке памяти (core), состоящей из 8000 ячеек и зацикленной в кольцо. Каждая команда занимает одну ячейку. Redcode-программы работают под управлением MARS ({{lang-en|Memory Array Redcode Simulator}} — Симулятор Массива Памяти Redcode). Программы загружаются по случайным адресам в памяти.
В данной игре игроки разрабатывают компьютерные программы на специальном языке программирования, похожем на [[Язык ассемблера|ассемблер]] [[Redcode]]. Программы размещаются в циклически замкнутом участке памяти (core), состоящей из 8000 ячеек и зацикленной в кольцо. Каждая команда занимает одну ячейку. Redcode-программы работают под управлением MARS ({{lang-en|Memory Array Redcode Simulator}} — Симулятор Массива Памяти Redcode). Программы загружаются по случайным адресам в памяти.


Каждая программа может иметь несколько активных [[поток (программирование)|потоков]], причём поток может порождать другие потоки с помощи инструкции <code>SPL</code>. Потоки, принадлежащие одной программе, выполняются по очереди, поэтому скорость их выполнения обратно пропорциональна количеству потоков. Поток завершается, если пытается выполнить некорректную инструкцию. Программа, все потоки которой завершились, считается проигравшей.
Каждая программа (начиная со стандарта ICWS'1988) может иметь несколько активных [[поток выполнения|потоков]], причём поток может порождать другие потоки с помощью инструкции <code>SPL</code>. Потоки, принадлежащие одной программе, выполняются по очереди, поэтому скорость их выполнения обратно пропорциональна количеству потоков. Поток завершается, если пытается выполнить некорректную инструкцию. Программа, все потоки которой завершились, считается проигравшей.

Статьи, посвящённые игре, публиковались в журнале [[Scientific American]] в [[1984]]—[[1987]], в колонке Computer Recreations (Занимательный компьютер). Игра вызвала значительный интерес у читателей, и впоследствии было основано международное общество International Core War Society (ICWS) со штаб-квартирой в [[США]] и отделениями во многих странах мира, включая [[СССР]].

ICWS проводила ежегодные международные турниры, начиная с 1986 года. Соревнования проводились по круговой системе. Первые два турнира были по сути чемпионатами Северной Америки. Турнир же 1988 года, проводившийся по новому стандарту игры ICWS'88, привлёк многочисленных участников из разных стран и стал де-факто первым чемпионатом мира. Победителями стали Евгений Лилитко (СССР) – 1-е место, Luca Crosara (Италия) – 2-е место и третьим стал Douglas McDaniels (США)<ref name=afil>{{cite web|url=https://corewar.co.uk/icwt1988.htm|title=The Third ICWS Tournament|accessdate=2019-11-12|archive-date=2019-11-12|archive-url=https://web.archive.org/web/20191112144325/https://corewar.co.uk/icwt1988.htm|deadlink=no}}</ref>. Ещё один советский участник – Александр Бурцев занял пятое место. В настоящее время соревнования проводятся в основном по системе "King of the hill".

Разработать «Бой в памяти» Дьюдни побудила история о двух противоборствующих программах [[Creeper|CREEPER и REAPER]] (см. [[компьютерный вирус]]). Обстоятельства разработки CREEPER/REAPER дошли до Дьюдни в несколько искажённом виде, так, по словам Р. Томлинсона, ни заражения [[ARPANET|ARPANet]], ни «поединка» между двумя программами в действительности не было.


== Redcode ==
== Redcode ==
{{основная статья|Redcode}}


Тут представлен стандарт ICWS'94 (последний). Все инструкции имеют 2 аргумента A и B, хотя не все используют их оба. В аргументах хранятся значения и совершаются операции адресации (инкремент/декремент). Предполагается, что A — источник, B — назначение.
Ниже приведены команды языка Redcode в том виде, в котором они были опубликованы в статье А. Дьюдни:


Инструкции (<Инструкция> <Используемые аргументы> — <Описание>):
Инструкция

Аргументы
DAT - Останавливает выполнение потока.
Код
MOV A B - Скопировать источник по адресу в назначение по адресу.
Описание
ADD A B - Прибавить источник к назначению.
MOV A B 1 - переслать содержимое ячейки с адресом A в ячейку с адресом B
SUB A B - Вычесть источник к назначению.
ADD A B 2 - прибавить содержимое ячейки с адресом A к ячейке с адресом B
MUL A B - Умножить назначение на источник.
SUB A B 3 - вычесть содержимое ячейки с адресом A из ячейке с адресом B
DIV A B - Разделить назначение на источник. (При B=0 останавливает выполнение потока).
JMP A 4 - передать управление на адрес A
MOD A B - Получить остаток от деления A на B. (При B=0 останавливает выполнение потока).
JMZ A B 5 - передать управление на адрес A, если содержимое ячейки
JMP A - Переместиться по адресу.
с адресом B равно нулю
JMZ A B - Если B=0, перейти по адресу A.
JMG A B 6 - передать управление на адрес A, если содержимое ячейки
JMN A B - Если B не равно 0, перейти по адресу A.
с адресом B больше нуля
DJN A B - Вычесть из B единицу, и если B не равно 0, то перейти по адресу A.
DJZ A B 7 - вычесть единицу из содержимого ячейки с адресом B и передать
SPL A - Создать новый поток по адресу A (начнёт выполнение после всех остальных потоков, включая проигравшего инструкцию)
управление на адрес A, если содержимое ячейки с адресом B
SEQ A B - Сравнить источник с назначением, и если они равны, то пропустить следующую инструкцию.
равно нулю
CMP A B 8 - сравнить содержимое ячеек с адресами A и B, если они не равны,
SNE A B - Сравнить источник с назначением, и если они не равны, то пропустить следующую инструкцию.
пропустить следующую инструкцию
SLT A B - Сравнить источник с назначением, и если первое число меньше, чем второе, то пропустить следующую инструкцию.
LDP - загрузить из p-space (загружает число из персонального пространства потока)
SPL B 9 - породить новый поток по адресу B
STP - сохранить в p-space (сохраняет число в персональное пространство потока)
DAT B 0 - неисполняемое выражение, B — данные. При попытки выполнения
NOP - Ничего не происходит.
программа останавливается

Адресация (префиксы к аргументам):

# - Число.
$ - Адрес (можно не указывать).
* - A аргумент инструкции по адресу.
@ - B аргумент инструкции по адресу.
{ - A аргумент инструкции по адресу. Аргумент сначала декрементится, а потом берётся.
< - B аргумент инструкции по адресу. Аргумент сначала декрементится, а потом берётся.
} - A аргумент инструкции по адресу. Аргумент сначала берётся, потом инкрементится.
> - B аргумент инструкции по адресу. Аргумент сначала берётся, потом инкрементится.

Режимы адресации являются частью инструкции, а не аргумента. Когда берутся значения через *@{<}>, то предполагается, что это адрес.

Модификаторы (постфиксы инструкций):

.A - Взять A аргумент из источника в A аргумент назначения.
.B - Взять B аргумент из источника в B аргумент назначения.
.AB - Взять A аргумент из источника в B аргумент назначения.
.BA - Взять B аргумент из источника в A аргумент назначения.
.F - Взять AB аргументы из источника в AB аргументы назначения.
.X - Взять AB аргументы из источника в BA аргументы назначения.
.I - Взять весь источник в назначение.

== Примечания ==
{{примечания}}


== Ссылки ==
== Ссылки ==

=== Статьи ===
=== Статьи ===
* Alexander Dewdney [http://vx.netlux.org/lib/mad01.html "In the game called Core War hostile programs engage in a battle of bits"], Scientific American, 1984, v.250, N 5, pp. 15-19
* Alexander Dewdney [https://web.archive.org/web/20051226184746/http://vx.netlux.org/lib/mad01.html «In the game called Core War hostile programs engage in a battle of bits»], Scientific American, 1984, v.250, N 5, pp. 15–19 (русский перевод Александр Дьюдни [https://web.archive.org/web/20110717200045/http://vx.netlux.org/lib/mad06.html В игре «Бой в памяти» компьютерные программы ведут битву за биты], В мире науки, 1984/N7, с. 96-101
* Alexander Dewdney [http://vx.netlux.org/lib/mad02.html "A Core War bestiary of viruses, worms and other threats to computer memories"], Scientific American, 1985, v.252, N 3, pp. 14-19
* Alexander Dewdney [https://web.archive.org/web/20051226184817/http://vx.netlux.org/lib/mad02.html «A Core War bestiary of viruses, worms and other threats to computer memories»], Scientific American, 1985, v.252, N 3, pp. 14–19 (русский перевод Александр Дьюдни [https://web.archive.org/web/20110716231032/http://vx.netlux.org/lib/mad07.html «Обзор читательских откликов на статьи, посвященные игре „Бой в памяти“, экологической войне на планете Аква-Тор и охоте с компьютером на бобра-работягу»], В мире науки, 1985/N5, с. 70-75)
* Alexander Dewdney [http://vx.netlux.org/lib/mad03.html "A program called MICE nibbles its way to victory at the first Core War tournament"], Scientific American, 1987, v.256, N 1, pp. 8-11
* Alexander Dewdney [https://web.archive.org/web/20051226184840/http://vx.netlux.org/lib/mad03.html «A program called MICE nibbles its way to victory at the first Core War tournament»], Scientific American, 1987, v.256, N 1, pp. 8–11 (русский перевод Александр Дьюдни [https://web.archive.org/web/20110717200053/http://vx.netlux.org/lib/mad08.html «Анализ результатов первого турнира по компьютерной игре „Бой в памяти“»], В мире науки, 1987/N3, с. 96-100)
* Alexander Dewdney [http://vx.netlux.org/lib/mad04.html "Of worms, viruses and Core War"], Scientific American, 1989, v.260, N 3, pp. 90-93
* Alexander Dewdney [https://web.archive.org/web/20051029164812/http://vx.netlux.org/lib/mad04.html «Of worms, viruses and Core War»], Scientific American, 1989, v.260, N 3, pp. 90–93 (русский перевод Александр Дьюдни [http://vx.netlux.org/mad05.html «О вирусах, червяках и войне в памяти»]{{Недоступная ссылка|date=Июнь 2018 |bot=InternetArchiveBot }}, В мире науки, 1989/N5, с. 82-86)
* [http://www.ecst.csuchico.edu/~pizza/koth/icws94.html "Annotated Draft of the Proposed 1994 Core War Standard"] version 3.2
* [http://corewar.co.uk/standards/icws94.htm «Annotated Draft of the Proposed 1994 Core War Standard»] version 3.2

=== Сайты ===
=== Сайты ===
* [http://www.corewar.co.uk Core War: The Ultimate Programming Game]
* [http://www.corewar.info The Corewar Info Page]
* [http://www.corewar.info The Corewar Info Page]
* [http://vyznev.net/corewar/guide.html Руководство для начинающих]
* [http://vyznev.net/corewar/guide.html Руководство для начинающих] — Строго к ознакомлению.
* [http://www.koth.org/ Corewars — King Of The Hill!]
* [http://www.koth.org/ Corewars — King Of The Hill] — Тут можно выставить своего бота на арену.
* [http://sourceforge.net/projects/corewar pMars] стандартный симулятор
* [http://sourceforge.net/projects/corewar pMARS] Стандартный симулятор.
* [http://code.google.com/p/corewars8086/ corewars8086] — CoreWars 8086


=== Примечания ===
[[Категория:Компьютерные игры]]
[[Категория:Виртуальные машины]]


[[Категория:Игры для программистов]]
[[de:Core War]]
[[Категория:Виртуальные машины]]
[[en:Core War]]
[[es:Core War]]
[[fi:Core War]]
[[ja:コア戦争]]
[[pl:Corewars]]

Текущая версия от 06:24, 9 января 2024

Core War
Скриншот программы Core War
Игра «Core War» под управлением симулятора pMARS
Тип Игра для программистов
Авторы Д. Г. Джонс и А. К. Дьюдни
Первый выпуск 1984
Аппаратная платформа Linux
Лицензия BSD, GNU GPL и бесплатное программное обеспечение

Бой в памяти (англ. Core War) — разновидность компьютерной игры «Дарвин», разработанная Александром К. Дьюдни. Помогал разрабатывать игру Дэвид Джонс, студент кафедры информатики университета Западной Онтарио, где преподавал Дьюдни.

В данной игре игроки разрабатывают компьютерные программы на специальном языке программирования, похожем на ассемблер — Redcode. Программы размещаются в циклически замкнутом участке памяти (core), состоящей из 8000 ячеек и зацикленной в кольцо. Каждая команда занимает одну ячейку. Redcode-программы работают под управлением MARS (англ. Memory Array Redcode Simulator — Симулятор Массива Памяти Redcode). Программы загружаются по случайным адресам в памяти.

Каждая программа (начиная со стандарта ICWS'1988) может иметь несколько активных потоков, причём поток может порождать другие потоки с помощью инструкции SPL. Потоки, принадлежащие одной программе, выполняются по очереди, поэтому скорость их выполнения обратно пропорциональна количеству потоков. Поток завершается, если пытается выполнить некорректную инструкцию. Программа, все потоки которой завершились, считается проигравшей.

Статьи, посвящённые игре, публиковались в журнале Scientific American в 19841987, в колонке Computer Recreations (Занимательный компьютер). Игра вызвала значительный интерес у читателей, и впоследствии было основано международное общество International Core War Society (ICWS) со штаб-квартирой в США и отделениями во многих странах мира, включая СССР.

ICWS проводила ежегодные международные турниры, начиная с 1986 года. Соревнования проводились по круговой системе. Первые два турнира были по сути чемпионатами Северной Америки. Турнир же 1988 года, проводившийся по новому стандарту игры ICWS'88, привлёк многочисленных участников из разных стран и стал де-факто первым чемпионатом мира. Победителями стали Евгений Лилитко (СССР) – 1-е место, Luca Crosara (Италия) – 2-е место и третьим стал Douglas McDaniels (США)[1]. Ещё один советский участник – Александр Бурцев занял пятое место. В настоящее время соревнования проводятся в основном по системе "King of the hill".

Разработать «Бой в памяти» Дьюдни побудила история о двух противоборствующих программах CREEPER и REAPER (см. компьютерный вирус). Обстоятельства разработки CREEPER/REAPER дошли до Дьюдни в несколько искажённом виде, так, по словам Р. Томлинсона, ни заражения ARPANet, ни «поединка» между двумя программами в действительности не было.

Тут представлен стандарт ICWS'94 (последний). Все инструкции имеют 2 аргумента A и B, хотя не все используют их оба. В аргументах хранятся значения и совершаются операции адресации (инкремент/декремент). Предполагается, что A — источник, B — назначение.

Инструкции (<Инструкция> <Используемые аргументы> — <Описание>):

   DAT     - Останавливает выполнение потока.
   MOV A B - Скопировать источник по адресу в назначение по адресу. 
   ADD A B - Прибавить источник к назначению. 
   SUB A B - Вычесть источник к назначению. 
   MUL A B - Умножить назначение на источник. 
   DIV A B - Разделить назначение на источник. (При B=0 останавливает выполнение потока).
   MOD A B - Получить остаток от деления A на B. (При B=0 останавливает выполнение потока).
   JMP A   - Переместиться по адресу. 
   JMZ A B - Если B=0, перейти по адресу A.
   JMN A B - Если B не равно 0, перейти по адресу A.
   DJN A B - Вычесть из B единицу, и если B не равно 0, то перейти по адресу A.
   SPL A   - Создать новый поток по адресу A (начнёт выполнение после всех остальных потоков, включая проигравшего инструкцию)
   SEQ A B - Сравнить источник с назначением, и если они равны, то пропустить следующую инструкцию.
   SNE A B - Сравнить источник с назначением, и если они не равны, то пропустить следующую инструкцию.
   SLT A B - Сравнить источник с назначением, и если первое число меньше, чем второе, то пропустить следующую инструкцию.
   LDP  - загрузить из p-space (загружает число из персонального пространства потока)
   STP  - сохранить в p-space (сохраняет число в персональное пространство потока)
   NOP  - Ничего не происходит.

Адресация (префиксы к аргументам):

 # - Число.
 $ - Адрес (можно не указывать).
 * - A аргумент инструкции по адресу. 
 @ - B аргумент инструкции по адресу. 
 { - A аргумент инструкции по адресу. Аргумент сначала декрементится, а потом берётся. 
 < - B аргумент инструкции по адресу. Аргумент сначала декрементится, а потом берётся.    
 } - A аргумент инструкции по адресу. Аргумент сначала берётся, потом инкрементится. 
 > - B аргумент инструкции по адресу. Аргумент сначала берётся, потом инкрементится.
 Режимы адресации являются частью инструкции, а не аргумента. Когда берутся значения через *@{<}>, то предполагается, что это адрес.

Модификаторы (постфиксы инструкций):

 .A  - Взять A аргумент из источника в A аргумент назначения.
 .B  - Взять B аргумент из источника в B аргумент назначения.
 .AB - Взять A аргумент из источника в B аргумент назначения.
 .BA - Взять B аргумент из источника в A аргумент назначения.
 .F  - Взять AB аргументы из источника в AB аргументы назначения.
 .X  - Взять AB аргументы из источника в BA аргументы назначения.
 .I  - Взять весь источник в назначение.

Примечания

[править | править код]
  1. The Third ICWS Tournament. Дата обращения: 12 ноября 2019. Архивировано 12 ноября 2019 года.

Примечания

[править | править код]