Çekirdek Savaş -Core War

çekirdek savaş
Çekirdek Savaş ekran görüntüsü
pMARS simülatörü altında çalışan bir Çekirdek Savaş oyunu
Geliştirici(ler) DG Jones ve AK Dewdney
Serbest bırakmak Mart 1984
Tür(ler) programlama oyunu

Core War ,iki veya daha fazla savaş programının ("savaşçılar" olarak adlandırılır) sanal bir bilgisayarın kontrolü için rekabetettiği, DG Jones ve AK Dewdney tarafından oluşturulanbir 1984 programlama oyunudur . Bu savaş programları Redcode adı verilensoyut bir derleme dilinde yazılmıştır.

Oynanış

Bir oyunun başlangıcında, her savaş programı rastgele bir yerde belleğe yüklenir, ardından her program sırayla bir talimatı yürütür. Oyunun amacı, karşıt programların süreçlerinin sona ermesini sağlamak (ki bu, geçersiz bir talimat yürütürlerse gerçekleşir), muzaffer programı makinenin yegane mülkiyetinde bırakmaktır.

Redcode'un yayınlanan en eski sürümü yalnızca sekiz talimat tanımladı. ICWS-86 standardı sayıyı 10'a, ICWS-88 standardı ise 11'e çıkarmıştır. Halihazırda kullanılan 1994 taslak standardında 16 talimat bulunmaktadır. Bununla birlikte, Redcode, olası gerçek işlem sayısını 7168'e çıkaran bir dizi farklı adresleme modunu ve (1994 taslak standardından başlayarak) talimat değiştiricilerini destekler. Redcode standardı, temel talimat temsilini tanımsız bırakır ve programların buna erişmesi için hiçbir yol sağlamaz. . Aritmetik işlemler, her talimatta bulunan iki adres alanında yapılabilir, ancak talimat kodlarının kendilerinde desteklenen tek işlem, eşitlik için kopyalama ve karşılaştırmadır.

Sabit talimat uzunluğu ve süresi
Her Redcode talimatı tam olarak bir bellek yuvasını kaplar ve yürütülmesi tam olarak bir döngü alır. Bununla birlikte, bir işlemin talimatları yürütme hızı, işlem süresi eşit olarak paylaşıldığından, kuyruktaki diğer işlemlerin sayısına bağlıdır.
Dairesel bellek
Bellek, bir komut biriminde adreslenir. Bellek alanı (veya çekirdek ) sonlu boyuttadır, ancak yalnızca göreli adresleme kullanılır, yani adres 0 her zaman o anda yürütülmekte olan talimata, adres 1 ondan sonraki talimata vb. atıfta bulunur. Maksimum adres değeri, bellek konumlarının sayısından bir eksik olarak ayarlanır ve gerekirse sarılır. Sonuç olarak, adresler ve bellek konumları arasında bire bir yazışma vardır, ancak bir Redcode programının herhangi bir mutlak adresi belirlemesi imkansızdır. Geçersiz veya atlama talimatlarıyla karşılaşmayan bir işlem, ardışık talimatları kesintisiz olarak yürütmeye devam edecek ve sonunda başladığı talimata geri dönecektir.
Düşük seviyeli çoklu işlem
Tek bir talimat işaretçisi yerine bir Redcode simülatörü, simülatörün içinden geçtiği değişken sayıda talimat işaretçisi içeren her program için bir işlem kuyruğuna sahiptir . Her program yalnızca bir işlemle başlar, ancak SPLtalimat kullanılarak kuyruğa yeni işlemler eklenebilir . Bir işlem, bir DAT talimatı yürüttüğünde veya sıfıra bölme işlemi gerçekleştirdiğinde ölür . Bir program, daha fazla işlemi kalmadığında ölü olarak kabul edilir.
Harici erişim yok
Redcode ve MARS mimarisi, giriş veya çıkış işlevi sağlamaz. Simülatör kapalı bir sistemdir, tek girdi hafızanın başlangıç ​​değerleri ve süreç kuyruklarıdır ve tek çıktı savaşın sonucu, yani hangi programların hayatta kalan süreçlere sahip olduğudur. Elbette simülatör, simülasyon çalışırken belleğin harici olarak incelenmesine ve değiştirilmesine izin verebilir.

Redcode sürümleri

