2009-07-11 5 views
15

Para todos aquellos familiarizados con D programming language, ¿cómo utilizarlo en un entorno incrustado en tiempo real? Entiendo que su diseño original no está orientado para entornos integrados en tiempo real, pero esta pregunta es más acerca de cómo realizar la capacidad en tiempo real.¿Cómo abordaría el uso de D en un entorno incrustado en tiempo real?

¿Qué construcciones del lenguaje serían indispensables?

¿Qué construcciones ves que serían un problema?

¿Alguien ha utilizado con éxito en un sistema integrado?

Cualquier otro pensamiento o sugerencia sería genial.

Respuesta

12

D no está diseñado para usar en aplicaciones en tiempo real, principalmente porque algunas características del lenguaje de D dependen de su recolector de basura, y el recolector de basura de D's es impredecible y ocasionalmente pausará su programa para recolectar basura. Quoting:

La recolección de basura no es una panacea. Hay algunas desventajas:

  • No es predecible cuando se ejecuta una colección, por lo que el programa puede pausar arbitrariamente.
  • El tiempo que demora una colección en ejecutarse no está limitado. Si bien en la práctica es muy rápido, esto no se puede garantizar.
  • Todos los subprocesos que no sean el subproceso de recopilador deben detenerse mientras se realiza la recopilación.

Puede seguir utilizando D sin un recolector de basura (mediante la gestión de memoria de forma manual, como en C/C++) - esto evitará el uso de ciertas características del lenguaje como matrices asociativas, y funciones de biblioteca que asignan internamente de memoria sin desasignar/devolver una referencia al mismo. D aún se destaca en muchas áreas que no dependen de la administración de la memoria (como la metaprogramación).

+1

Entiendo que su intención original no es para aplicaciones en tiempo real, pero la pregunta es más bien qué ocurriría si lo hiciera funcionar en tiempo real. Aclararé la pregunta más. Gracias por la respuesta. Me olvidé de cuán dependientes serían las bibliotecas en el GC. –

+8

Puede desactivar el GC std.gc.disable() que evitará la ejecución del recolector de basura hasta std.gc.enable(). –

+1

@he_the_great - gracias por la sugerencia de activar/desactivar gc. –

5

El tiempo real es más sobre garantías que el rendimiento en "tiempo real". Como tal, hay dos posibilidades;

  • Si no necesita bibliotecas dependientes de GC, simplemente evite hacer que su aplicación/bibliotecas dependan de ella. Haga esto asegurándose siempre de tener asignaciones no controladas, y preferiblemente ninguna asignación en absoluto durante el funcionamiento real de la aplicación (asignar por adelantado).
  • Se han investigado los GC en tiempo real en otros idiomas. Sin embargo, esto no es trivial y puede causar más desaceleraciones que lo que está dispuesto a pagar por sus garantías. Los requisitos son que el GC se implemente de forma tal que el tiempo empleado en cualquier operación tenga un límite superior, y que el compilador se implemente de modo que pueda ayudar insertando barreras (también sería necesario para un GC que no moviera RT).
Cuestiones relacionadas