Pergunta

Gosto muito do que eu li sobre D.

  • Documentação (Unified que fazer o meu trabalho muito mais fácil.)
  • capacidade de teste construído para o linguagem.
  • Suporte código de depuração na língua.
  • enviará a sua declaração. (Eu sempre pensei que era estúpido para declarar a mesma função duas vezes.)
  • construído em recursos para substituir o Preprocessor.
  • Módulos
  • Typedef usado para verificação de tipo adequado em vez de aliasing.
  • funções aninhadas. ( Tosse PASCAL Tosse )
  • dentro e fora Parameters. (Como óbvia é que!)
  • Suporta programação de baixo nível - sistemas embarcados, oh yeah!

No entanto:

  • Can D apoiar um sistema embarcado que não vai estar rodando um sistema operacional?
  • Será que o declearation abertamente que ele não suporta 16 processadores bit proclude-lo inteiramente a partir incorporado aplicativos executados nessas máquinas? Às vezes você não precisa de um martelo para resolver seu problema.
  • A coleta de lixo é grande em Windows ou Linux, mas, e aplicações infelizmente incorporados em algum momento deve fazer o gerenciamento de memória explícita.
  • matriz verificação de limites, você o ama, você odeia isso. Ótimo para garantia do projecto, mas não sempre admissível para problemas de desempenho.
  • Quais são as implicações sobre um sistema embarcado, não executando um sistema operacional, para multithreading apoio? Temos um cliente que nem sequer como interrupções. Muito menos OS / multithreading.
  • Existe uma D-Lite para sistemas embarcados?

Então, basicamente é D adequado para sistemas embarcados com apenas alguns megabytes (às vezes menos de um magabyte), não executando um sistema operacional, onde o uso de memória max deve ser conhecido em tempo de compilação (por exigências.) E, possivelmente, em algo menor do que um processador de 32 bits?

Eu estou muito interessado em algumas das características, mas tenho a impressão é destinada a desenvolvedores de aplicações desktop.

O que é, especificamente, que o torna impróprio para uma implementação de 16 bits? (Assumindo que a arquitectura de 16 bits poderiam tratar uma quantidade suficiente de memória para armazenar os tempos de execução, quer na memória flash ou RAM.) 32 valores de bit ainda podia ser calculado, embora mais lento do que 16 bits e requerendo mais operações, utilizando o código da biblioteca.

Foi útil?

Solução

Eu tenho que dizer que a resposta curta a esta pergunta é "não".

  • Se suas máquinas são de 16 bits, você terá grandes problemas na colocação D para ele -. Explicitamente não é projetado para ele
  • D não é uma linguagem de luz em si, gera um monte de informações Tipo de tempo de execução, que normalmente está ligada ao seu aplicativo, e que também é necessário para typesafe variadics (e, portanto, a formatação padrão apresenta seja Tango ou Phobos). Isto significa que mesmo as menores aplicações são surpreendentemente grande em tamanho, e D podem assim desqualificar os sistemas com baixo RAM. Também D com um tempo de execução como um lib compartilhada (o que poderia aliviar alguns destes problemas), foi pouco testado.
  • Todas as bibliotecas D atuais requer uma biblioteca padrão C abaixo dele, e, portanto, normalmente também um sistema operacional, por isso mesmo que as obras contra o uso de D. No entanto, há realmente existem núcleos experimentais em D, por isso não é impossível per se. Não só não seria quaisquer bibliotecas para que, a partir de hoje.

Eu pessoalmente gostaria de ver você ter sucesso, mas a dúvida que será um trabalho fácil.

Outras dicas

Em primeiro lugar ler de larsivi resposta . Ele trabalhou em tempo de execução D e sabe do que ele está falando.

Eu só queria acrescentar: Alguns do que você perguntou sobre já é possível. Ele não vai ficar todo o caminho, e uma miss é tão bom quanto uma milha aqui, mas, ainda assim, FYI:

A coleta de lixo é grande em Windoze ou Linux, mas, e aplicativos infelizmente incorporados em algum momento deve fazer o gerenciamento de memória explicite.

Você pode ativar a coleta de lixo fora. Os vários SOs experimentais D lá fora fazê-lo. Veja a std.gc módulo, em particular std.gc.disable. Note também que você não precisa alocar memória com new: você pode usar malloc e free. matrizes mesmo pode ser alocado com ele, você só precisa anexar uma matriz D em torno da memória alocada usando uma fatia.

matriz verificação de limites, você o ama, você odeia isso. Ótimo para garantia do projecto, mas não sempre admissível para problemas de desempenho.

O especificação para matrizes exige especificamente que os compiladores permitem a verificação de limites para ser desligado (ver a "Nota de Implementação"). gdc fornece -fno-bounds-check, e em dmd usando -release deve desativá-lo.

Quais são as implicações sobre um sistema embarcado, não executando um sistema operacional, para multithreading apoio? Temos um cliente que nem sequer como interrupções. Muito menos OS / multithreading.

Isto eu estou menos claro, mas dado que a maioria dos tempos de execução C permitem a desactivação multithreading, parece provável se poderia obter o D runtime para desativá-lo bem. Se isso é certo fácil ou possível agora que eu não posso te dizer.

As respostas a esta pergunta são desatualizados:

Can D apoiar um sistema embarcado que não vai estar rodando um sistema operacional?

D pode ser cruzada compilado para ARM Linux e para ARM Cortex-M . Alguns projectos têm como objectivo a criação de bibliotecas para Cortex-M arquitecturas como MiniLibD para o STM32 ou esta projeto que usa uma biblioteca genérica para o STM32 . (Você poderia implementar seu próprio sistema operacional minimalista em D em ARM Cortex-M).

Será que o declearation abertamente que ele não suporta 16 processadores bit proclude-lo inteiramente a partir de aplicações embarcadas em execução nessas máquinas? Às vezes você não precisa de um martelo para resolver seu problema.

Não, ver resposta acima ... (Mas eu não esperaria que as arquiteturas "menores" do que Cortex-M será suportado no futuro próximo.)

A coleta de lixo é grande em Windows ou Linux, mas, e aplicações infelizmente incorporados em algum momento deve fazer o gerenciamento de memória explícita.

Você pode escrever lixo Coleção de código livre . (A fundação D parece visar um "GC livre compatível com" biblioteca padrão Phobos, mas que é um trabalho em progresso.)

matriz verificação de limites, você o ama, você odeia isso. Ótimo para garantia do projecto, mas não sempre admissível para problemas de desempenho.

(Como você disse isso depende do seu "gosto pessoal" e decisões de design. Mas eu diria que uma sobrecarga de desempenho aceitável para verificação de limite devido ao fundo dos desenvolvedores do compilador D e D's objetivos de design.)

Quais são as implicações sobre um sistema embarcado, não executando um sistema operacional, para multithreading apoio? Temos um cliente que nem sequer como interrupções. Muito menos OS / multithreading.

?

(Qual é a pergunta Pode-se implementar mutlithreading usando recursos de linguagem D's por exemplo como explicado nesta questão BTW.: Se você quiser interrupções de uso considerar este projecto "Olá mundo" para um Cortex-M3).

Existe uma D-Lite para sistemas embarcados?

O SafeD subconjunto de alvos D no domínio incorporado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top