Redcode'un birkaç versiyonu mevcuttur. AK Dewdney tarafından açıklanan en eski sürüm , Uluslararası Çekirdek Savaş Derneği tarafından oluşturulan sonraki standartlardan birçok açıdan farklıdır ve ilgili olsa da farklı bir dil olarak kabul edilebilir. Bugün en yaygın olarak kullanılan Redcode biçimi, 1994 yılında ICWS'ye sunulan ve ICWS'nin o sıralarda etkin bir şekilde feshedilmesi nedeniyle hiçbir zaman resmi olarak kabul edilmeyen bir taslak standardına dayanmaktadır. Ancak Redcode'un geliştirilmesi, gayri resmi bir şekilde, özellikle rec.games.corewar haber grubu gibi çevrimiçi forumlar aracılığıyla devam etti .

strateji

Gerçek savaşçılar genellikle bunlardan iki veya daha fazlasının davranışını birleştirebilse de, savaşçılar genellikle bir dizi geniş kategoriye ayrılır. Ortak stratejilerden üçü ( çoğaltıcı , tarayıcı ve bombardıman uçağı ), kağıt, makas ve taş olarak da bilinir , çünkü birbirlerine karşı performansları, iyi bilinen oyun alanı oyunundaki adaşlarına yakındır.

Kağıt (veya çoğaltıcı)
Bir çoğaltıcı, kendisinin tekrarlanan kopyalarını yapar ve bunları paralel olarak yürütür, sonunda tüm çekirdeği kodunun kopyalarıyla doldurur. Çoğalıcıları öldürmek zordur, ancak genellikle rakiplerini öldürmekte zorlanırlar. Bu nedenle çoğaltıcılar, özellikle diğer çoğaltıcılara karşı çok sayıda bağ elde etme eğilimindedir.
Bir ipek adını çok hızlı çoğaltıcı özel bir tipidir İpek Savaşçısı Juha Pohjalainen tarafından. Çoğu modern çoğaltıcı bu türdendir. Silk çoğaltıcılar, tüm kodlarını tek bir komutla kopyalamak için paralel yürütmeyi kullanır ve kopya tamamlanmadan önce yürütmeye başlar.
Makas (veya tarayıcı)
Bir tarayıcı, çoğaltıcıları yenmek için tasarlanmıştır. Bir tarayıcı körü körüne saldırmaz, ancak hedefli bir saldırı başlatmadan önce düşmanının yerini belirlemeye çalışır. Bu, onu çoğaltıcılar gibi öldürmesi zor rakiplere karşı daha etkili kılar, ancak aynı zamanda onu tuzaklara karşı savunmasız bırakır. Bir tarayıcı genellikle belleği SPL 0 talimatlarıyla bombalar . Bu, düşmanın, yararlı süreçleri yavaşlatan, daha fazla süreç yaratmaktan başka hiçbir şey yapmayan çok sayıda süreç yaratmasına neden olur. Düşman yararlı bir şey yapamayacak kadar yavaşladığında, bellek DAT talimatlarıyla bombalanır . Tarayıcılar ayrıca genellikle diğer savaşçı türlerinden daha karmaşıktır ve bu nedenle daha büyük ve daha kırılgandır.
Bir tek-atış , ilk hedefi bulur, ve bundan sonra kalıcı bir saldırı stratejisi, açık genellikle bir çekirdeğe geçer kadar sadece çekirdek tarar çok basit bir tarayıcıdır. Roy van Rijn'in Myrmidon'u bir tek atış örneğidir.
Taş (veya bombardıman uçağı)
Bir bombardıman uçağı, düşmanı vurmayı umarak, çekirdekte düzenli aralıklarla bir "bomba"yı körü körüne kopyalar. Bomba genellikle bir DAT talimatıdır, ancak diğer talimatlar ve hatta çok talimatlı bombalar kullanılabilir. Bir bombardıman uçağı küçük ve hızlı olabilir ve bombalar aynı zamanda uygun dikkat dağıtıcılar olarak hizmet ettiğinden, rakipleri taramaya göre ekstra bir avantaj elde eder. Bombardıman uçakları, çoğaltıcılara karşı ekstra dayanıklılık kazanmak için genellikle imp spirallerle birleştirilir.
Vampir (veya çukur avcısı)
Bir vampir, rakibinin süreçlerini "çukur" adı verilen kendi kodunun bir parçasına atlatmaya çalışır. Vampirler, bombardıman uçaklarına veya tarayıcılara dayalı olabilir. Vampirlerin en büyük zayıflığı, zorunlu olarak kodlarına işaretçileri çekirdeğin her yerine dağıtmaları gerektiğinden, dolaylı olarak kolayca saldırıya uğrayabilmeleridir. İşlemlerin çukura ulaşması fazladan bir tur gerektirdiğinden saldırıları da yavaştır. Paulsson'dan myVamp , bir vampir örneğidir.
İmp
İmpler, şimdiye kadar yayınlanan ilk savaşçı olan Imp , AK Dewdney tarafından , tek talimatını sürekli olarak talimat işaretçisinin hemen önüne kopyalayan önemsiz bir tek komutlu mobil savaşçıdan alır . İmpleri öldürmek zordur, ancak saldırı için işe yaramaz. Kullanımları, çok sayıda kolayca üreyebilmeleri ve savaşçının geri kalanı öldürülse bile hayatta kalabilmeleri gerçeğinde yatmaktadır.
Bir imp halkası (veya imp spirali ), çekirdeğin etrafında eşit aralıklarla yerleştirilmiş ve dönüşümlü olarak yürütülen imp'lerden oluşur. Halkanın/spiralin her bir kolundaki imler, talimatlarını hemen tekrar yürütüleceği bir sonraki kola kopyalar. Halkaları ve spiralleri öldürmek basit yaratıklardan bile daha zordur ve onlara karşı korunmayan savaşçıları öldürme (küçük) bir şansları bile vardır. Bir imp halkasındaki veya spiraldeki kolların sayısı , çekirdeğin boyutuyla nispeten aynı olmalıdır .
Hızlı tarayıcı (veya q-tarama)
Hızlı tarayıcı, çok hızlı açılmamış bir tarama döngüsü kullanarak rakibini erken yakalamaya çalışır. Hızlı tarama bir erken oyun stratejisidir ve her zaman yedek olarak başka bir strateji gerektirir. Bir savaşçıya hızlı tarama bileşeni eklemek, diğer hızlı tarayıcılar gibi uzun savaşçılara karşı puanını artırabilir. Ancak, açılmamış tarama yalnızca sınırlı sayıda konumu hedefleyebilir ve küçük bir rakibi yakalaması pek olası değildir.
çekirdek açık
Bir çekirdek netliği, bazen kendisi de dahil olmak üzere, çekirdekteki her talimatın üzerine sırayla yazar. Çekirdek temizlemeler, bağımsız savaşçılar olarak çok yaygın değildir, ancak genellikle bombardıman uçakları ve tarayıcılar tarafından oyun sonu stratejisi olarak kullanılır.

