import "mod_file";
import "mod_grproc";
import "mod_key";
import "mod_map";
import "mod_math";
import "mod_mouse";
import "mod_path";
import "mod_proc";
import "mod_rand";
import "mod_say";
import "mod_screen";
import "mod_scroll";
import "mod_sound";
import "mod_sort";
import "mod_string";
import "mod_sys";
import "mod_text";
import "mod_time";
import "mod_timers";
import "mod_video";
import "mod_wm";
import "mod_regex";
Global
int _button;
int _start;
int _select;
int _difficulty;
int _reset;
int puntos;
int dificultad;
Player1 idPlayer1;
int idPlayer2;
int idMisile1;
int idMisile2;
int idBall;
End
Begin
_button = _space;
_start = _enter;
_select = _s;
_reset = _r;
_difficulty = _d;
scale_resolution = 06400480;
set_mode(160,120);
set_fps(60,0);
dificultad = 3;
set_fps(30 +dificultad*4 ,0);
idPlayer1 = Player1(1,28);
idPlayer1.direccion = 1;
while (!key(_esc))
frame;
end
let_me_alone();
End
process Player1(x,y)
public
direccion;
begin
while (!key(_esc))
frame;
end
end
Intento compilar esto con bgdc -Ca testautodeclare.prg y me dice que no está definido "direccion"
testautodeclare.prg:53: error: Unknown identifier ( token error: "DIRECCION" ).
Con la versión de hace dos años de bennu esto no pasaba.
NOTA: si hago el declare de player1 se arregla, lo que yo quiero es evitar tener que hacer los declares, que para eso estaba esta opción del compilador antes . :'(
No sé si estoy en lo cierto, pero creo que desde siempre, las variables públicas han exigido seguir el orden habitual de los lenguajes de programación normales, o en su defecto, usar declare. Ya se dijo en otro hilo que la opción -Ca venía activada por defecto.
Pues desde siempre -Ca fue para que hiciera él los declares automáticamente (y olvidarte de estar ordenando procesos). y pudieras usar las variables de los procesos antes de definirlos.
Tal cual puse el ejemplo debería de ir con -Ca
Además si miras aún la ayuda de la consola de bgdc dice justo eso:
-C options Specify compiler options
Where options are:
a Enable automatic declare functions
Vamos puede que haya cambiado la cosa, pero yo lo usaba para eso antes :D
splinter, need your help.
Yo se que pixtudio contiene sus bat que añaden esta opción de compilación -Ca
Me fije y lo deje sin tocar, en mis códigos no necesito declarar antes las funciones y cosas raras (cosas que no se hacen en lenguaje div).
Lo único en bennugd es que debemos declarar las includes de los mod_<lo que sea> para que nos reconozca las funciones y variables de dicho modulo.
Siento no poderte ayudar en esto. Me da miedo tocar los bats, para no liarla.
El problema radica en que quieres acceder a una variable publica con un identificador entero.
tendrias que cambiar el tipo de dato a lo siguiente:
int id_player ( cambia esto )
Player1 id_player ( por esto )
Ademas debes asegurarte que el proceso Player1() haya sido declarado antes de que uses el tipo de dato Player1.
Espero te sirva.
[quote]
Player1 id_player ( por esto )
[/quote]
;D Justo eso hago, ni leíste el código.
[quote]
Ademas debes asegurarte que el proceso Player1() haya sido declarado antes de que uses el tipo de dato Player1.
[/quote]
;D , otra vez. Veo que no sabes que justo para no necesitar hacer eso se usa el comando "-Ca"
Bueno, se usaba porque parece ser que no va ahora.
[quote]
Espero te sirva.
[/quote]
Gracias por el intento, pero arreglarlo sí se, si lees bien y detenidamente el mensaje verás que pongo cómo se arregla.
El tema no va de que compile o no el código si no de por qué no va el comando "-Ca" y de si ha cambiado y ahora se usa de otra forma o es otro comando el que se usa para evitar los declares de los procesos y/o el orden de éstos
El código correcto para arreglarlo sin usar el comando mágico -Ca (que repito que no va este comando) es
[code ]
import "mod_file";
import "mod_grproc";
import "mod_key";
import "mod_map";
import "mod_math";
import "mod_mouse";
import "mod_path";
import "mod_proc";
import "mod_rand";
import "mod_say";
import "mod_screen";
import "mod_scroll";
import "mod_sound";
import "mod_sort";
import "mod_string";
import "mod_sys";
import "mod_text";
import "mod_time";
import "mod_timers";
import "mod_video";
import "mod_wm";
import "mod_regex";
Global
int _button;
int _start;
int _select;
int _difficulty;
int _reset;
int puntos;
int dificultad;
Player1 idPlayer1;
int idPlayer2;
int idMisile1;
int idMisile2;
int idBall;
End
declare process Player1(x,y)
public
int direccion;
end
end
Begin
_button = _space;
_start = _enter;
_select = _s;
_reset = _r;
_difficulty = _d;
scale_resolution = 06400480;
set_mode(160,120);
set_fps(60,0);
dificultad = 3;
set_fps(30 +dificultad*4 ,0);
idPlayer1 = Player1(1,28);
idPlayer1.direccion = 1;
while (!key(_esc))
frame;
end
let_me_alone();
End
process Player1(x,y)
begin
while (!key(_esc))
frame;
end
end
Los "declares" de los procedimentos despues de las variables globales solucionan el problema de tener que ordenar los procedimientos por uso.
Y, supuestamente, "-Ca" los hace por tí.
Quote from: DCelso on November 12, 2016, 09:02:21 AM
a Enable automatic declare "functions"
FUNCIONES! :)
no sus variables, si necesitas acceder a variables publicas lo tenes que declarar...
Quote from: SplinterGU on November 13, 2016, 03:32:38 AM
Quote from: DCelso on November 12, 2016, 09:02:21 AM
a Enable automatic declare "functions"
FUNCIONES! :)
no sus variables, si necesitas acceder a variables publicas lo tenes que declarar...
Es cierto lo leei de aquí,
http://forum.bennugd.org/index.php?topic=53.msg479#msg479
Ahh. Ok
Todo aclarado.
Gracias. Maese splinter. Que haríamos sin ti.
Ahora, me parece una gran sugerencia :)
Quote from: panreyes on November 13, 2016, 05:38:38 PM
Ahora, me parece una gran sugerencia :)
cual seria exactamente la sugerencia?
"-Caa" una a mas para "autodeclare function and public variables"
Quote from: DCelso on November 14, 2016, 07:58:09 AM
"-Caa" una a mas para "autodeclare function and public variables"
el tema de las publicas es algo mas complejo, se necesita saber el tipo, si son publicas (pertencen a un solo proceso), o locales (generales) que aun no se declaran, nunca las variables son autodeclaradas, ni siquiera las globales, se necesita declarar...
incluso las funciones deberian ser obligatorias declararlas, o escribirlas antes de su uso.
Una opción de preparseo que buscase todos los procesos declarados y sus variables públicas y creara sus declaraciones antes de compilar sería bastante útil. No se sí será dificil al mismo algoritmo "-Ca" que ahora busca todos los procesos que hay meterle que también saque su variables públicas a la vez que el nombre del proceso. Ahora la información de tipo y variables públicas está en la implementación del proceso.
process nombreproceso
public
variables publicas.
begin
lo que sea.
end
por lo tanto ahí tienes el nombre de las variables publicas y su tipo.
DCelso, amigo mío, te estás malacostumbrando demasiado a Java :D Te estás volviendo vago ¡recuerda tus raices! Vuelve al lado puro de la programación en C :D
Ya en serio, si tanto te molesta tener que declarar las variables públicas ¡no lo hagas! Yo no suelo usarlas porque entre que las tienes que declarar, tienes que usar un tipo específico con ellas, tienes que mantener un orden en su declaración (y ojo con las referencias cruzadas) y que teóricamente son de acceso más lento, prefiero gastar una variable global con ello, o tratar con punteros en los parámetros (y créeme, he testeado bastante a fondo todo el sistema de punteros de Bennu, revisa el código del Tilemap Editor si tienes narices :D ).
No digo que no se usen, eso ya va con el estilo de cada uno, y el mío es no usarlas. Pero esto es Bennu, cada lenguaje tiene sus particularidades y hay que lidiar con ellas. A mi no me gusta el recolector de basuras de Java, pero trabajar con punteros sería una pesadilla, y he leido que el lenguaje es más eficiente usándolo que si andas controlándolo todo manualmente.
Quote from: DCelso on November 14, 2016, 08:14:20 PM
Una opción de preparseo que buscase todos los procesos declarados y sus variables públicas y creara sus declaraciones antes de compilar sería bastante útil. No se sí será dificil al mismo algoritmo "-Ca" que ahora busca todos los procesos que hay meterle que también saque su variables públicas a la vez que el nombre del proceso. Ahora la información de tipo y variables públicas está en la implementación del proceso.
process nombreproceso
public
variables publicas.
begin
lo que sea.
end
por lo tanto ahí tienes el nombre de las variables publicas y su tipo.
no, no es asi, ahora mismo no busca los procesos y los declara, los declara en base a su uso... por ejemplo...
vos tenes esto en tu codigo...
...
pid = proceso1( param1, param2, param3 ); // en este punto se declara el proceso en base a los tipos de datos que se estan usando
...
donde:
param1 es variable tipo string
param2 es variable tipo int
param3 es variable tipo float
ahora luego escribis el proceso asi:
process proceso1( int param1, float param2, int param3 )
begin
...
end
el proceso en cuestion, en este caso se declaro en el motor y en el dcb asi
process proceso1( string param1, int param2, float param3 )
...
esto fuerza en que todos los parametros que entran a la funcion sean convertidos (a la fuerza) en los tipos esperados realmente por la funcion... con lo que no solo hay perdida de performance, sino que tambien hay consumo extra de memoria, y posible perdidas de datos, incluso puede dar errores de compilacion de tipo de parametro invalido, segun los datos usados.
y me olvidaba, incluso el retorno puede ser de diferente tipo al de la funcion real... y esto pasa por no declarar las funciones/procesos anteriormente a su uso, y declararlas automaticamente....
Quote from: Drumpi on November 15, 2016, 01:59:57 AM
DCelso, amigo mío, te estás malacostumbrando demasiado a Java :D Te estás volviendo vago ¡recuerda tus raices! Vuelve al lado puro de la programación en C :D
Ya en serio, si tanto te molesta tener que declarar las variables públicas ¡no lo hagas! Yo no suelo usarlas porque entre que las tienes que declarar, tienes que usar un tipo específico con ellas, tienes que mantener un orden en su declaración (y ojo con las referencias cruzadas) y que teóricamente son de acceso más lento, prefiero gastar una variable global con ello, o tratar con punteros en los parámetros (y créeme, he testeado bastante a fondo todo el sistema de punteros de Bennu, revisa el código del Tilemap Editor si tienes narices :D ).
No digo que no se usen, eso ya va con el estilo de cada uno, y el mío es no usarlas. Pero esto es Bennu, cada lenguaje tiene sus particularidades y hay que lidiar con ellas. A mi no me gusta el recolector de basuras de Java, pero trabajar con punteros sería una pesadilla, y he leido que el lenguaje es más eficiente usándolo que si andas controlándolo todo manualmente.
muy bien drumpi!
con respecto a las globales vs locales vs publicas, no deberia haber una diferencia de rendimiento notable...
:o . ok
¿Entonces es recomendable declarar los procesos y funciones para ganar rendimiento? ¿O basta con escribir el proceso antes de su uso? Porque declares no uso, pero ordenar los procesos (o sea, sus includes) sí que lo hago, sí :D
Quote from: SplinterGU on November 15, 2016, 03:32:53 AM
Quote from: Drumpi on November 15, 2016, 01:59:57 AM
DCelso, amigo mío, te estás malacostumbrando demasiado a Java :D Te estás volviendo vago ¡recuerda tus raices! Vuelve al lado puro de la programación en C :D
Ya en serio, si tanto te molesta tener que declarar las variables públicas ¡no lo hagas! Yo no suelo usarlas porque entre que las tienes que declarar, tienes que usar un tipo específico con ellas, tienes que mantener un orden en su declaración (y ojo con las referencias cruzadas) y que teóricamente son de acceso más lento, prefiero gastar una variable global con ello, o tratar con punteros en los parámetros (y créeme, he testeado bastante a fondo todo el sistema de punteros de Bennu, revisa el código del Tilemap Editor si tienes narices :D ).
No digo que no se usen, eso ya va con el estilo de cada uno, y el mío es no usarlas. Pero esto es Bennu, cada lenguaje tiene sus particularidades y hay que lidiar con ellas. A mi no me gusta el recolector de basuras de Java, pero trabajar con punteros sería una pesadilla, y he leido que el lenguaje es más eficiente usándolo que si andas controlándolo todo manualmente.
muy bien drumpi!
con respecto a las globales vs locales vs publicas, no deberia haber una diferencia de rendimiento notable...
Y sin embargo hace unos años me hablaste de una prueba de Pixel o Josebita o yo que se quien, que notó que el acceso a locales era el doble de lento o más que el acceso a variables privadas... o globales, no recuerdo. Sé que surgió con motivo del motor de scroll tileado...
:P
Quote from: Drumpi on November 15, 2016, 08:09:40 PM
¿Entonces es recomendable declarar los procesos y funciones para ganar rendimiento? ¿O basta con escribir el proceso antes de su uso? Porque declares no uso, pero ordenar los procesos (o sea, sus includes) sí que lo hago, sí :D
Quote from: SplinterGU on November 15, 2016, 03:32:53 AM
Quote from: Drumpi on November 15, 2016, 01:59:57 AM
DCelso, amigo mío, te estás malacostumbrando demasiado a Java :D Te estás volviendo vago ¡recuerda tus raices! Vuelve al lado puro de la programación en C :D
Ya en serio, si tanto te molesta tener que declarar las variables públicas ¡no lo hagas! Yo no suelo usarlas porque entre que las tienes que declarar, tienes que usar un tipo específico con ellas, tienes que mantener un orden en su declaración (y ojo con las referencias cruzadas) y que teóricamente son de acceso más lento, prefiero gastar una variable global con ello, o tratar con punteros en los parámetros (y créeme, he testeado bastante a fondo todo el sistema de punteros de Bennu, revisa el código del Tilemap Editor si tienes narices :D ).
No digo que no se usen, eso ya va con el estilo de cada uno, y el mío es no usarlas. Pero esto es Bennu, cada lenguaje tiene sus particularidades y hay que lidiar con ellas. A mi no me gusta el recolector de basuras de Java, pero trabajar con punteros sería una pesadilla, y he leido que el lenguaje es más eficiente usándolo que si andas controlándolo todo manualmente.
muy bien drumpi!
con respecto a las globales vs locales vs publicas, no deberia haber una diferencia de rendimiento notable...
Y sin embargo hace unos años me hablaste de una prueba de Pixel o Josebita o yo que se quien, que notó que el acceso a locales era el doble de lento o más que el acceso a variables privadas... o globales, no recuerdo. Sé que surgió con motivo del motor de scroll tileado...
:P
con escribirlas antes esta bien...
si te dije eso no lo recuerdo, es posible, aunque me suena que no deberia ser tan lento... tengo que revisarlo...