コア戦争

『コア戦争』（コアせんそう、英：Core War または Core Wars）はプログラミングゲームのひとつである。専用に設計された仮想機械中で、互いに干渉しうるプログラム同士が戦うというもので、敵対するプログラムを終了させ、自分は生き残ってマシンを占領するのがゲームの目的である。仮想機械は『MARS』（火星にも掛けているが、Memory Array Redcode Simulatorの頭字語）という名前で、戦闘プログラムは『戦士』"warriors" と呼ばれる。
ロボットバトルシミュレーションといった趣きのプログラミングゲームは他にもあるが、コンピュータの記憶装置そのものを戦場とし、プログラムが存在するメモリを上書きするなどして直接プログラム同士が戦う、という点がこの作品の特色である。なお「コア」は磁気コアメモリに由来する。
概要.
初期化し無内容としたコアの上に複数のRedcodeプログラム（Warrior、戦士）を配置し動作させ（=戦わせ）、最後まで動作し生き残ったものを勝者とする。プログラムは自分の分身を作る、他者のコードを上書き破壊するなどして戦う。
MARSはコア上のプログラムを逐次実行する（複数のプログラムが存在する場合は、それぞれのコードを同時に動作させる）。コアは連続した番地を持つが、絶対番地を参照するコードは用意されていない。また、コアの番地の両端は連続している（コアの大きさはCORESIZEで定義されるが、CORESIZE番地は0番地と同一である）。初期のRedcodeはシングルプロセスであったが、現在ではMARSはタスク待ち行列 (task queue) を持つようになり、SPL命令によって新規のプロセスを実行できるようになった（待ち行列には各プロセスの命令ポインタに当たるtask pointerが登録される）。
歴史.
"コア戦争"はと呼ばれるプログラムや、その後継で『死神』(Reaper)と呼ばれCreeper の複製を破壊するプログラムから着想を得ている。 パロアルト研究センターの Shoch と Hupp (CACM, vol. 25, no. 3, 1982) らの説明によれば、Creaper は BBN のB. Thomas によって作られたという。Dewdney は　Creeper と Reaper の出自を知らず、Shoch と Hupp による Darwin ゲームとワーム実験に起源する噂としてこれに言及した。
また、発想の元としては、いずれもベル研究所所属の Victor A. Vyssotsky(Multics計画のベル研側の責任者であり、"Introduction and Overview of the Multics System"などといったMulticsの重要な文献の(共)著者に名を連ねている), Robert Morris Sr. (ロバート・T・モリスの父), ダグラス・マキロイ (パイプの提案者で、Unix用のユーティリティも多く書いている) らが1960年代に作ったDarwin（）というプログラミングゲームが挙げられることもある。1984年に A. K. Dewdney と D. G. Jones が「コア戦争ガイドライン」を発行し、同年DewdneyはScientific American誌の"Computer Recreations"でこのゲームを紹介した。日本でも同誌の日本版日経サイエンスの「コンピュータレクリエーション」コーナーなどで紹介され、一時はよく知られていた。
1984年、サイエンティフィック・アメリカン誌の『コア戦争』に関する記事がベル研究所の 、、 らによって 1960 年代に書かれた "" をそれにもかかわらず引用していた。
最初の Redcode 言語の記述は 1984 年の 3 月に と による『コア戦争ガイドライン』(Core War Guidelines)において発表された。このゲームはDewdneyによって書かれたサイエンティフィックアメリカン誌に 1984 年の 3 月に一般に紹介された。1985 年の 5 月、Dewdney は自身の "Computer Recreations" コラムにおいてコア戦争を再考し、また 1987 年 1 月にも取り上げた。
国際コア戦争協会 (International Core Wars Society, ICWS) は Dewdney の記事の一年後、1985年に設立された。ICWSは1986年と1988年に Redcode 言語の新たな規格を出版し、新たな規格として非公式のセットを1994年に提案と更新を行った。にもかかわらず、1994年のドラフトは一般に採用、拡張され、今日のRedcodeのデファクトスタンダードへの基板を形成している。ICWS は Mark Clarkson (1985–1987)、William R. Buckley (1987–1992)、Jon Newman (1992–)によって指揮されたが、現在は ICWS はもはや機能していない。
Redcode.
 0000: ADD.AB # 4, $ 3
 0001: MOV.F $ 2, @ 2
 0002: JMP.B $ -2, $ 0
 0003: DAT.F # 0, # 0
Redcode と MARS 環境は現実のコンピュータやプロセッサの複雑さなしに単純で抽象的なプラットフォームを提供するよう設計されている。Redcode は平凡なCISC アセンブリ言語に似せられているが、多くの点で実際のアセンブリ言語とは異なっている:
いずれのプログラムも自身の命令ポインタを持ついくつかのアクティブなプロセスを持っている。いずれのプログラムも1プロセスから開始するが、他のプロセスはSPL命令によって作られる。それぞれのプログラムのプロセスは交互に実行され、それゆえどのプログラムもそのプログラムが持つアクティブなプロセスの数に反比例した実行スピードになる。プロセスはDAT命令を実行した時か、ゼロで除算したときに死ぬ。プログラムはひとつもプロセスが残っていないときに死んだとみなされる。
戦略.
戦闘プログラムは通常いくつかのおおまかなカテゴリに分類されるが、実際の戦闘プログラムではしばしば2からそれ以上のプログラムの振る舞いが一体化することがある。3つの基本的な戦略("replicator", "scanner" and "bomber")は三すくみとなっていることも知られており、これらのお互いに対する振る舞いはよく知られたプレイグラウンドゲームにおいての同名のものに近似する。
『コア戦争』のプログラミング.
『コア戦争』戦略の理解に基づいて、プログラマはある目的を達成する戦士を作ることができる。戦士は『.red』拡張子をつけた ASCII 形式で保存される。たまに革新的なアイデアが舞い降りる……が、ほとんどの場合はプログラマはアイデアを得るためにすでに公開された戦士を利用する。OptiMax や core-step optimizer toolsのような最適化システムを使うと、よりコンパクトで効率的な戦士を作ることもできる。
戦士は遺伝的アルゴリズムもしくは遺伝的プログラミングにより生成することもできる。この進化技術を統合するプログラムは Core War Evolvers としても知られている。いくつかの小さく高速な evolver は『コア戦争』コミュニティで紹介されているが、より小さい『コア戦争』設定に焦点を当てている。大きな成功をした最新の evolver は、極小の KOTHs を生成した µGP である。とはいえ、進化戦略はより大きな丘(8000以上のコア)でその効率の検証を未だ必要としている。