Çekirdek Savaş Programlama

Çekirdek Savaş stratejilerini anlayan bir programcı, belirli hedeflere ulaşmak için bir savaşçı yaratabilir. Devrimci fikirler arada bir gelir; ancak çoğu zaman programcılar programlarını önceden yayınlanmış savaşçılara dayandırırlar. OptiMax gibi optimize ediciler veya temel adım optimizasyon araçları kullanılarak daha etkili bir savaşçı oluşturulabilir.

Savaşçılar, genetik algoritmalar veya genetik programlama ile de üretilebilir . Bu evrimsel tekniği entegre programlar olarak bilinir evolvers . Çekirdek Savaş topluluğu tarafından birkaç geliştirici tanıtıldı ve daha küçük çekirdek ortamlar için savaşçılar üretmeye odaklanma eğiliminde. Önemli başarıya sahip en son evrimci , en başarılı nano ve minik savaşçılardan bazılarını üreten μGP idi . Bununla birlikte, evrimsel stratejinin hala daha büyük çekirdek ortamlarda etkinliğini kanıtlaması gerekiyor.

Gelişim

Core War , Creeper adlı kendi kendini kopyalayan bir programdan ve ardından Creeper kopyalarını yok eden Reaper adlı bir programdan ilham aldı . Creeper Bob Thomas tarafından oluşturulan BBN . Dewdney, Creeper ve Reaper'ın kökeninden haberdar değildi ve onlardan Darwin'den ve Shoch ve Hupp'un solucan deneylerinden kaynaklanan bir söylenti olarak bahsediyor . 1984 Scientific American üzerinde makale Çekirdek Savaşı yine oyun değinir Darwin tarafından oynanan, Victor A. Vyssotsky , Robert Morris ve Douglas McIlroy de Bell Labs adına kelime "Çekirdek" dan gelir 1961 yılında manyetik çekirdekli belleğe , eski bir rastgele erişimli bellek teknolojisi.

