Hola a todos, hola estimado Maestro Hace algun tiempo quise encontrar un equivalente a la funcion ExecScript(string) de nuestro nunca bien ponderado VisualFoxPro, donde un ExecScript("SELECT ... FROM...") compila on-the-fly y ejecuta actualmente la sentencia como si esta estuviese presente en ese lugar. Más aún, el runtime de Fox podía ejecutar el comando COMPILE, para ir autogenerando bloques de codigo enteros. Esta funcionalidad, por ejemplo, permitía compilar páginas web con scripting en lenguaje Fox, de hecho, uno de los mecanismos de WebConnection está basado en esta posibilidad. Otros lenguajes como Perl tambien tienen una implementacion notablemente parecida a la de Fox. En .NET parece ser que el problema está, al menos en parte, en lo fuertemente tipado del entorno de ejecución y en el mecanismo del CLR, con lo cual aparentemente es altamente complicado lograr esta funcionalidad en runtime. Por ejemplo, nosotros necesitábamos cargar en un string algo asi como "Dim obj AS "+ cTipoClase y luego ejecutarlo inmediatamente, donde el tipo cTipoClase sólo se conocía en tiempo de ejecución, porque necesitábamos generar un formulario de clase de base con la logica para el patrón singleton a fin de heredarlo a lo largo de toda la solución. En el algoritmo genético, algo parecido aplica, en cada época o generación del mismo es posible que sea necesario alterar significativamente su comportamiento, ya que por definición no bastaría sólo con cambiar sus parámetros de funcionamiento, sino que el mismo algoritmo debe automodificarse en cada iteración. Al carecer de ejecución dinámica como lo pretendíamos, vimos que la mayor parte de las soluciones venían del lado de crear un objeto compilador, pasarle un string/archivo/bloque, luego enlazar el ensamblado creado y ejecutarlo. Sin embargo, esto , aunque efectivo, no es elegante sobre todo si recordamos aquellos lujos que tenía el zorro (permitanme ponerme un poco nostálgico). Tuvimos que lidiar con reflexión y esas cosas, y aunque se tuvo la solución, no nos pareció elegante. Nuestra conclusion fue que efectivamente era necesario recurrir a los trucos expuestos, al menos hasta que eventualmente se coloque este proceso en un espacio de nombres en algun release futuro de .NET, aunque si examinamos como está diseñado el CLR, creería que va a costar algo, pero son solo conjeturas de este momento. En java está la posibilidad de lograr evaluacion dinamica de expresiones a través de un compilador on-memory y no necesariamente uno externo, el cual genera bytecodes on-the-fly al recibir un string, aunque exige que el programador conozca los internals de estos objetos para poder luego utilizarlos. De todos modos, algunos ejemplos tirados por el Maestro podrían considerarse como algo parecido a compiladores en-proceso de todos modos, y en este caso el parecido (y las limitaciones) entre ambos mundos quedan muy evidenciados. Cordiales saludos, Carlos A. Pérez
_____ De: puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] En nombre de Angel "Java" Lopez Enviado el: Saturday, December 01, 2007 10:21 Para: puntonet@mug.org.ar Asunto: [puntonet] evaluar funcion Hola gente! Hace poco creo hubo una pregunta parecida, no se si envie estos enlaces, donde esta tambien el mencionado por Alan, (jeje.... ya va siendo tiempo de publicar AjBasic con un ejemplo de este tipo): (seria interesante tambien plantear el tema de algoritmo genetico en una grid.... pero eso es otro tema.... ver algo en http://msmvps.com/blogs/lopez/archive/2007/11/15/programando-para-una-grid.a spx http://msmvps.com/blogs/lopez/archive/2007/11/21/m-225-s-programando-para-un a-grid.aspx ) Build a Custom .NET "EVAL" Provider http://www.eggheadcafe.com/articles/20030908.asp http://www.codeproject.com/csharp/runtime_eval.asp http://www.codeproject.com/csharp/csi.asp Runtime Compilation (A .NET eval statement) http://www.codeproject.com/dotnet/evaluator.asp An Eval Function for C# using JScript.NET (JavaScript) http://www.odetocode.com/Code/80.aspx Evaluate C# Code (Eval Function) http://www.codeproject.com/csharp/evalcscode.asp The expression evaluator revisited (Eval function in 100% managed .net) http://www.codeproject.com/useritems/eval3.asp Evaluating Mathematical Expressions by Compiling C# Code at Runtime http://www.codeproject.com/cs/algorithms/matheval.asp A Simple Compiler for the Common Language Runtime http://www.codeproject.com/cs/algorithms/compiler.asp Nos leemos! Angel "Java" Lopez http://www.ajlopez.com/ ----- Original Message ----- From: Alan <mailto:[EMAIL PROTECTED]> Lavintman To: puntonet@mug.org.ar Sent: Saturday, December 01, 2007 6:22 AM Subject: [puntonet] evaluar funcion Fijate si esto te puede servir... http://www.odetocode.com/Code/80.aspx Tuve que usarlo tiempo atras y me dio resultado... SAludos. Dario Quintana <[EMAIL PROTECTED]> wrote: Perdon si la pregunta sonó fea... no es con mala intención, me dí cuenta despues que escribí, mejor me voy a dormir... Saludos y segun nos comentes un poco más...podremos ayudarte. On Dec 1, 2007 2:14 AM, Dario Quintana < [EMAIL PROTECTED]> wrote: Alguien tiene idea de que ? No quedó muy claro que estás necesitando. -- Dario Quintana http://darioquintana.com.ar <http://darioquintana.com.ar> _____ Be a better sports nut! Let your teams follow you with Yahoo Mobile. Try <http://us.rd.yahoo.com/evt=51731/*http://mobile.yahoo.com/sports;_ylt=At9_q DKvtAbMuh1G1SQtBI7ntAcJ> it now. __________ Información de NOD32, revisión 2124 (20070317) __________ Este mensaje ha sido analizado con NOD32 antivirus system http://www.nod32.com