funciones - listas en haskell
¿Qué tan seguro es Haskell seguro? (2)
Como regla general, diría que Haskell seguro trata de llegar aproximadamente donde está el subconjunto seguro de C #. Para sus escenarios:
- Puede usar haskell seguro porque está inspeccionando el código.
- Realmente no se puede usar el haskell seguro solo para evitar fugas de datos desastrosas.
- No recomendaría que Google o Yahoo se basen solo en el haskell seguro para ejecutar código no confiable. Por un lado, no administra el consumo excesivo de recursos (CPU, memoria, disco) o fondos (indefinido o verdadero). Use una caja de arena del sistema operativo para eso.
Una nota sobre indefinido: operacionalmente, detiene la función devolviendo un valor lanzando una excepción, al igual que la función de error. Denotacionalmente, se considera que es el valor ''inferior''. Ahora, incluso si Haskell seguro no permitía la definición indefinida y el error, una función podría fallar al regresar, simplemente haciendo un bucle sin fin. Y un bucle sin fin es inferior también. Tan seguro Haskell garantiza la seguridad de los tipos y la memoria, pero no intenta garantizar que las funciones terminen. Safe Haskell es, por supuesto, Turing completo, por lo que en general no es posible probar la terminación. Además, dado que la falta de memoria lanza una excepción, las funciones pueden terminar con ellos. Finalmente, los errores de coincidencia de patrón lanzan excepciones. Así que Haskell no puede eliminar fondos de ningún tipo y también puede permitir errores indefinidos y explícitos.
Estaba pensando en Safe Haskell y me pregunto cuánto puedo confiar en ello.
Algunos escenarios ficticios:
Soy un pequeño pirata informático que escribe un juego programable (piense en Robocode ) donde permito que otros programen sus propias entidades para competir entre sí. La mayoría de las veces los usuarios ejecutarán algunos programas que no son de confianza en máquinas privadas. El código que no es de confianza probablemente se inspeccionará antes de ejecutarlo.
Soy el programador de una aplicación que es utilizada por varios clientes. Proporciono una api para que puedan ampliar la funcionalidad y animar a mis usuarios a compartir sus complementos. La comunidad de usuarios es pequeña y la mayoría de las veces hay confianza mutua, pero de vez en cuando alguien está trabajando en un proyecto de alto secreto para el cliente y cualquier dataleaks resultaría desastroso.
Soy ... Google (o Facebook, Yahoo, etc.) y quiero permitir que mis clientes guarden sus cuentas de correo electrónico. Los scripts se cargan y se ejecutan en mis servidores. Cualquier violación de acceso sería fatal.
Teniendo en cuenta estos escenarios:
- ¿ Safe Haskell sería apropiado para garantizar el uso de espacios aislados y la restricción de acceso?
- ¿Debería alguien en las situaciones dadas confiar en las promesas hechas?
Que yo sepa, Haskell seguro no es seguro. Alguien puede usar unsafePerformIO
en un paquete y anular manualmente el factor "inseguro". Si no, todos los paquetes que tenían dependencias en programas c o bibliotecas del sistema no podían marcarse como seguros. (Piense en libgmp.so
, que está vinculado a la mayoría de los paquetes base de Haskell. Para que los paquetes de base se unsafePerformIO
como seguros, esto debe marcarse de forma explícita como seguro, aunque use unsafePerformIO
).