Redcode dilinin ilk tanımı Mart 1984'te DG Jones ve AK Dewdney tarafından Core War Guidelines'da yayınlandı . Oyun, Mayıs 1984'te Dewdney tarafından Scientific American'da yazılan bir makaleyle halka tanıtıldı . Dewdney , Mart 1985'te ve tekrar Ocak 1987'de "Bilgisayar Rekreasyonları" sütununda Çekirdek Savaş'ı tekrar ziyaret etti.

Uluslararası Çekirdek Savaşları Derneği (ICWS), Dewdney'nin orijinal makalesinden bir yıl sonra, 1985'te kuruldu. ICWS, 1986 ve 1988'de Redcode dili için yeni standartlar yayınladı ve 1994'te hiçbir zaman resmi olarak yeni standart olarak belirlenmeyen bir güncelleme önerdi. Bununla birlikte, 1994 taslağı yaygın olarak benimsendi ve genişletildi ve bugün Redcode için fiili standardın temelini oluşturuyor . ICWS, Mark Clarkson (1985–1987), William R. Buckley (1987–1992) ve Jon Newman (1992–) tarafından yönetildi; şu anda ICWS feshedilmiş durumda.

kırmızı kod

 0000:  ADD.AB  #   4, $   3
 0001:  MOV.F   $   2, @   2
 0002:  JMP.B   $  -2, $   0
 0003:  DAT.F   #   0, #   0
Montajlı ICWS-94 stili Redcode

Redcode, Core War'da kullanılan programlama dilidir . Bellek Dizisi Kırmızı Kod Simülatörü veya MARS olarak bilinen sanal bir makine tarafından yürütülür . Redcode'un tasarımı, 1980'lerin başlarındaki gerçek CISC derleme dillerine gevşek bir şekilde dayanmaktadır , ancak genellikle gerçek bilgisayar sistemlerinde bulunmayan birkaç özellik içerir.

Hem Redcode hem de MARS ortamı, gerçek bilgisayarların ve işlemcilerin karmaşıklığı olmadan basit ve soyut bir platform sağlamak üzere tasarlanmıştır. Redcode, sıradan bir CISC derleme diline benzemek anlamına gelse de, "gerçek" derlemeye göre oldukça basitleştirilmiştir ve mutlak bellek adreslemesi yoktur.

Orijinal 8 talimat aşağıda açıklanmıştır, sonraki sürümlerde NOP, çarpma ve daha karmaşık karşılaştırmalar eklenmiştir.

OPcode  Mnemonic  Argument(s)                Action  
------- --------- ----- ----- ----------------------------------
  0       DAT            B   Initialize location to value B.
  1       MOV      A     B   Move A into location B.
  2       ADD      A     B   Add  operand  A  to   contents  of location  B  and  store  result in 
                                  location B.
  3       SUB      A     B   Subtract operand  A  from contents of location  B and store result in
                                  location B.                                      
  4       JMP            B   Jump to location B.
  5       JMZ      A     B   If operand A is  0, jump  to location  B;  otherwise  continue with
                                       next instruction.
  6       DJZ      A     B   Decrement contents  of  location A by 1.  If location  A now holds 0,
                                      jump  to   location  B;  otherwise continue with next instruction. 
  7       CMP      A     B   Compare operand  A with operand B. If they  are not  equal, skip next
                                       instruction;   otherwise  execute  next instruction.

ICWS '94 standart taslağı, toplam 8 adres modu vermek için çoğunlukla A-alanı dolaylı ile başa çıkmak için daha fazla adresleme modu ekledi:

   # — immediate 
   $ — direct (the $ may be omitted)
   * — A-field indirect
   @ — B-field indirect
   { — A-field indirect with predecrement
   < — B-field indirect with predecrement
   } — A-field indirect with postincrement
   > — B-field indirect with postincrement

Uygulamalar

Oyunun uygulamalarının geliştirilmesi birkaç yazar tarafından yıllar içinde devam etti. Oyunun çeşitli platformlar için taşınan birden fazla sürümü var . Örneğin için pMARS olan açık kaynak yazılım ile kaynak kodu üzerinde Sourceforge'den veya SDL tabanlı SDL pMARS Windows için. Son zamanlarda, platforma özel herhangi bir araç indirme ihtiyacını ortadan kaldırarak https://www.corewar.io/ tamamen web tabanlı bir simülatör oluşturuldu .

Ortak uygulama pMars, Sourceforge'dan 2000 ile 2021 arasında 35.000'den fazla kez indirildi .

Referanslar

Dış bağlantılar