Как вы подходите к использованию D во встроенной среде реального времени?

Для всех, кто знаком с D языком программирования, как можно было бы использовать его во встроенной среде реального времени? Я понимаю, что оригинальный дизайн не предназначен для встраиваемых сред в реальном времени, но этот вопрос больше связан с тем, как бы вы могли сделать возможности в реальном времени.

Какие конструкции языка были бы незаменимы?

Какие конструкторы, которые вы видите, будут проблемой?

Кто-нибудь успешно использовал его во встроенной системе?

Любые другие мысли или предложения были бы замечательными.

Ответ 1

D на самом деле не предназначен для использования в приложениях реального времени, главным образом потому, что некоторые функции языка D полагаются на сборщика мусора, а сборщик мусора D непредсказуем и будет спорадически приостанавливать вашу программу для сбора мусора. Цитата:

Сбор мусора не является панацеей. Есть некоторые недостатки:

  • Это не предсказуемо, когда коллекция запускается, поэтому программа может произвольно приостанавливаться.
  • Время, затрачиваемое на запуск коллекции, не ограничено. Хотя на практике это очень быстро, это не может быть гарантировано.
  • Все потоки, отличные от потока коллектора, должны быть остановлены во время выполнения коллекции.

Вы все еще можете использовать D без сборщика мусора (управляя памятью вручную, например, на C/С++) - это не позволит вам использовать определенные языковые функции, такие как ассоциативные массивы, и библиотечные функции, которые внутренне выделяют память без освобождения/возврата ссылку на него. D по-прежнему превосходит многие области, не зависящие от управления памятью (например, метапрограммирование).

Ответ 2

В режиме реального времени речь идет скорее о гарантиях, чем о "реальном времени". Таким образом, существует две возможности:

  • Если вам не нужны библиотеки, зависящие от GC, просто не заставляйте зависящие от него приложения/библиотеки. Сделайте это, всегда убедившись, что у вас есть неконтролируемые распределения, и, желательно, никаких распределений вообще при фактическом запуске приложения (выделить вверх).
  • Было проведено исследование GC в реальном времени на других языках. Это, однако, не тривиально, а может привести к более медленным темпам, чем то, за что вы готовы платить за свои гарантии. Требования заключаются в том, что GC реализуется таким образом, что время, затраченное на любую операцию, имеет верхнюю границу и что компилятор реализован так, что он может помочь, вставив барьеры (также понадобятся не GC RT).