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: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Angel
"Java" Lopez
Enviado el: Saturday, December 01, 2007 10:21
Para: [email protected]
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: [email protected]
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