2010-07-18 5 views
2

Je voudrais construire un framework d'application principalement interprété. Dites que le code source serait stocké dans la base de données qui pourrait être édité par les utilisateurs et toujours la dernière version serait exécutée.C# compiler le code source à partir de la base de données

Quelqu'un peut-il me donner quelques idées sur la façon dont on peut mettre en œuvre comme ça!

acclamations, gabor

Répondre

0

Habituellement, le programme utilise un langage de script pour les parties scriptables, c'est-à-dire Lua ou Javascript.

3

Dans .Net, vous pouvez utiliser la réflexion et CodeDOM pour compiler du code à la volée. Mais aucune approche n'est vraiment très simple ou pratique. Mono a aussi la capacité d'interpréter C# à la volée, mais je ne l'ai pas encore examiné de près. Une autre alternative est d'utiliser un langage .Net interprété comme Boo ou IronPython comme langage pour votre code de base de données.

De toute façon, assurez-vous de réfléchir longuement et sérieusement à la sécurité de votre plate-forme. Permettre aux utilisateurs d'exécuter du code arbitraire est toujours un exercice périlleux. Il est souvent trop tentant de chercher une méthode simple eval(), et même si elle existe, c'est pas assez bon pour ce genre de scénario.

+0

+1 pour noter l'aspect de sécurité. –

0

Pour répondre à votre question technique: Vous ne voulez pas écrire votre propre langue et interprète. C'est trop de travail pour vous. Alors choisissez un autre langage, disons Python ou Lua, et cherchez la documentation qui permet à votre programme C de lui donner les blocs de code à exécuter. Bien sûr, le script doit être capable de faire quelque chose, vous devrez donc trouver comment exposer les objets de votre programme au script. Aussi, que se passera-t-il si un client exécute le programme lorsque vous mettez à jour son code source dans la base de données? Le client doit-il redémarrer? Allez-vous stocker l'ensemble du programme en une seule ligne dans cette base de données ou souhaitez-vous stocker des fonctions individuelles? Cela affecte la façon dont vous structurez vos mises à jour.

Pour résoudre d'autres problèmes avec votre question: Pourquoi voulez-vous faire cela? Faire du "langage interprété" une partie de vos spécifications de conception pour un système n'est pas souvent un bon signe. La vraie exigence est-elle quelque chose comme ceci: "Je mets souvent à jour le programme et je veux que les utilisateurs aient toujours la dernière copie?" Si c'est le cas, il existe d'autres meilleures façons de procéder à ce sujet (donnez-nous votre scénario et les conditions requises).

Questions connexes