# Ayuda de Div Games Studio/Opciones de compilación

Estas opciones modifican la forma en que DIV interpreta un programa y el código que se genera. Normalmente no es necesario especificar ninguna opción.
Para añadir una o más de estas opciones la programa, la palabra COMPILER_OPTIONS debe especificarse como la sentencia inicial de el programa (comentarios al margen) seguido de los nombres de las opciones incluidas.
Si se incluyen varias opciones, estas deben separarse por comas, adicionalmente debe agregarse un punto y coma al final (después de la última opción).

## Opciones de compilación dispuestas
### _max_process=X

Donde X es un número positivo. Esto define el número máximo de procesos simultáneos permitidos durante la ejecución. esto puede ser establecido cuando un programa ha sido completado (y se sabe cuantos procesos pueden estar corriendo al mismo tiempo), para optimizar la memoria durante la ejecución. Cuando este valor no está definido, un mínimo de 1Mb (y un máximo de 2Mb) de memoria serán reservados por el programa.

### _extended_conditions

Te permite usar asignaciones dentro de una condición (algo como: IF(id2=get_id(...))...); está permitido por defecto en la primera versión). Puede ser necesario declarar esta opción para asegurarse que los programas escritos con DIV1 funcionen en versiones posteriores.

### _simple_conditions

Interpreta el símbolo = como una comparación cuando aparece dentro de una condición. este es el caso opuesto a la condición anterior (e incompatible con DIV1), esta opción está incluida si quieres permitir que se puedan hacer comparaciones como IF(x=0)..., en lugar de interpretarlo como una asignación del valor 0 a la variable x.

### _case_sensitive

Esta opción diferencia entre mayúsculas y minúsculas. Si esta opción está activada Abc y abc serán dos nombres diferentes. Es importante conocer que, si es activada, todas las palabras reservadas del lenguaje como (program, loop, frame, if, ...) deben ser escritos en minúsculas.

### _ignore_errors

Prohibe la aparición de mensajes de error durante la ejecución del programa. la mayoría de los errores serán ignorados (como errores de memoria, archivo no encontrado, división entre 0, etc.), no te aconsejamos que uses esta opción pero, si piensas incluirlo, entonces hazlo solo cuando el programa esté finalizado, suficientemente chequeado y sin errores conocidos, antes de crear el instalador (ver Consideraciones finales).

### _free_syntax

Permite que puedas usar sintaxis libre. Con esta opción el símbolo ; (punto y coma) el final de la sentencia ya no es necesario y los paréntesis no son requeridos en sentencias como IF, WHILE, o UNTIL. Por ejemplo, en este modo una sentencia como IF a < 0 = 0 END será válida (ver Consideraciones finales).

### _no_strfix

No finalizará automáticamente las cadenas de texto. cuando colocas un carácter en una variable de tipo STRING, normalmente el programa inserta el carácter después del final de la cadena, y agrega espacios en blanco con el carácter NULL (ascii 0) al final de la cadena. Esta opción deshabilita esta característica.

### _no_optimization

No se optimizará el código generado. Por defecto los programas son optimizados. Esta opción puede ser incluida para deshabilitar este proceso de optimización. Esto significa que si esta opción es especificada, el programa será más lento y ocupará más memoria.

### _no_range_check

No chequea que los valores accedidos fuera del rango de las tablas y estructuras. El compilador genera código para chequear durante la ejecución que esas expresiones usadas como índices de una tabla o estructura están en los límites permitidos y muestra una error cuando un valor está fuera del rango, Esta opción previene que este código sea generado.

### _no_id_check

no chequea la validez del código de identificación. El compilador genera código para chequear la validez del identificador cuando este es usado para acceder a la variable local de otro proceso (como en id2.graph). Si esta opción está especificada, este chequeo no se realizará

### _no_null_check

No chequea el acceso a punteros nulos (NULL POINTER). Esto deshabilita el chequeo de los intentos para acceder a memoria con punteros nulos o punteros no definidos. Incluyendo esta opción hace que el código que protege esos accesos de lectura o escritura en memoria no sea generado.

### _no_check

No permite ningún chequeo de seguridad. Esta opción une las tres opciones previas y prohíbe al compilador generar código para chequear cualquier tipo de operación anómala durante la ejecución. El programa correrá más rápido, pero no es recomendable usar esta opción hasta que el programa haya sido suficientemente probado y no tenga errores.

## Ejemplo de uso

Para usar estas opciones, por ejemplo, el programa debe iniciar con la siguiente sentencia:
En este caso el compilador está configurado para reservar memoria para 64 procesos simultáneos en la ejecución del programa, y no chequeará la validez del identificador de las variables locales (es muy útil deshabilitar estos chequeos, cuando el programador tiene suficiente experiencia para saber qué está haciendo).

## Consideraciones finales

* Los usuarios nuevos o con poca experiencia en programación pueden simplificar un poco las condicionales con la opción _simple_condition, entonces dos valores pueden ser comparados con el símbolo = (así como el símbolo ==). En contraste, usuarios con más experiencia, probablemente prefieran activar la opción _extended_conditions haciendo màs complejas las condicionales, con asignaciones dentro de estas.
* las opciones _ignore_error y todas las variantes de _no_check deben ser usadas solo por programadores con experiencia y solo en la versión final del programa. de otra forma no está recomendado su uso, porque se podrían producir errores importantes de ejecución y entonces será mas difícil conseguir la causa sin esos mensajes de error.
* En general, el programa ya viene optimizado(el código generado es 60% más rápido que en la versión previa), pero alguna de esas opciones pueden hacer un cambio significativo en la velocidad de ejecución. El perfil de tiempo del depurador puede ser usado para ver las repercusiones de cada opción.
* La opción _ignore_errors a menudo no es la mejor opción, siempre es mejor usar la función ignore_error para ignorar selectivamente algunos errores que se saben que ocurrirán durante la ejecución del programa.
* El uso de sintaxis libre (con _free_syntax) puede ser peligroso porque no hay diferenciación entre lineas y espacios en blanco, en algunos casos un se puede producir interpretación errónea, por ejemplo, en la sentencia IF right ++x END, el compilador interpretará que el símbolo ++ es el post incremento de right en lugar del pre incremento de x (aunque el símbolo está unido a esta última variable). Otra anomalía similar puede ocurrir usando Punteros al estilo de programación de C, por instancia, con estas dos asignaciones consecutivas a=1 *ptr=2, el compilador puede interpretarlo como a=(1*ptr)=2 (aunque estos estén en diferentes frases). Pero en general, si no estás usando incrementos o punteros al estilo de programación en C, entonces no tendrás problemas con el uso de sintaxis libre (algunos paréntesis o punto y coma pueden usarse en casos concretos para resolver estos problemas).
* La opción _max_process (el cual es la única que debe ser seguida de un símbolo = y un número) es altamente recomendada. Si se conoce el número de procesos que corren simultáneamente en el programa, entonces menos memoria necesita ser reservada (dejando esta libre para los gráficos, sonidos, etc.).