핵심 전쟁

Core War
핵심 전쟁
Core War screenshot
pMARS 시뮬레이터 아래를 달리는 코어워 게임
개발자D. G. 존스 & A. K. 더드니
풀어주다1984년 3월
장르프로그래밍 게임

코어 워(Core War)는 1984년 D. G. Jones와 A. K. Dewdney에 의해 개발된 프로그래밍 게임으로, 두 개 이상의 전투 프로그램("워리어")이 가상 컴퓨터를 제어하기 위해 경쟁합니다.이 전투 프로그램들은 Redcode라고 불리는 추상적인 어셈블리 언어로 쓰여져 있다.

게임 플레이

게임 시작 시, 각 배틀 프로그램을 랜덤 위치에서 메모리에 로드하고, 그 후 각 프로그램이 1개의 명령을 차례로 실행한다.게임의 목적은 상대 프로그램의 프로세스가 종료되고(무효한 명령을 실행할 경우 발생), 승리한 프로그램이 기계를 독점하게 하는 것입니다.

Redcode의 최초 공개 버전에서는 8개의 명령만 정의되어 있습니다.ICWS-86 규격은 10으로 늘렸고 ICWS-88 규격은 11로 늘렸다.현재 사용되는 1994년 초안 표준에는 16개의 지침이 있습니다.단, Redcode는 여러 가지 다른 어드레싱 모드와 (1994년 초안 표준에서 시작) 명령 수식자를 지원하므로 실제 동작 수가 7168로 증가합니다.Redcode 표준에서는 기본 명령 표현이 정의되지 않은 상태로 유지되며 프로그램에서 이 표현에 액세스할 수 있는 수단이 제공되지 않습니다.산술 연산은 각 명령어에 포함된 두 개의 주소 필드에 대해 수행될 수 있지만 명령 코드 자체에서 지원되는 유일한 연산은 동일성을 위한 복사 및 비교입니다.

일정한 명령 길이 및 시간
각 Redcode 명령은 메모리 슬롯을 1개씩 점유하며 실행하는 데 정확히 1주기가 소요됩니다.그러나 처리 시간이 균등하게 공유되기 때문에 프로세스가 명령을 실행하는 속도는 큐 내의 다른 프로세스의 수에 따라 달라집니다.
원형 메모리
메모리는 1개의 명령 단위로 주소 지정됩니다.메모리 공간(또는 코어)은 유한 크기이지만 상대 주소 지정만 사용됩니다. 즉, 주소 0은 항상 현재 실행 중인 명령, 주소 1은 그 이후의 명령 등을 나타냅니다.최대 주소 값은 메모리 위치 수보다 1 작은 값으로 설정되며 필요에 따라 반환됩니다.그 결과 주소와 메모리 위치 사이에 일대일 대응이 존재하지만 Redcode 프로그램이 절대 주소를 결정하는 것은 불가능합니다.유효하지 않은 명령이나 점프 명령이 없는 프로세스는 연속된 명령을 끝없이 계속 실행하며, 결국 시작된 명령으로 돌아갑니다.
저레벨 멀티프로세서
단일 명령 포인터 대신 Redcode 시뮬레이터는 시뮬레이터가 순환하는 가변적인 수의 명령 포인터를 포함하는 각 프로그램을 위한 프로세스 큐를 가지고 있습니다.각 프로그램은 1개의 프로세스로 시작하지만 새로운 프로세스를 큐에 추가할 수 있습니다.SPL설명.프로세스가 실행되면 프로세스가 정지됩니다.DAT 명령 또는 0으로 나눗셈을 수행합니다.프로그램이 더 이상 프로세스가 남아 있지 않으면 비활성 상태로 간주됩니다.
외부 접근 금지
Redcode 및 MARS 아키텍처는 입력 또는 출력 기능을 제공하지 않습니다.시뮬레이터는 메모리 및 프로세스 큐의 초기 값만 입력하며, 유일한 출력은 전투 결과(즉, 어떤 프로그램이 살아남았는지)인 폐쇄형 시스템입니다.물론 시뮬레이터는 시뮬레이션을 실행하는 동안에도 메모리를 외부에서 검사하고 수정할 수 있습니다.

