2011-05-12 10 views
27

Estoy buscando una forma de ejecutar un código Haskell arbitrario de forma segura (o negarme a ejecutar código no seguro).Ejecución segura del código Haskell no confiable

debe tener:

  • /módulo de función de lista blanca
  • tiempo de espera en la ejecución
  • uso de la memoria de restricción

Capacidades Me como para ver:

  • capacidad de matar hilo
  • compilar los módulos de código nativo
  • almacenamiento en caché de código compilado
  • correr varios intérpretes simultáneamente
  • tipo de datos complejo de errores del compilador (insted de simple mensaje en cadena)

Con ese tipo de funcionalidad sería posible implementar un complemento de navegador capaz de ejecutar código Haskell arbitrario, que es la idea que tengo en mente.

EDIT: Tengo dos respuestas, ambas excelentes. ¡Gracias! La parte triste es que no parece haber una biblioteca lista para usar, solo un programa similar. Sin embargo, es un recurso útil. De todos modos, creo que esperaré a que se libere 7.2.1 y trato de utilizar SafeHaskell en mi propio programa.

Respuesta

31

Hemos estado haciendo esto durante unos 8 años en lambdabot, que apoya:

  • un espacio de nombres controlada
  • los tiempos de espera del sistema operativo reforzado
  • módulos de código nativo
  • almacenamiento en caché
  • niveles interactivos concurrentes
  • mensaje de error personalizado.

se documenta Esta serie de reglas, consulte:

El enfoque de la seguridad tomada en lambdabot inspiró el trabajo de extensión de lenguaje Safe Haskell.


Para enfoques de extensión dinámica de las aplicaciones compiladas en Haskell, en Haskell, ver los dos documentos:

+0

Estoy aceptando la respuesta porque más personas votaron por esta. La respuesta de Simon también es genial. ¡Gracias por las respuestas! – Tener

+0

Los dos enlaces en la parte inferior no funcionan. –

26

Es probable que GHC 7.2.1 tenga una nueva instalación llamada SafeHaskell que cubra parte de lo que usted desea. SafeHaskell garantiza la seguridad de tipo (por lo que cosas como unsafePerformIO están prohibidas) y establece un mecanismo de confianza para que se pueda confiar en una biblioteca con una API segura pero implementada con características inseguras. Está diseñado exactamente para ejecutar código que no es de confianza.

Para los otros aspectos prácticos (tiempos de espera y demás), lambdabot como Don dice sería un gran lugar para buscar.

+0

¿Qué parte de la propuesta de SafeHaskell se implementará en 7.2.1? ¿Toda la cosa? – Tener

+0

David Terei ha implementado las partes del compilador de SafeHaskell, el parche está esperando en mi cola de revisión. El resto está modificando el paquete base y las otras bibliotecas para usar Safe y Trustworthy según corresponda. David está trabajando en esa parte ahora mismo. Espero que SafeHaskell esté disponible en algún estado experimental en 7.2.1. –

+0

@ Simon Marlow Esta es una noticia realmente interesante, gracias. – Tener

Cuestiones relacionadas