2012-01-28 6 views
8

Necesito una forma rápida (1000 de comprobaciones de tipos por segundo) para verificar el código fuente generado de Haskell.Código generado por Typecheck que accede al código cargado dinámicamente en Haskell

Probamos hint, que fue lo suficientemente rápido, excepto que no se puede acceder a código cargado dinámicamente a menos que el código fuente esté disponible, lo que no tendríamos en algunos casos. Tal vez haya alguna manera de registrar el código cargado dinámicamente como un paquete o algo así, ya que parece que la sugerencia puede acceder a los paquetes registrados.

Intentamos usar la API ghc, pero parece requerir que los archivos estén en el disco y todo el archivo IO requerido lo hace demasiado lento.

Podemos usar haskell-src-exts para generar el código, pero tenemos que tipearlo.

+1

Tal vez podría ir con la solución de API GHC, y poner todo lo necesario en un disco RAM? – monk

+0

Esta es una aplicación que se distribuirá a los usuarios finales, por lo que no tengo control sobre la configuración de su sistema. – mentics

+2

¿sería posible alimentar los descriptores de archivos api de GHC en lugar de la ubicación del archivo? Entonces no sería difícil evitar hablar con el disco por el contenido (que supongo que tienes en RAM) –

Respuesta

0

Miles de comprobaciones de tipo por segundo no parecen factibles de forma secuencial. ¿Están haciendo esto al mismo tiempo, con alguna esperanza de paralelismo, espero?

¿Y asumo que usted es compatible con el sistema de tipo GHC completo? Por lo tanto, un verificador de tipos simplificado (por ejemplo, THIH no será suficiente).

  • Uso GHC-api, con código de bytes y no hay optimizaciones
  • caché todo en la memoria
  • enviar modificaciones a GHC para asegurar que pueda tener FDs de buffers de memoria, si es necesario
+0

En realidad, Hint nos daba al menos mil por segundo, creo. Pero no funcionaría con el código objeto así que tenía que encontrar una solución diferente. Sin embargo, otra solución es eludir "secuencialmente" lo que usted menciona: ponga todas las comprobaciones de tipo necesarias en un solo archivo y escriba "check" solo una vez. Puede ser un poco complicado traducir mensajes de error, pero parecía funcionar bien para las cosas simples que estábamos intentando. – mentics

+0

"mil por segundo", pero depende del programa, y ​​hay algunos programas que hacen que el verificador de tipos no finalice ... –

Cuestiones relacionadas