Redcode 버전

Redcode에는 몇 가지 버전이 있습니다.A. K. Dewdney[1] 의해 기술된 최초의 버전은 많은 점에서 국제핵심전쟁학회에 의해 제정된 이후의 표준과 다르며, 비록 관련이 있지만 다른 언어로 간주될 수 있다.오늘날 가장 일반적으로 사용되는 Redcode의 형태는 1994년 ICWS에 제출된 표준 초안에 기초하고 있으며, 이 초안은 ICWS가 그 무렵에 사실상 폐지되었기 때문에 공식적으로 받아들여지지 않았다.그러나 Redcode의 개발은 주로 온라인 포럼을 통해 비공식적으로 계속되어 왔다.rec.games.corewar [2]뉴스 그룹

전략.

전사는 일반적으로 여러 범주로 나뉘지만 실제 전사는 종종 이들 중 두 개 이상의 행동을 결합할 수 있습니다.일반적인 세 가지 전략(리플리케이터, 스캐너, 폭격기)은 페이퍼, 가위, 스톤으로도 알려져 있는데, 서로에 대한 성능이 잘 알려진 놀이터 [3]게임에서의 이름과 비슷하기 때문이다.

용지(또는 리플리케이터)
리플리케이터는 자신의 반복적인 복사본을 만들고 병렬로 실행하며, 최종적으로 전체 코어를 코드의 복사본으로 채웁니다.리플리케이터는 죽이기 어렵지만 종종 상대를 죽이는데 어려움을 겪습니다.따라서 복제자는 특히 다른 복제자에 대해 많은 점수를 매기는 경향이 있습니다.
비단은 매우 빠른 복제품의 특별한 종류로, Juha Pohjalainen의 실크[4] 워리어 이름을 따서 명명되었다.대부분의 최신 복제자는 이 유형입니다.실크 리플리케이터는 병렬 실행을 사용하여 하나의 명령으로 전체 코드를 복사하고 [5]완료되기 전에 복사를 시작합니다.
가위(또는 스캐너)
스캐너는 복제자를 이기도록 설계되었습니다.스캐너는 맹목적으로 공격하는 것이 아니라 표적 공격을 시작하기 전에 적을 찾으려 합니다.이를 통해 복제자와 같이 죽이기 어려운 상대에게 보다 효과적으로 대응할 수 있을 뿐만 아니라 유인책에도 취약합니다.스캐너는 보통 SPL 0 명령을 사용하여 메모리를 폭파합니다.이로 인해 적은 더 많은 프로세스를 생성하기만 하는 엄청난 수의 프로세스를 생성하게 되고 유용한 프로세스를 느리게 만듭니다.적이 너무 느려져서 유용한 일을 할 수 없게 되면 메모리는 DAT 명령으로 폭격됩니다.또한 스캐너는 일반적으로 다른 유형의 전사보다 [6]더 복잡하고, 따라서 더 크고, 더 취약합니다.
원샷은 첫 번째 타깃을 찾을 때까지 코어를 스캔한 후 공격 전략(보통 코어 클리어)으로 영속적으로 전환하는 매우 단순한 스캐너입니다.Roy van Rijn의 Myrmidon[7] 원샷의 한 예이다.
스톤(또는 폭격기)
폭격기는 적에게 명중하기를 바라며 일정한 간격으로 "폭탄"을 맹목적으로 모방한다.폭탄은 종종 DAT 명령어이지만 다른 명령어 또는 다중 명령어 폭탄이 사용될 수 있습니다.폭격기는 작고 빠를 수 있으며, 폭탄이 편리한 산만함으로 작용하기 때문에 상대방을 스캔하는 것보다 더 유리하다.폭격기는 종종 복제자에 대한 복원력을 높이기 위해 임팩트 스파이럴과 결합됩니다.
뱀파이어(또는 피트 트래퍼)
뱀파이어는 상대방의 과정을 "피트"라고 불리는 자신의 코드로 뛰어들게 하려고 한다.뱀파이어는 폭격기나 스캐너에 기반할 수 있다.뱀파이어의 가장 큰 약점은 간접적으로 쉽게 공격을 받을 수 있다는 것이다. 왜냐하면 뱀파이어는 필연적으로 코드에 대한 포인터를 핵심에 뿌려야 하기 때문이다.갱도에 도달하기 위해서는 추가 라운드가 필요하기 때문에 공격도 느립니다.폴손의 myVamp[8] 뱀파이어의 예입니다.
꼬마
Imps의 이름은 첫 번째 출판[9] 전사 Imp by A. K. Dewdney의 이름을 따서 지어졌습니다.Imp by A. K. Dewdney는 명령 포인터 바로 앞에 명령을 계속 복사하는 하찮은 1개 명령 모바일 전사입니다.임프는 죽이기 어렵지만 공격에는 거의 쓸모가 없다.용도는 쉽게 대량으로 번식할 수 있고, 나머지 전사가 죽더라도 생존할 수 있다는 데 있다.
임프 링(또는 임프 스파이럴)은 코어 주위에 등간격으로 간격을 두고 교대로 실행하는 임프 링으로 구성됩니다.링/나선형 암의 각 imp는 명령을 다음 암으로 복사하고 여기서 즉시 다시 실행됩니다.반지와 소용돌이는 단순한 인형보다 죽이기 어렵고, 심지어 그것들로부터 보호받지 못하는 전사들을 죽일 가능성도 있다.임팩트 링 또는 스파이럴의 암 수는 코어의 크기에 따라 상대적으로 소수여야 합니다.
QuickScanner(또는 q-scan)
퀵스캐너는 매우 빠른 언롤링 스캔 루프를 사용하여 상대를 조기에 잡으려고 합니다.퀵스캔은 초기 게임 전략으로 항상 다른 전략을 백업해야 합니다.워리어에 퀵스캔 컴포넌트를 추가하면 다른 퀵스캔너와 같은 롱워리어에 비해 점수가 향상됩니다.그러나 롤링되지 않은 검색은 제한된 수의 위치만 대상으로 할 수 있으며 작은 상대를 잡을 수 없습니다.
코어 클리어
코어 클리어에 의해 코어 내의 모든 명령어가 순차적으로 덮어쓰게 됩니다.경우에 따라서는 자신을 포함한 명령어가 덮어쓰기도 합니다.코어 클리어 기능은 스탠드 아론 워리어로서는 그다지 일반적이지 않지만 폭격기나 스캐너에 의해 최종 게임 전략으로 사용되는 경우가 많습니다.

