Как бы вы подошли к использованию D во встроенной среде реального времени?
Для всех, кто знаком с языком программирования D, как его использовать во встроенной среде реального времени? Я понимаю, что его оригинальный дизайн не предназначен для встраиваемых сред реального времени, но этот вопрос больше о том, как бы вы реализовали возможности в реальном времени.
Какие конструкции языка будут необходимы?
Какие конструкции вы видите, будет проблемой?
Кто-нибудь успешно использовал его во встроенной системе?
Любые другие мысли или предложения будут великолепны.
2 ответа
D на самом деле не предназначен для использования в приложениях реального времени, в основном потому, что некоторые языковые функции D полагаются на его сборщик мусора, а сборщик мусора D непредсказуем и будет время от времени приостанавливать вашу программу для сбора мусора. Цитирование:
Сборка мусора не является панацеей. Есть некоторые недостатки:
- Это не предсказуемо, когда коллекция запускается, поэтому программа может произвольно сделать паузу.
- Время, необходимое для запуска коллекции, не ограничено. Хотя на практике это очень быстро, это не может быть гарантировано.
- Все потоки, кроме потока коллектора, должны быть остановлены во время сбора.
Вы по-прежнему можете использовать D без сборщика мусора (управляя памятью вручную, как в C/C++) - это не позволит вам использовать определенные языковые функции, такие как ассоциативные массивы, и библиотечные функции, которые внутренне выделяют память без освобождения / возврата ссылки на нее., D по-прежнему превосходит во многих областях, не зависящих от управления памятью (таких как метапрограммирование).
В реальном времени больше гарантий, чем в режиме реального времени. Таким образом, есть две возможности;
- Если вам не нужны зависимые от GC библиотеки, просто избегайте зависимости вашего приложения / библиотек. Делайте это, всегда следя за тем, чтобы у вас были неконтролируемые выделения, и желательно, чтобы вообще не было выделений во время фактического запуска приложения (выделите заранее).
- Были проведены исследования в реальном времени GC на других языках. Это не тривиально, хотя и может вызвать больше замедлений, чем то, что вы готовы платить за свои гарантии. Требования заключаются в том, чтобы GC был реализован таким образом, чтобы время, затрачиваемое на любую операцию, имело верхнюю границу, и чтобы компилятор был реализован таким образом, чтобы он мог помочь путем вставки барьеров (также потребуется для движущегося GC без RT).