Получение Embedded с D (язык программирования) - PullRequest
24 голосов
/ 30 июля 2009

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

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

Однако:

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

Таким образом, D в основном подходит для встраиваемых систем с несколькими мегабайтами (иногда меньше, чем мегабайт), без операционной системы, где максимальное использование памяти должно быть известно во время компиляции (согласно требованиям) и, возможно, для чего-то меньшего, чем 32-битный процессор?

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

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

Ответы [ 3 ]

11 голосов
/ 30 июля 2009

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

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

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

7 голосов
/ 30 июля 2009

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

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

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

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

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

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

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

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

1 голос
/ 09 июля 2017

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

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

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

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

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

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

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

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

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

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

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

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

Подмножество SafeD D предназначено для встроенного домена.

...