핵심 전쟁 프로그래밍

핵심 전쟁 전략을 이해하면 프로그래머는 특정한 목표를 달성하기 위해 전사를 만들 수 있습니다.혁명적인 아이디어는 가끔 나오지만 대부분의 경우 프로그래머들은 이미 발표된 전사들을 기반으로 프로그램을 짜고 있습니다.OptiMax 등의 옵티마이저나 코어 스텝 옵티마이저 툴을 사용하면 보다 효과적인 워리어 환경을 구축할 수 있습니다.

전사는 유전 알고리즘이나 유전 프로그래밍의해서도 생성될 수 있다.이 진화 기술을 통합하는 프로그램을 에볼라버라고 합니다.코어워 커뮤니티에 의해 도입된 몇 가지 에볼로버는 소규모 코어 설정을 위한 전사 생성에 중점을 두는 경향이 있습니다.가장 최근에 큰 성공을 거둔 진화는 가장 성공적인 나노 및 작은 전사들을 배출한 μGP였습니다[10].그럼에도 불구하고 진화 전략은 여전히 더 큰 핵심 환경에서 [11]그 효과를 입증해야 합니다.

발전

코어 워는 크리퍼라는 자기 복제 프로그램과 크리퍼의 [12]복사본을 파괴하는 리퍼라는 후속 프로그램에서 영감을 받았다.크리퍼는 BBN[13]밥 토마스에 의해 만들어졌다.더드니는 크리퍼와 리퍼의 기원을 몰랐고 다윈과 쇼흐와 의 벌레 실험에서 비롯된 루머라고 했다.그럼에도[12] 불구하고 핵심전쟁에 관한 1984년 사이언티픽 아메리칸 기사는 빅터 A가 한 다윈 게임을 인용하고 있다. 1961년 벨 연구소에서 Vyssotsky, Robert Morris, 그리고 Douglas McIlroy가 연구했습니다.

