27 votes

Exécution sûre du code Haskell non fiable

Je suis à la recherche d'un moyen d'exécuter arbitrairement du code Haskell en toute sécurité (ou de refuser d'exécuter le code unsafe).

Doit avoir:

  • le module de la fonction de liste blanche
  • délai d'exécution
  • restriction d'utilisation de la mémoire

Les capacités de je comme pour voir:

  • capacité à tuer le thread
  • compiler les modules de code natif
  • la mise en cache de code compilé
  • l'exécution de plusieurs interprètes simultanément
  • complexe de type de données pour des erreurs de compilation (place de simple message en Chaîne)

Avec ce genre de fonctionnalité, il serait possible de mettre en place un plugin de navigateur capable de l'exécution arbitraire de code Haskell, qui est l'idée que j'ai en tête.

EDIT: j'ai deux réponses, à la fois grand. Merci! Le plus triste est qu'il ne semble pas être prêt à aller à la bibliothèque, juste un programme similaire. C'est une ressource utile cependant. De toute façon je pense que je vais attendre pour 7.2.1 pour être libéré et essayez d'utiliser SafeHaskell dans mon propre programme.

31voto

Don Stewart Points 94361

Nous avons fait cela pendant environ 8 ans maintenant dans lambdabot, qui prend en charge:

  • contrôlée de l'espace de noms
  • OS de l'exécution des délais d'attente
  • code natif modules
  • la mise en cache
  • simultanées interactif de haut niveaux
  • message d'erreur personnalisé retourne.

Cette série de règles est documenté, voir:

L'approche à la sécurité des prises en lambdabot inspiré de la Sécurité Haskell langue de travail de l'extension.


Pour les approches de la dynamique d'extension des compilé Haskell applications, en Haskell, voir les deux articles:

26voto

Simon Marlow Points 9153

GHC 7.2.1 aura probablement un nouveau système SafeHaskell qui couvre une partie de ce que vous voulez. SafeHaskell assure la sécurité du type (donc les choses comme unsafePerformIO sont hors la loi), et établit une confiance mécanisme, ainsi qu'une bibliothèque, un coffre-fort API, mais mis en œuvre à l'aide de dangereux fonctionnalités peuvent être de confiance. Il est conçu exactement pour l'exécution de code non fiable.

Pour les autres aspects pratiques (délais d'attente et ainsi de suite), lambdabot que Ne dit serait un excellent endroit pour chercher.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X