Autor Tema: [SAMPLE] Uso de rutinas locales  (Leído 2253 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12477
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
[SAMPLE] Uso de rutinas locales
« en: Marzo 13, 2016, 07:57:01 pm »
Hace tiempo, mucho tiempo... implemente los CALL, GOTO, etc... intente buscar un ejemplo, pero no encontre... asi que aca pongo uno

Código: [Seleccionar]
import "mod_say";

global
    int a, i;

begin
    a = 1;
    say(a);

    for (i = 0; i < 10; i++)
        call inc_a;
        say(a);
    end
    return;

inc_a:
    a = a + 1 ;
    return;

end

Beneficios de esto? son mucho mas rapidas que las funciones normales, consumen menos memoria, comparten las variables del proceso (en algunos casos puede ser ventaja y en otros desventajas)... y quizas otras mas que no se me ocurren...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado warrior_rockk

  • Full Member
  • ***
  • Mensajes: 227
  • Karma: 8
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #1 en: Marzo 14, 2016, 03:42:35 am »
Entiendo que sin el primer return ejecutaría la línea de inc_a: por ser una especie de label ¿cierto?

Desconectado Drumpi

  • Hero Member
  • *****
  • Mensajes: 6107
  • Karma: 156
  • Sexo: Masculino
  • Odio el periodo "entre proyectos"
    • Ver Perfil
    • La web de Drumpi
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #2 en: Marzo 14, 2016, 08:40:57 am »
Anda, pues eso viene mejor que lo que hice con el motor de scroll tileado: coger el trozo de código que se repite, escribirlo en un fichero aparte, y poner una línea "include" donde debería ir esa "función" :D
¿Por casualidad recuerdas más o menos la versión en la que se implementó?

Por cierto, en Fenix se implementaron las "corutinas" (o las "rutinas", no recuerdo el nombre exacto, y seguro que lo ando confundiendo con alguno de C#). Se escribían como las funciones, pero si el compilador detectaba que no se usaban variables locales (y creo que globales), se almacenaba como corrutina, que es una función con menos carga a la hora de generarse en memoria y de ejecución más rápida. No sé si eso se trasladó a BennuGD.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12477
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #3 en: Marzo 18, 2016, 10:27:41 am »
Entiendo que sin el primer return ejecutaría la línea de inc_a: por ser una especie de label ¿cierto?

cierto
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12477
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #4 en: Marzo 18, 2016, 10:29:31 am »
Anda, pues eso viene mejor que lo que hice con el motor de scroll tileado: coger el trozo de código que se repite, escribirlo en un fichero aparte, y poner una línea "include" donde debería ir esa "función" :D
¿Por casualidad recuerdas más o menos la versión en la que se implementó?

Por cierto, en Fenix se implementaron las "corutinas" (o las "rutinas", no recuerdo el nombre exacto, y seguro que lo ando confundiendo con alguno de C#). Se escribían como las funciones, pero si el compilador detectaba que no se usaban variables locales (y creo que globales), se almacenaba como corrutina, que es una función con menos carga a la hora de generarse en memoria y de ejecución más rápida. No sé si eso se trasladó a BennuGD.

hace mucho se implemento.

las "corutinas" que dices, son procesos que se comportan como funcion... sigue igual, pero sigue siendo pesado...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado JaViS

  • Global Moderator
  • Hero Member
  • *****
  • Mensajes: 1137
  • Karma: 19
  • Sexo: Masculino
    • Ver Perfil
    • Anarkade
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #5 en: Marzo 28, 2016, 04:33:59 pm »
se pueden parametrizar?
Working on Anarkade. A couch multiplayer 2D shooter.

Conectado warrior_rockk

  • Full Member
  • ***
  • Mensajes: 227
  • Karma: 8
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #6 en: Marzo 29, 2016, 01:45:12 am »
Me temo que al ser un salto a etiqueta con retorno, no puedes parametrizarlo. Puedes crearte variables globales como parametros e iniciarlos con valores antes de llamar a la rutina...

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12477
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #7 en: Marzo 29, 2016, 04:27:44 am »
no es necesario crear variables globales, siendo parte del mismo proceso que las llama, estas "rutinas" tienen acceso a las mismas variables del proceso "llamador", asi que directamente lees/tocas las variables que le ibas a pasar por parametro.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado JaViS

  • Global Moderator
  • Hero Member
  • *****
  • Mensajes: 1137
  • Karma: 19
  • Sexo: Masculino
    • Ver Perfil
    • Anarkade
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #8 en: Marzo 29, 2016, 05:55:29 am »
mmm, entiendo, buena idea. Voy a ver si puedo implementarlo en el motor de durezas para ver si mejora el rendimiento.


Splinter, vos que conoces bien Bennu, vos crees que eliminando un par de llamadas a funciones usando CALL en cada frame, deberia haber una mejora en el rendimiento ?
Working on Anarkade. A couch multiplayer 2D shooter.

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12477
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #9 en: Marzo 29, 2016, 07:24:02 am »
mmm, entiendo, buena idea. Voy a ver si puedo implementarlo en el motor de durezas para ver si mejora el rendimiento.


Splinter, vos que conoces bien Bennu, vos crees que eliminando un par de llamadas a funciones usando CALL en cada frame, deberia haber una mejora en el rendimiento ?

deberia... a menos que el cuello de botella este en el render... (puede pasar...)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado warrior_rockk

  • Full Member
  • ***
  • Mensajes: 227
  • Karma: 8
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #10 en: Marzo 29, 2016, 08:04:27 am »
no es necesario crear variables globales, siendo parte del mismo proceso que las llama, estas "rutinas" tienen acceso a las mismas variables del proceso "llamador", asi que directamente lees/tocas las variables que le ibas a pasar por parametro.


Pero, entiendo que, la utilidad de esto es llamar a esas rutinas desde otros procesos. En ese caso, ¿se comporta como una extensión de código del proceso que las llama? Con lo que, ¿puedes acceder a las variables del proceso que realiza el salto?

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12477
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #11 en: Marzo 29, 2016, 08:45:55 am »
no, son dentro del mismo proceso.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado warrior_rockk

  • Full Member
  • ***
  • Mensajes: 227
  • Karma: 8
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #12 en: Marzo 29, 2016, 11:19:19 pm »
mmm quizás no lo entendí bien.. Si sólo lo puedes usar dentro del mismo proceso, entonces no se comporta como una alternativa a usar funciones ya que, simplemente es código añadido a un proceso. ¿que utilidad tiene entonces?

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12477
  • Karma: 367
  • Sexo: Masculino
    • Ver Perfil
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #13 en: Marzo 30, 2016, 04:00:26 am »
que la puedes llamar desde muchas partes del mismo proceso, al igual que una funcion... si lo ves asi, una funcion tambien es codigo añadido a un fuente... lo unico que varia es el scope (y los parametros, claro esta)...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado Drumpi

  • Hero Member
  • *****
  • Mensajes: 6107
  • Karma: 156
  • Sexo: Masculino
  • Odio el periodo "entre proyectos"
    • Ver Perfil
    • La web de Drumpi
Re:[SAMPLE] Uso de rutinas locales
« Respuesta #14 en: Marzo 30, 2016, 10:12:10 am »
Es como si cogieras e hicieras un copy/paste de un trozo del proceso que se va a repetir. Según las normas de estilo, eso está mal, porque para eso se crearon las funciones, pero como crear una función tiene un coste de computación (reservar espacio, crear variables, copiar datos, destruir la función...) se supone que esto es más rápido.
A mi, en mi caso particular, no he obtenido una mejora visible (aunque tampoco he podido hacer una medición objetiva), y quizás sea más conveniente probar lo que me recomendaba Splinter de usar #define... u otra aproximación diferente al algoritmo.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)