Внедрение с помощью D (языка программирования)

StackOverflow https://stackoverflow.com/questions/1207958

  •  05-07-2019
  •  | 
  •  

Вопрос

Мне нравится многое из того, что я читал о D.

  • Унифицированная документация (это бы сделало мою работу намного проще.)
  • Возможность тестирования, встроенная в язык .
  • Поддержка отладочного кода на этом языке.
  • Предварительные заявления.(Я всегда думал, что глупо объявлять одну и ту же функцию дважды.)
  • Встроенные функции для замены Препроцессора.
  • Модули
  • Typedef используется для правильной проверки типа вместо сглаживания.
  • Вложенные функции.(Кашель ПАСКАЛЬ Кашель)
  • Параметры входа и выхода.(Насколько это очевидно!)
  • Поддерживает низкоуровневое программирование - Встроенные системы, о да!

Однако:

  • Может ли D поддерживать встроенную систему, на которой не будет работать ОС?
  • Означает ли прямое объявление, что он не поддерживает 16-разрядные процессоры полностью исключает его из встроенных приложений, работающих на таких машинах?Иногда вам не нужен молоток, чтобы решить вашу проблему.
  • Сборка мусора великолепна в Windows или Linux, но, к сожалению, встроенные приложения иногда должны выполнять явное управление памятью.
  • Проверка границ массива, вам это нравится, вы это ненавидите.Отлично подходит для обеспечения надежности дизайна, но не всегда допустимо из-за проблем с производительностью.
  • Каковы последствия для встроенной системы, не работающей под управлением ОС, для поддержки многопоточности?У нас есть клиент, которому даже не нравится, когда его прерывают.Гораздо меньше ОС / многопоточности.
  • Существует ли D-Lite для встраиваемых систем?

Итак, в принципе, подходит ли D для встроенных систем с объемом всего в несколько мегабайт (иногда меньше магабайта), не работающих под управлением ОС, где максимальное использование памяти должно быть известно во время компиляции (в соответствии с требованиями.) и, возможно, на чем-то меньшем, чем 32-разрядный процессор?

Меня очень интересуют некоторые функции, но у меня складывается впечатление, что они предназначены для разработчиков настольных приложений.

Что конкретно делает его непригодным для 16-разрядной реализации?(Предполагая, что 16-разрядная архитектура может обрабатывать достаточный объем памяти для хранения времени выполнения либо во флэш-памяти, либо в ОЗУ.) 32-разрядные значения все еще могут быть вычислены, хотя и медленнее, чем 16-разрядные, и требуют большего количества операций, используя библиотечный код.

Это было полезно?

Решение

Я должен сказать, что короткий ответ на этот вопрос - "Нет".

  • Если ваши машины 16-разрядные, у вас возникнут большие проблемы с установкой D в него - он явно не предназначен для этого.
  • D сам по себе не является легким языком, он генерирует много информации о типе среды выполнения, которая обычно связана с вашим приложением и которая также необходима для типобезопасных вариантов (и, следовательно, стандартных функций форматирования, будь то Tango или Phobos).Это означает, что даже самые маленькие приложения имеют удивительно большой размер и, таким образом, могут исключить D из систем с низким объемом оперативной памяти.Кроме того, общий доступ к среде выполнения в качестве общей библиотеки (что могло бы облегчить некоторые из этих проблем) был мало протестирован.
  • Для всех текущих библиотек общего доступа требуется стандартная библиотека C под ней и, следовательно, обычно также операционная система, так что даже это работает против использования D.Однако в D действительно существуют экспериментальные ядра, так что само по себе это не является невозможным.На сегодняшний день для этого просто не было бы никаких библиотек.

Лично я хотел бы видеть, как вы добьетесь успеха, но сомневаюсь, что это будет легкая работа.

Другие советы

В первую очередь прочитайте ответ ларсиви.Он работал над D runtime и знает, о чем говорит.

Я просто хотел добавить: Некоторые то, о чем вы спрашивали, уже возможно.Это не поможет вам пройти весь путь, и промах здесь так же хорош, как миля, но все же, К вашему сведению:

Сборка мусора великолепна в Windoze или Linux, но, к сожалению, встроенные приложения иногда должны выполнять явное управление памятью.

Вы можете отключить сборку мусора.Различные экспериментальные ОС там делают это.Смотрите на ЗППП.гк модуль, в частности std.gc.disable.Обратите также внимание, что вам не нужно выделять память с new:вы можете использовать malloc и free.С его помощью могут быть выделены даже массивы, вам просто нужно прикрепить общий массив вокруг выделенной памяти с помощью среза.

Проверка границ массива, вам это нравится, вы это ненавидите.Отлично подходит для обеспечения надежности дизайна, но не всегда допустимо из-за проблем с производительностью.

В спецификация для массивов в частности, требуется, чтобы компиляторы допускали проверку границ, которая должна быть выключен (смотрите "Записку по внедрению"). gdc обеспечивает -fno-bounds-check, и в dmd используя -release следует отключить это.

Каковы последствия для встроенной системы, не работающей под управлением ОС, для поддержки многопоточности?У нас есть клиент, которому даже не нравится, когда его прерывают.Гораздо меньше ОС / многопоточности.

Это мне менее понятно, но, учитывая, что большинство сред выполнения C позволяют отключить многопоточность, представляется вероятным, что можно было бы получить D время выполнения чтобы также отключить его.Хотя, легко ли это или возможно прямо сейчас, я не могу вам сказать.

Ответы на этот вопрос устарели:

Может ли D поддерживать встроенную систему, на которой не будет работать ОС?

D может быть кросс-скомпилированный для ARM Linux и для Кора головного мозга РУКИ-M.Некоторые проекты направлены на создание библиотек для архитектур Cortex-M как MiniLibD для STM32 или это проект, который использует общую библиотеку для STM32.(Вы могли бы реализовать свою собственную минималистичную ОС в D на ARM Cortex-M.)

Исключает ли прямое указание на то, что он не поддерживает 16-разрядные процессоры, его полностью из встроенных приложений, работающих на таких машинах?Иногда вам не нужен молоток, чтобы решить вашу проблему.

Нет, смотрите ответ выше...(Но я бы не ожидал, что в ближайшем будущем будут поддерживаться "меньшие" архитектуры, чем Cortex-M.)

Сборка мусора великолепна в Windows или Linux, но, к сожалению, встроенные приложения иногда должны выполнять явное управление памятью.

Вы можете написать Бесплатный код для сбора мусора.(Фонд D, похоже, нацелен на стандартную библиотеку Phobos, "совместимую с GC free", но эта работа продолжается.)

Проверка границ массива, вам это нравится, вы это ненавидите.Отлично подходит для обеспечения надежности дизайна, но не всегда допустимо из-за проблем с производительностью.

(Как вы сказали, это зависит от вашего "личного вкуса" и дизайнерских решений.Но я бы предположил приемлемые издержки производительности для проверки привязки из-за предыстории разработчиков компилятора D и целей проектирования D .)

Каковы последствия для встроенной системы, не работающей под управлением ОС, для поддержки многопоточности?У нас есть клиент, которому даже не нравится, когда его прерывают.Гораздо меньше ОС / многопоточности.

(В чем заключается вопрос?Можно было бы реализовать многопоточность, используя языковые возможности D, например как объяснено в этом вопросе.КСТАТИ:Если вы хотите использовать прерывания, рассмотрите это проект "привет, мир" для Cortex-M3.)

Существует ли D-Lite для встраиваемых систем?

В Сохраненное подмножество D целевые объекты во встроенном домене.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top