이름에 "Core"라는 단어는 구식 랜덤 액세스 메모리 기술인 마그네틱 코어 메모리에서 유래했습니다.이 용어는 당시에도 여전히 일반적으로 Unix 및 대부분의 Unix 유사 시스템에서 코어 덤프라고 불리는 작업 메모리 덤프 내의 작업 메모리라는 용어로 사용되고 있습니다.또한 이러한 시스템의 코어 덤프에 사용되는 기본 파일 이름은 보통 "core"이거나 core라는 단어를 포함합니다.

레드코드 언어에 대한 최초의 설명은 1984년 3월 D. G. 존스와 A. K. 듀드니[1]의해 핵심 전쟁 지침에서 출판되었다.이 게임은 1984년 5월 Dewdney가 Scientific American에서 쓴 기사에서 대중에게 소개되었다.Dewdney는 1985년 [14]3월에 "컴퓨터 레크리에이션" 칼럼에서 코어 워를 다시 방문했고 1987년 [15]1월에 다시 방문했습니다.

국제핵심전쟁학회(ICWS)는 드위드니의 원고가 실린 지 1년 뒤인 1985년에 설립됐다.ICWS는 1986년과 1988년에 Redcode 언어에 대한 새로운 표준을 발표했으며 1994년에는 공식적으로 새로운 [16]표준으로 정해진 적이 없는 업데이트를 제안했다.그럼에도 불구하고, 1994년 초안은 일반적으로 채택되고 확장되었으며, 오늘날 Redcode의 사실상의 표준이 되었다.ICWS는 마크 클락슨(1985–1987), 윌리엄 R.에 의해 감독되었다.Buckley(1987–1992), Jon Newman(1992–1992), 현재 ICWS는 [17]폐지되었다.

레드코드

 0000:  더하다.AB  #   4, $   3  0001:  motoroperatorvalve.F   $   2, @   2  0002:  JMP.B   $  -2, $   0  0003:  DAT.F   #   0, #   0 
조립식 ICWS-94 스타일 레드코드

레드코드는 코어워에서 사용프로그래밍 언어입니다.MARS(Memory Array Redcode Simulator)라고 하는 가상 시스템에서 실행됩니다.Redcode의 설계는 1980년대 초반의 실제 CISC 어셈블리 언어에 근거하고 있지만, 실제 컴퓨터 시스템에서는 일반적으로 볼 수 없는 몇 가지[vague] 기능을 포함하고 있습니다.

Redcode와 MARS 환경은 모두 실제 컴퓨터와 프로세서의 복잡함 없이 심플하고 추상적인 플랫폼을 제공하도록 설계되었습니다.Redcode는 일반적인 CISC 어셈블리 언어와 비슷하지만 "실제" 어셈블리에 비해 상당히 단순하며 절대 메모리 주소 지정이 없습니다.

처음 8가지 명령어는 다음과 같습니다.이후 버전에서는 NOP, 곱셈 및 더 복잡한 [18]비교가 추가되었습니다.

OPcode 니모닉 인수 액션 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------위치 B.3 SUB A B 위치 B의 내용에서 피연산자 A를 뺀 후 위치 B에 결과를 저장한다.4 JMP B 위치 B로 점프. 5 JMZ A B 피연산자 A가 0일 경우 위치 B로 점프하고, 그렇지 않으면 계속한다.6 DJZ A B 위치 A의 내용물을 1씩 감소시킵니다.로케이션 A가 0을 유지하고 있는 경우는, 로케이션 B로 점프합니다.그렇지 않은 경우는, 다음의 순서로 진행됩니다.7 CMP A B 피연산자 A와 피연산자 B를 비교합니다.일치하지 않으면 다음 명령을 건너뜁니다. 그렇지 않으면 다음 명령을 실행합니다. 

