Dende hai bastante tempo estiven pensando nunha idea para un novo proxecto, pero ata hai uns meses non me puxen a traballar seriamente nel. Simple World é a simulación dun mundo moi sinxelo. Neste mundo viven unhas formas de vida moi sinxelas: os bichos (bugs en inglés). Estes bichos poden facer acións moi sinxelas: moverse, atacar, reproducirse, etc. O seu obxetivo é a supervivenza, polo que terán que loitar os uns cos outros.

Os bichos teñen un código (o seu ADN) onde se definen as acións que realizan. Este código debe ser programado, pero unha vez que os bichos se reproducen este código pode experimentar mutacións (eliminación de partes do código, engadidos de código aleatorio ou desordeación do código). Así pois, despois de varias xeracións de bichos, o código orixinal (o programado) e o executado por un bug poden variar moito.

Simple World Language (SWL)

O código do bicho prográmase en SWL (Simple World Language), unha especie de ensamblador. A razón pola que se programan nunha linguaxe de tan baixo nivel é porque quero que o código sexa o máis “disperso” posible, facendo que unha variación mínima del, unha mutación, non se convirta nun problema seguro.

Os bichos non executarán SWL directamente, senón que se ten que compilar (swlc, SWL Compiler) para convertilo en código obxeto (SWO, Simple World Object code). Ademais dun compilador, tamén hai un decompilador (swld, SWL Decompiler) que convirte o código obxeto en código fonte. A razón pola que se ten que compilar o SWL explicarase máis tarde.

A máquina virtual de Simple World (SWCPU)

Cada bicho dispón dunha máquina virtual (SWCPU, Simple World CPU) na que executa-lo código obxeto SWO. Esta máquina virtual é unha CPU RISC BigEndian de 32 bits con direcionamento de 16 bits (ata 64KBs). Isto impón un máximo de 16K (16 * 1024 = 16384) instrucións para o código dun bicho.

Acións dos bichos

Os bichos realizarán acións moi sinxelas. A falta de poder engadir algunha outra, polo momento as acións que poden realizar son:

  1. Non facer nada.
  2. Suicidarse.
  3. Obter información sobre si mesmo (identificador, enerxía, posición e orientación).
  4. Detectar obxetos que estexan diante súa.
  5. Moverse para adiante e atrás.
  6. Xirar á dereita e á esquerda.
  7. Coller e empuxar un obxeto para movelo.
  8. Atacar e defenderse do obxeto que teña diante.
  9. Enviar e recibir mensaxes doutros bichos.

Reprodución

Os bichos poderanse reproducir a si mesmos (reprodución asexual) ou unindo o seu código co de outros bichos (reprodución sexual). Neste momento non teño moi claro como será o proceso de reprodución. Penso que o “mundo” debería facer o menor traballo posible, deixando a un bicho facer de “nai” misturando o código dos bichos involucrados, e só causando mutacións unha vez que o código para o novo bicho se “introduza” no corpo recén creado.

As mutacións poden ser de catro tipos:

  1. Engadir unha nova instrución (32 bits) ó código que se debería crear.
  2. Eliminar unha instrución (32 bits) do código que se debería crear.
  3. Interambio na orde de dúas instrucións.
  4. Intercambio na orde dos bits dunha instrución.

É importante que o seu código sexa de baixo nivel é que tódalas instrucións teñan o mesmo tamaño. Debido a estes dous factores, haberán instrucións que non empreguen toda o tamaño da instrución (unha operación que só requira dun parámetro é indiferente ó contido dos outros parámetros), polo que se se producen mutacións nestes bits, o dano será inexistente. Estes bits que están mutados pero que non afectan ó bo funcionamento do código poden ser importantes en futuras mutacións cando o que mute en vez de os bits dun parámetro sexan os da instrución en si mesma (realizar unha opoeración que requira de tódolos parámetros en vez do único que empregaba a instrución orixinal).

Base de datos

Unha das partes que máis me interesa do proxecto é poder estudar a evolución do código dun bicho durante toda a historia do “mundo” para estuda-las mutacións que o axudaron a ter éxito. Para isto gardarase información nunha base de datos sobre as datas de nacemento e morte de cada bicho, pais, as causas da súa morte e asasino e as mutacións que se produciron na súa “concepción”. Con toda esta información poderase crear unh árbore xenealóxica con toda esta información.

Estado actual

O proxecto está en fase de plantexamento/desenvolvemento. Algunhas partes xa as teño bastante ben pensadas e outras ata implementadas.

Polo de agora xa está implementada a linguaxe ensamblador SWL, o compilador (swlc), o decompilador (swld) e a falta dos últimos retoques a máquina virtual (swcpu). Grazas a isto, xa conseguín executa-lo primeiro programa: o cálculo da lista de fibonacci.

A estructura da base de datos xa a teño deseñada e xa empecei coa implementación.

O resto aínda está por deseñar, así que calquera suxerenza ou comentario será moi ben recibido.

Datos do proxecto

Acabo de engadir o proxecto a Source Forge para ter un sitio onde ir gardando o código. En breve irei subindo o que teño feito.

  1. Licenza: GPL.
  2. Páxina web: https://sourceforge.net/projects/simpleworld/
  3. Repositorio subversion: https://simpleworld.svn.sourceforge.net/svnroot/simpleworld
  4. Lista de correo: simpleworld-list@lists.sourceforge.net

2 Responses to “O meu novo proxecto: Simple World”

  1. 1 chuza.org
  2. 2 A miña primeira vez at Cousas de xentiña

Categories

Calendario

Xaneiro 2007
M T W T F S S
« Dec   Feb »
1234567
891011121314
15161718192021
22232425262728
293031  
3K2 theme by Hakan Aydin