2012-06-04 10 views

Respuesta

6

RTTI no es un intérprete de idioma completo. Delphi es un lenguaje compilado. Usted lo escribe, lo compila y distribuye solo sus binarios. A menos que sea Embarcadero, no tiene derecho a distribuir DCC32 (el compilador de línea de comandos).

Sin embargo, el JVCL incluye un subconjunto de lenguaje delphi envuelto en un Componente muy fácil de usar, llamado "JvInterpreter". Podría escribir algún código (como pascal) y colocarlo en una base de datos. Luego puede "ejecutar ese código" (interpretado, no compilado) que extrae de la base de datos. Normalmente, estos deberían ser procedimientos que invocan métodos en su código. Debe escribir algunos "envoltorios" que expongan las API compiladas que desea exponer al intérprete (proporcionar acceso a datos en tiempo real, objetos de conexión de bases de datos u objetos de tabla/consulta). Estás pensando que esto suena perfecto, ¿no? Bueno, es una trampa.

Tenga cuidado con algo llamado "the configuration complexity clock". Acaba de llegar a las 9 en punto, y ahí es donde comienza el dolor y el sufrimiento. Al igual que cuando tienes un problema, y ​​lo resuelves con expresiones regulares, y "ahora tienes dos problemas", agregar scripts y DSL a tu aplicación tiene una forma de resolver un problema y crear muchos otros.

Aunque creo que la idea de "DLL almacenado en un campo de blob de base de datos" es mala y absurda, creo que la adición gratuita de scripting y lenguajes específicos de dominio a las aplicaciones también está causando mucho dolor. Pregúntate primero si alguna otra solución más simple podría funcionar. A continuación, aplique el principio YAGNI (You Is not Gonna Need It) y KISS (keep-it-simple-smartguy).

Piense dos veces antes de implementar algo como lo que está pidiendo hacer en su pregunta.

+0

por favor cite correctamente: KISS = mantenerlo simple estúpido ;-) – dummzeuch

+1

Estoy seguro de que Warren sabe el significado exacto. Suena menos grosero de esta manera. –

+0

Leonardo está captando mi deriva. –

2

Su mejor opción, en mi humilde opinión, está utilizando un motor de secuencias de comandos y el almacenamiento de scripts en la base de datos.

Alternativamente, podría poner el código en un dll y poner ese dll en la base de datos. Existe un código para cargar un dll de un recurso en ram y procesarlo para que pueda ser utilizado como si se cargara usando LoadLibrary, p. in dzlib. Realmente no sé si funciona con cualquier dll y en qué versiones de Windows, pero lo hace con los que probé.

Cuestiones relacionadas