DarwinBotsManual
Abrir la app EnglishEN

El editor de ADN

La pestaña ADN de la ficha de un bot: el texto con colores y autocompletado, los avisos de lo que el motor lee distinto, la vista por genes, las versiones, Probar y el Laboratorio de genes.

El editor de ADN es la pestaña ADN de la ficha de cada bot (ver Bots: biblioteca y ficha). Ahí escribís el programa del bot, ves lo que el motor va a leer distinto de lo que parece, guardás versiones y probás cada cambio contra el anterior sin salir de la página.

Esta página explica la herramienta. Cómo se escribe un ADN está en el capítulo del lenguaje, empezando por La estructura de un bot.

Bots propios y bots del foro

Solo se editan tus bots. Los del foro (el Bestiario) se abren en modo lectura, con el aviso «Los bots del foro son de solo lectura: para cambiarlo, duplicalo como bot propio». Igual podés leerlos, recorrerlos por genes, probarlos y mirar el Laboratorio.

Para modificar uno:

  1. Tocá Duplicar para editar, arriba a la derecha.
  2. Escribí el Nombre del bot nuevo, o dejalo vacío: se llama igual con « 2» al final.
  3. Tocá Duplicar. Se abre la copia, ya editable.

La barra de arriba

De izquierda a derecha:

ControlQué es
Texto / Por genesLos dos modos de ver el ADN (texto o gen por gen).
v3La última versión guardada.
sin guardarAparece cuando el texto cambió desde esa versión.
4 avisosCuántos avisos hay abajo del texto.
LaboratorioCambia el panel de la derecha por el de genes del Bestiario.
Nota de la versión y Guardar v4Guardan el texto como versión nueva (ver Versiones).

A la derecha del texto están los paneles Probar y, en tus bots, Versiones. Con el Laboratorio encendido, ese lugar lo ocupa el panel de genes.

El modo texto

Es un campo de texto común, con números de línea y colores. Escribir, seleccionar, copiar, pegar y deshacer funcionan como en cualquier campo del navegador. Las líneas largas no se cortan: el texto se desplaza a lo ancho.

Los colores distinguen cada clase de palabra:

Una palabra que no entra en ninguna clase queda sin color: suele ser un error, y el aviso correspondiente lo dice.

Los colores siguen las reglas del cargador del motor. Por ejemplo, una línea que empieza con def se pinta como definición aunque diga defensa, porque el motor la lee así (ver Variables con def).

Deshacer

Ctrl+Z (el deshacer del navegador) deshace lo que escribiste y también lo que hacen los botones mientras estás en el modo texto: completar una sysvar, Corregir un aviso, agregar un gen del Laboratorio o restaurar una versión. Cada uno entra en el deshacer como si lo hubieras escrito. Lo que cambiás en la vista por genes (apagar o encender un gen) no entra.

Autocompletar sysvars

Cuando escribís un punto seguido de letras (.ey, o *.ey para leer), se abre una lista con hasta 12 nombres que coinciden. Cada uno muestra su dirección; tus variables de def aparecen primero y dicen privada.

La lista ordena primero el nombre exacto, después los que empiezan con lo que escribiste y al final los que lo contienen. Con .aim escrito, .aim va antes que .aimdx.

TeclaQué hace
↓ / ↑Recorren la lista.
TabAcepta el nombre elegido.
EnterTambién acepta, salvo que lo escrito ya sea un nombre completo: entonces cierra la lista y hace el salto de línea. Así, .up y Enter queda .up.
EscapeCierra la lista.

Un clic en un nombre de la lista también lo acepta. Dentro de un comentario la lista no aparece.

El autocompletado es solo para nombres con punto. Los operadores y los comandos se escriben enteros: si alguno queda mal escrito, lo marca un aviso.

Los avisos

El motor no rechaza casi nada: una palabra que no entiende vale 0, en silencio, y el bot carga igual (ver Errores frecuentes). Por eso el editor revisa el texto mientras escribís, con las mismas reglas y las mismas tablas de palabras que usa el motor al cargar un bot, y te muestra abajo del texto cada palabra que el motor va a leer distinto de lo que parece.

Cada aviso tiene tres partes:

La revisión espera a que dejes de escribir un momento. Si el motor no pudo cargar, el editor lo dice («El control del ADN no está disponible») y no hay avisos.

Estos son todos los avisos, con un ejemplo de cada uno:

