He tenido curiosidad por comprender si es posible aplicar el poder de Haskell al mundo embebido en tiempo real, y en Google he encontrado el paquete Atom. Supongo que en el caso complejo, el código podría tener todos los errores C clásicos: bloqueos, daños en la memoria, etc., que luego tendría que rastrearse hasta el código Haskell original que los causó . Entonces, esta es la primera parte de la pregunta: "Si tuviste la experiencia con Atom, ¿cómo lidiaste con la tarea de depurar los errores de bajo nivel en el código C compilado y corregirlos en el código original de Haskell?"Uso de Haskell para sistemas de tiempo real de gran tamaño: ¿cómo (si?)?
He buscado algunos ejemplos más para Atom, this blog post menciona el código C resultante 22KLOC (y obviamente no hay código :), el included example es un juguete. This y this referencias tienen un código un poco más práctico, pero aquí es donde esto termina. Y la razón por la que puse "considerable" en el tema es, estoy más interesado si puede compartir sus experiencias de trabajo con el código C generado en el rango de 300KLOC +.
Como soy un novato en Haskell, obviamente puede haber otras formas que no encontré debido a mis incógnitas desconocidas, por lo que cualquier otro puntero para la autoeducación en esta área sería muy apreciado, y esta es la segunda parte de la pregunta: "¿Cuáles serían algunos otros métodos prácticos (si) de hacer un desarrollo en tiempo real en Haskell?". Si el multinúcleo también está en la imagen, eso es un plus extra :-)
(Sobre el uso de Haskell para este propósito: por lo que leo en this blog post, la recolección de basura y la pereza en Haskell lo hace un horario no determinista- sabia, pero tal vez en dos años algo ha cambiado Real world Haskell programming pregunta sobre SO era el más cercano que pude encontrar a este tema)
Nota:. "en tiempo real" anterior es que sería más cerca de "tiempo real duro" - Tengo curiosidad si es posible garantizar que el tiempo de pausa cuando la tarea principal no se está ejecutando sea menor a 0.5 ms.
increíble, muchas gracias! Sí, entiendo la diferencia entre el EDSL utilizado como generador de código y el idioma del host en sí; lo siento si no estaba claro en el texto de la pregunta. Mi razón para ponerlo en la categoría "en haskell" fue que usando un lenguaje más estricto como Haskell uno podría (?) Evitar los errores más "mecánicos" como las comprobaciones de límites, los dobleces, etc., suponiendo que la semántica se expresa en el EDSL: esa es una de mis especulaciones de que estoy tratando de entender si es verdadera o falsa. –