Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Scripts de LUA

Iniciado por bnl, 19 de Julio de 2006, 02:46:58 PM

« anterior - próximo »

bnl

Estoy echandole un vistazo a LUA en .NET. Me parece un tema muy interesante, pero he visto una cosa que no me ha gustado mucho.

Segun parece desde el código de .NET puedes registrar las funciones y tipos que quieres que se puedan llamar desde un script. Correcto
Lo que no me gusta mucho es que desde el script de LUA se puedan acceder a tipos de la biblioteca de clases sin haberlo registrado desde el código .NET.

En el script te podrian meter algun código que accediendo a clases del framework te hiciera alguna gran faena. ¿que os parece?
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

bnl

Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

vincent

Si trabajas en .Net no es más fácil utilizar el propio C# como lenguaje de script?

Creo que hay algun ejemplo en el SDK de DirectX
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Lex


TheAzazel

jejeje, veo que he hecho bien al aparcar esas movidas....

me pierdo el aprender como va pero parece que lo gano en salud :P

bnl

Si, hace tiempo vi una instruccion que lo que hacia era ejecutar una cadena que contenia codigo.
No recuerdo cual era exactamente, creo q era eval, evaluate o algo asi. Vivent ¿Sabes cual era? ¿Te referias a eso?

El problema de que pudieran ejecutar lo que les diera la gana desde el script se mantendria.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

bnl

Lex, en .NET parece que ni siquiera hace falta registrar las funciones si forman parte de un objeto. Que es justo lo que a mi no me gusta.

Registrar una funcion es bastante sencillo. De todas formas estoy empezando a ver LUA y no he hecho nada serio. No he tenido tiempo para encontrarme con muchos problemas ni quebraderos de cabeza
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

Vicente

Como dice vincent lo mejor en .NET yo creo que es usar el propio C# como lenguaje de script (System.Codedom, System.Reflection.Emit,...). Si quisieras usar otro, yo creo que me decantaría por IronPython (Python.NET)
Un saludo!

Vicente

[EX3]

Cita de: "Vicente"Como dice vincent lo mejor en .NET yo creo que es usar el propio C# como lenguaje de script (System.Codedom, System.Reflection.Emit,...)
Esto me lo estuvo comentando Haddd en la kdd de la Imagine Cup ya que le saque el tema de scripts en .NET. Pero una duda, el codigo que cargas mediante la clase Reflection no deja a la vista el resto de clases y objetos de .NET?

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Diferencial

Buenas a todos,
Despues de hecharle un vistazo a lua y a otros interpretes, al final me decidi por hacer el mio propio. Creo que con las facilidades que viene con .net hacerse un pequeño parser, paras tus principales funciones y objetos es bastante simple. No creo que puedan hacer nada usando tu propio lenguaje, ya que eres tu el que decides que funciones quieres que se puedan usar desde fuera, con la ventaja de que pones tu las restricciones. La idea de usar
C# como propio lenguaje script me parece peligroso.
PARA TENER COSAS QUE NUNCA HAS TENIDO, TENDRÁS QUE HACER COSAS QUE NUNCA HAS HECHO.

Vicente

Cita de: "[EX3"]
Cita de: "Vicente"Como dice vincent lo mejor en .NET yo creo que es usar el propio C# como lenguaje de script (System.Codedom, System.Reflection.Emit,...)
Esto me lo estuvo comentando Haddd en la kdd de la Imagine Cup ya que le saque el tema de scripts en .NET. Pero una duda, el codigo que cargas mediante la clase Reflection no deja a la vista el resto de clases y objetos de .NET?

Salu2...

Te refieres a que el código que cargas por reflexión no se ve desde otras partes de tu código normal?

Un saludo!

Vicente

bnl

Si, a mi tambien me parece peligroso usar C# como script y lo mismo utilizar LUA ya que parece que permite llamar a clases del framework sin que previamente haya que registrar las funciones. Supongo que lo que haré será lo que comentas de crearme mi propio lenguaje de script.

Pero me surgen algunas dudas.

¿como almacenas las variables del script en .NET?

¿Para evaluar expresiones del tipo  ((X+3) > 4) && (Y * 3 != 33) como lo hariais? Supongo que habria que currarse un analizador lexico y sintactico y eso no seria tan sencillo, aunque si muy interesante.
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

Diferencial

Aqui tienes un pequeño analizador lexico, de aqui saque mis propias ideas.

//http://www.picdev.com.ar/lexicografico.php?menu=4&title=Lexicogr%E1fico

Para guardar las variables usa una lista en c#, cuando necesites sacar un valor lo puedes hacer, como ejemplo, lista.find("Nombre"). Yo enfoque el tema a relación del motor haddd, es decir, me cree algunas funciones, por ejemplo puse una funcion que es Carga y le paso un string con el nombre del objeto a cargar.


    Tienes que crear tanto delegados como funciones quieras usar.
    delegate bool Carga(string arg);

    struct Token
       {
           public string name;
           public Carga miFunc;
       }
     Token testToken = new Token();
     testToken.name = "Carga" <== Esta es la palabra reservada que usaras en tu script.
    testToken.miFunc = Haddd.scene.import; <== La funcion que llamaras.
  While(Aqui vas leyendo linea a linea tu script)
 {
       exec(linea);
 }

funcion de exec:

string[] argumentos;

argumentos = line.Split(char.Parse(" ")); <== Usas el separador como tu quieras "="

if (argumentos[0] == testToken.name)
               {
testToken.miFunc(argmentos[1]);
<== Aqui se ejecutaria esto : haddd.scene.import(argumentos[1]);
               }
PARA TENER COSAS QUE NUNCA HAS TENIDO, TENDRÁS QUE HACER COSAS QUE NUNCA HAS HECHO.

Vicente

Cita de: "Diferencial"Buenas a todos,
Despues de hecharle un vistazo a lua y a otros interpretes, al final me decidi por hacer el mio propio. Creo que con las facilidades que viene con .net hacerse un pequeño parser, paras tus principales funciones y objetos es bastante simple. No creo que puedan hacer nada usando tu propio lenguaje, ya que eres tu el que decides que funciones quieres que se puedan usar desde fuera, con la ventaja de que pones tu las restricciones. La idea de usar
C# como propio lenguaje script me parece peligroso.

Aquí hablo sin mucho conocimiento, pero creo que se puede restringir bastante bastante lo que le permites hacer al "script". No por ser C# va a poder tocar todo lo que se le antoje como si fuera código normal. Vamos, o creo que se le puede restringir.

Un saludo!

Vicente

Diferencial

Si tienes razon Vicente, pero he estado mirando es namespace System.CodeDom y no me he enterado de nada. Te dejo este enlace creo que me quedo con mi idea de tener mi propio lenguaje script e ir tirando de delegate... Por haber visto muy complicado System.CodeDom.

//http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/cpref/html/frlrfSystemCodeDomCompilerCodeDomProviderClassTopic.asp

Menos mal que es un simple hola mundo, imaginate si lo complican un poco más.
PARA TENER COSAS QUE NUNCA HAS TENIDO, TENDRÁS QUE HACER COSAS QUE NUNCA HAS HECHO.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.