EjemploAvisoQué significa
.upp«.upp no es un sysvar: el motor lo lee como 0. ¿Quisiste decir .up?»Un nombre con punto que no existe, parecido a una sysvar. Corregir pone el nombre sugerido.
.zzqq«.zzqq no es un sysvar ni tiene def: el motor lo lee como 0.»Un nombre con punto que no se parece a nada.
.50«.50 no es un sysvar […]. ¿Quisiste decir la dirección 50? Las direcciones van sin punto.»Un número con punto. Corregir saca el punto (*.50 pasa a *50).
.otra, con su def más abajo«.otra se define más abajo: el motor lee el ADN en orden y acá vale 0. Subí el def.»El motor resuelve los nombres mientras lee: un def posterior no sirve. Ver Variables con def.
.Paso, con def paso«.Paso no coincide con su def: las variables privadas distinguen mayúsculas y acá vale 0.»Las sysvars no distinguen mayúsculas; tus variables sí.
up«up vale 0: ¿falta el punto? .up»El nombre de una sysvar sin punto. Corregir se lo agrega.
swapp«swapp no es un comando ni un número: vale 0. ¿Quisiste decir swap?»Una palabra a una letra de un comando (solo para palabras de 4 letras o más).
hola«hola no es un comando ni un número: vale 0 (¿texto sin la marca de comentario ')?»Cualquier otra palabra suelta. Muchas veces es un comentario sin su '.
store con un carácter invisible en el medio«… tiene un carácter invisible: no se reconoce como store y vale 0.»Pasa al copiar de páginas web o procesadores de texto. Corregir lo limpia.
ññ«… tiene caracteres invisibles o de otra codificación: vale 0.»Letras fuera del inglés básico, o una codificación rota.
50store«50store se lee como 50: «store» se pierde (¿falta un espacio?).»Un número con algo pegado. El motor toma el número y descarta el resto. Corregir inserta el espacio.
def nrg 5«La variable privada nrg tapa al sysvar .nrg en todo el bot.»Una variable con el nombre de una sysvar le gana en todo el ADN. Ver Variables con def.
defensa 50«Toda línea que empieza con «def» es una definición: defensa define la variable nsa. […]»El motor lee como def cualquier línea que empiece con esas letras. Si era texto, falta la '.
def x .up«El valor de un def tiene que ser un número: en def x, «.up» vale 0.»El valor de un def se escribe con cifras. Ver Variables con def.
ADN con def que empieza con 10«Con def, la primera palabra (10) no es de control de flujo y se pierde.»Una rareza heredada del original. Ver La estructura de un bot.
40000, o def pasos sin valor«El motor rechaza este ADN (error 6: un número fuera de ±32767 o un def mal formado).»El único caso en que el bot no carga. Ver La estructura de un bot.

Este ADN junta varios de esos errores:

def paso 30
cond
*.nrgg 100 >
start
.paso .up store
30 .upp store
30 up store
10 50store
stop
end

El editor marca *.nrgg (sugiere *.nrg), .upp (sugiere .up), up (falta el punto) y 50store (falta un espacio). Corregido:

def paso 30
cond
*.nrg 100 >
start
.paso .up store
30 .up store
30 .up store
10 50 store
stop
end

Debajo de los avisos del motor aparecen los del Laboratorio, que se explican en su sección.

La vista por genes

Por genes muestra el ADN como una tabla, un renglón por gen:

ColumnaQué muestra
GenEl número del gen, contado como lo cuenta el motor (ver Genes: cond, start, else y stop).
NombreLa línea de comentario que está justo arriba del gen, si hay una. Si no, «(sin nombre)».
OrigenDe dónde salió el gen, si vino del Laboratorio: «← Nombre del bot, gen 4».
Activosí o no. Un clic lo cambia.

Cada gen se despliega para ver su código, y un botón arriba pliega o despliega todos. Los genes con avisos llevan una marca con la cantidad.

Apagar un gen lo convierte en comentario: cada una de sus líneas empieza con '#off . El motor no lo ejecuta, pero queda en el texto y se vuelve a encender con un clic. Sirve para probar qué pasa sin un gen sin tener que borrarlo:

' Avanza
cond
start
10 .up store
stop
' Gira
'#off cond
'#off *.eye5 0 =
'#off start
'#off 30 .aimdx store
'#off stop
end

Acá el gen «Gira» está apagado: el bot solo avanza.

Guardar versiones

Tus bots guardan su historia completa. Para guardar:

  1. Si querés, escribí una Nota de la versión («gira más rápido», «sin el gen de disparo»).
  2. Tocá Guardar v4 (el número es el de la versión que se va a crear).

La versión guarda el texto exacto: un cambio en un comentario o en la sangría también es un cambio. Si no tocaste nada, la app no crea otra versión y te lo dice.

Lo que no guardaste no se pierde

Mientras escribís, el editor guarda un borrador del bot en este navegador. Si cambiás de pestaña, elegís otro bot o recargás la página, al volver encontrás tus cambios con el aviso «Tenés cambios sin guardar de la última vez: se recuperaron», y un botón Descartar los cambios por si no los querés.

Si mientras tanto el bot cambió por otro lado (por ejemplo, restauraste una versión desde la ficha), el editor no mezcla nada: te ofrece Recuperar los cambios o Descartar los cambios. Y si intentás cerrar la página con cambios sin guardar, el navegador te pide confirmación.

El panel Versiones

El panel de la derecha lista las versiones, de la más nueva a la más vieja, con su nota y su fecha:

Probar

Probar corre tu bot sin dibujarlo, a toda velocidad, y te dice cómo le fue. Si tiene una versión anterior, la corre también con las mismas semillas, para que la comparación sea justa.

CampoQué esPor defecto
CopiasCuántos bots iguales se siembran (de 1 a 50).10
CiclosCuánto dura cada corrida (de 10 a 200.000).5000
SemillasCuántas corridas, cada una con otro azar (de 1 a 16).3
ReglasF1: los ajustes de la liga F1, con costos. Sin costos: los valores con que arranca la interfaz clásica.F1
SemillaLa primera semilla; las demás salen de ella. Con la misma, la prueba da lo mismo.1
EscenarioCon algas: 15 algas para comer. Solo (sin algas): tus copias solas.Con algas

El botón dice qué se prueba y contra qué:

La prueba corre en segundo plano: podés seguir editando, cambiar de bot o cerrar el editor, y sigue avanzando. Mientras corre se ve el porcentaje y un botón Cancelar. Al terminar, el panel muestra una tabla con las dos versiones lado a lado, promediadas sobre las semillas:

FilaQué mide
SobrevivenCuántas de las copias del principio siguen vivas al final.
Hijos por copiaHijos directos de cada copia fundadora, en promedio (sin nietos).
Nacidos por copia (con nietos)Todos los nacidos de la especie, divididos por las copias.
Vivos al finalEl tamaño de la población al terminar.
Energía mediaLa energía por bot vivo al terminar.
ExtincionesEn cuántas semillas la especie desapareció.

Cada prueba queda anotada en el historial del bot.

El Laboratorio

El Laboratorio sirve para armar un bot con genes de otros. Al encenderlo, el panel de la derecha pasa a Genes del Bestiario, con los genes de todos los bots del foro.

Hay dos formas de buscar:

solo autónomos deja solo los genes que no usan memoria propia: se pueden trasplantar sin arrastrar dependencias ni pisar direcciones de otros.

Cada gen de la lista dice de qué bot es, cuántas palabras tiene, si usa memoria propia y qué capacidades aporta. Un clic en el gen muestra su código debajo de la lista; el botón + lo agrega al final de tu ADN. El gen recuerda de dónde vino: lo ves en la columna Origen de la vista por genes y queda guardado con cada versión.

Los avisos del Laboratorio

Juntar genes de bots distintos tiene trampas, y el Laboratorio las avisa debajo del texto, con un arreglo de un clic cuando lo hay:

AvisoQué pasaArreglo
«El gen 3 (de X) lee la dirección 52, que en su bot escribe el gen 1.»El gen depende de un dato que en su bot original preparaba otro gen.+ gen 1: agrega el gen que falta.
«La dirección 60 la usan X, Y para cosas distintas […].»Dos genes de bots distintos usan la misma celda de memoria para cosas diferentes.Remapear direcciones: pasa las de los genes siguientes a direcciones libres, empezando por 971-990.
«El gen 2 (de X) usa números de gen literales en .delgene/.mkvirus que ya no apuntan a los genes de su bot.»Al cambiar de lugar, los números de gen escritos a mano apuntan a otro gen (ver .delgene y .mkvirus).Renumerar, o agregar los genes que faltan.
«Ningún gen reproduce: el bot no va a dejar hijos.»Informativo.—
«Ningún gen consigue energía (ni caza ni fotosíntesis).»Informativo.—

Los dos últimos solo aparecen cuando todo el ADN viene del Bestiario: de los genes que escribiste vos, el Laboratorio no sabe qué capacidades tienen.

En un bot del foro el Laboratorio se puede recorrer, pero + está apagado y los arreglos no aparecen: primero hay que duplicarlo.