ICWS '94 표준 초안에서는 주로 A 필드 간접 처리를 위해 주소 지정 모드를 추가하여 총 8개의 주소 모드를 제공합니다.

# — 직접 $ — 직접 ($는 생략 가능) * — A 필드 간접 @ - B 필드 간접 { — 사전 계수가 있는 B 필드 간접 } — 사후 계수가 있는 A 필드 간접 > - 사후 계수가 있는 B 필드 간접

실장

게임의 구현 개발은 여러 저자들에 의해 수년간 계속되었다.여러 플랫폼용으로 이식된 여러 버전의 게임을 사용할 [19]수 있습니다.예를 들어 소스 포지에 [20]소스 코드가 있는 오픈 소스 소프트웨어 pMARS나 SDL 기반의 Windows용 [21]SDL pMARS 등이 있습니다.최근에는 완전한 웹 기반 시뮬레이터(https://www.corewar.io/)가 개발되어 플랫폼별 툴을 다운로드할 필요가 없습니다.

공통 구현 pMars는 2000년부터 2021년 사이에 [22]SourceForge에서 35,000회 이상 다운로드되었습니다.

레퍼런스

  1. ^ a b Jones, D. G.; Dewdney, A. K. (March 1984). "Core War Guidelines". Retrieved 2013-03-11.
  2. ^ "rec.games.corewar on Google Groups". Retrieved 2013-03-11.
  3. ^ Wangsaw, Mintardjo. "Intro to Art in '88: Paper - Stone - Scissors Trilogy". Retrieved 2013-03-11.
  4. ^ Pohjalainen, Jippo. "Silk Warrior 1.3". Retrieved 2013-03-11.
  5. ^ Pohjalainen, Jippo (April 1995). "Replicators? - Phoenix & TimeScape source". Retrieved 2013-03-11.
  6. ^ Metcalf, John (April 2004). "Anatomy of the Scanner, A Basic Introduction". Retrieved 2013-03-11.
  7. ^ van Rijn, Roy. "Myrmidon". Retrieved 2013-03-11.
  8. ^ Paulsson, Magnus. "myVamp v3.7". Retrieved 2013-03-11.
  9. ^ Dewdney, A. K. "Imp". Retrieved 2013-03-11.
  10. ^ Squillero, Giovanni. "μGP (MicroGP v2)". GitHub. Retrieved 2018-09-10.
  11. ^ Vowk, Barkley; Wait, Alexander; Schmidt, Christian. "An Evolutionary Approach Generates Human Competitive Corewar Programs" (PDF). Retrieved 2013-03-11.
  12. ^ a b Dewdney, A. K. (May 1984). "In the game called Core War hostile programs engage in a battle of bits". Scientific American. Retrieved 2017-10-05.
  13. ^ Shoch, J.; Hupp, J. (March 1982). "The 'Worm' Programs - Early Experience with a Distributed Computation". Communications of the ACM. 25 (3): 172–180. doi:10.1145/358453.358455. S2CID 1639205.
  14. ^ Dewdney, A. K. (March 1985). "A Core War bestiary of viruses, worms and other threats to computer memories". Scientific American. Retrieved 2017-10-05.
  15. ^ Dewdney, A. K. (January 1987). "A program called MICE nibbles its way to victory at the first Core War tournament". Scientific American. Retrieved 2017-10-05.
  16. ^ Doligez, Damien; Durham, Mark (8 November 1995). "Annotated Draft of the Proposed 1994 Core War Standard". Retrieved 2013-03-11.
  17. ^ Metcalf, John. "A Brief History of Corewar". Retrieved 2013-03-11.
  18. ^ "The beginners' guide to Redcode, v1.23".
  19. ^ corewar.info의 Corewar 에뮬레이터
  20. ^ Source Forge에서의 코어워
  21. ^ pMARS-SDL on corewar.co.uk (Junas Pihlaja 2003년 5월 7일)
  22. ^ 다운로드 번호 coreWar SourceForge (access 2021-06-07)

외부 링크