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

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

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

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

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

Любые другие мысли или предложения будут великолепны.

2 ответа

Решение

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

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

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

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

В реальном времени больше гарантий, чем в режиме реального времени. Таким образом, есть две возможности;

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