Pergunta

Estou me perguntando como é maduro e estável d é, e se for um bom substituto para C / C ++.

Eu sei que existem atualmente duas bibliotecas padrão (Phobos e Tango).Ainda é o caso de que não há biblioteca padrão unificada?

Além disso, ouvi há algum tempo que os idiomas têm problemas nos limites do código GCCCED / NÃO GCED.Não consegui encontrar qualquer referência sobre isso no site D, então esse problema ainda é verdadeiro?

Foi útil?

Solução

Versão 1 de D é maduro e estável, e há definitivamente pessoas que o usam para o trabalho real. Phobos é a única biblioteca padrão que D já teve ou provavelmente terá, mas os fobos da D1 falta que várias bibliotecas de terceiros foram criadas para preencher as lacunas. O tango é o maior desses e é a biblioteca de terceiros mais usada (daí porque freqüentemente é chamada de segunda biblioteca padrão, mesmo que não seja, e Walter Bright será rápido em apontar que não é). No entanto, Tango e Phobos em D1 não se misturam muito bem (IIRC porque o tango substitui algumas coisas padrão como o coletor de lixo), então há uma boa chance de que alguém programação em D1 usará tango sem phobos. Além disso, o D1 é suportado por vários compiladores, além do compilador primário da Digital Mars - incluindo LDC e GDC.

Versão 2 de D está apenas atingindo maturidade e estabilidade. Eles pararam de fazer grandes mudanças na linguagem, então você geralmente não precisa se preocupar com tudo quebrando em você com uma atualização do compilador como foi o caso no passado, enquanto eles ainda estavam pregando a linguagem para baixo. Na verdade, agora é maduro o suficiente para que Andrei Alexandrescu seja lançado A linguagem de programação D como um recurso definitivo na linguagem que deve permanecer válido erros no texto (e é um dos melhores livros de linguagem de programação que eu Leia também). No entanto, ainda há muita solução de conserto de bugs, por isso é bem possível correr em um bug que faz com que você seja um pouco de irritação para sua aplicação específica. É definitivamente maduro o suficiente e estável o suficiente para fazer um trabalho real com ele, mas esteja ciente de que é bem possível correr em bugs.

Tango ainda não foi portado para D2, então não é realmente uma opção ao programar no D2. No entanto, Phobos está chegando bem agora. Está recebendo um monte de grandes adições (na verdade, tem contêineres agora! - A falta de recipientes em fobos sendo uma grande razão para usar o tango em D1, em vez de Phobos), e tem algumas coisas realmente poderosas - Std.Algoritmo é particularmente bom. A forma como D lida com funções do Lambda, funções aninhadas e ponteiros de função torna as funções de passagem para os algoritmos, anos de luz mais fáceis do que no padrão atual de C ++. Além disso, foi corrigido em D2 para que o coletor de lixo e algumas outras coisas centrais que o tango estivesse duplicando agora é separado de Phobos. Assim, uma vez que o Tango foi portado para D2, você poderá misturar phobos e código de tango - embora como tenha sido apontado em uma resposta anterior, Phobos e Tango use filosofias de design bastante diferentes (tango sendo muito java e fobos. Usando fortemente modelos e meta-programação com datilografia por pato em vez de interfaces), então eu não sei o quão bem eles se misturarão a partir desse ponto de vista.

Atualmente, acredito que o DMD é o único compilador que está atualizado com relação à especificação para D2, mas acredito que há trabalho sendo feito nos compiladores GDC e LDC D (embora quanto ativo é, eu não sei). Além disso, Walter Bright está trabalhando atualmente no porto de 64 bits de DMD, então estaremos recebendo compilação nativa de 64 bits um desses dias relativamente em breve.

No geral, eu diria que D2 está pronto para uso, mas você precisa estar ciente de que ainda há muito trabalho a ser feito com relação a correções de bugs e semelhantes. Então, d2 está definitivamente pronto para uso hobby e potencialmente para uso sério no trabalho, mas se você realmente precisar de estabilidade (como se você é boeing e um erro significa morte), então d1 provavelmente ainda seria uma melhor escolha. Claro, a grande coisa a lembrar sobre o D2 é que ele tem muitos recursos que D1 não tem, a menos que você realmente precise de estabilidade sólida de rocha, então D2 é provavelmente o caminho a percorrer. Felizmente, continua a amadurecer e se estabilizar, então a hora é definitivamente se aproximando quando não haverá dúvida de que o uso de D2 seria melhor.

Independentemente, tanto D1 quanto D2 são boas substituições para C e C ++ no caso geral. Eles podem fazer o que C e C ++ fazem, e (especialmente no caso do D2) provavelmente podem melhorá-lo. O principal lugar que D pode ficar para trás é o quão bem é otimizado. Há muito código que será tão rápido em d como em c ou c ++, mas ainda há muito trabalho sendo feito em D, então há muita sala para otimizá-lo ainda mais, e às vezes vai ficar atrás de C e C ++ para eficiência . Então, geralmente, D é eficiente, mas se você realmente precisa de tanta eficiência possível, talvez ainda não seja bom o suficiente para o que você precisa (embora esteja chegando). Além disso, há uma abundância de bibliotecas maduras C e C ++ por aí, enquanto D não tem perto do mesmo nível de código flutuando para lá para trabalhar. Qualquer código C pode ser usado com D Como as funções C podem ser chamadas de D, e alguns do código C ++ podem ser (embora haja algumas restrições ao misturar código C ++ com D), para que isso não seja necessariamente um impedimento, mas é algo para estar ciente. T.

Ele principal lugar onde falta seria bibliotecas GUI.Há alguns para D1, e há trabalho sendo feito em bibliotecas GUI para D2, mas eu não acredito que qualquer um deles seja particularmente maduro neste momento.

Então, como com tudo, qual idioma você deve usar depende do que você está fazendo.D vai fazer a maioria das coisas e fazê-las bem.Mas não faz tudo, e ainda está amadurecendo.Pessoalmente, neste momento, eu uso D a menos que eu precise usar outra coisa para um determinado projeto, que não é muitas vezes a menos que o projeto já tenha sido escrito em outra coisa, e não faz sentido para o porto agora.Então, eu sugiro que usasse d, mas você terá que investigar e usá-lo para ver se realmente fará o que quiser neste momento.

Outras dicas

Eu recomendo usar D2 com Phobos.É no ponto em que a língua é agradável o suficiente e estável o suficiente para compensar as frustrações ocasionais causadas por questões de implementação.

.

Eu sei que existem atualmente duas bibliotecas padrão (Phobos e Tango), então eu suponho que pode haver pessoas tentando unificá-las.

"unificação" é extremamente improvável devido a diferenças nas licenças. Quando o Tango será portado para D 2.0, você poderá usá-lo ao lado de Phobos, que não é (facilmente) possível em D 1.0.

.

Além disso, ouvi há algum tempo que os idiomas têm problemas nos limites do código GCCCED / NÃO GCED. Não consegui encontrar qualquer referência sobre isso no site D, então esse problema ainda é verdadeiro?

Eu acredito que há apenas problemas se você não tiver cuidado com como gerencia a memória. Se todas as referências a um objeto alocado GC for armazenada fora das regiões de memória marcadas como raízes GC, o GC considerará o objeto não substituído e o excluirá.

.

Se eu tivesse que escolher D como uma substituição C hoje, o que D (V 1.0 ou V 2.0) e que biblioteca padrão você sugeriria?

Phobos e Tango estão indo em direções um pouco diferentes. Fobos (em D 2.0) laços em estreita com os novos recursos do D2. O tango é mais embalado em recursos e contém módulos que não estão presentes em Phobos, e. Suporte ao cliente HTTP / FTP, várias classes de criptografia, etc. Eles também seguem diferentes filosofias de design (Phobos é mais imperativo / meta-programação-ish, enquanto o Tango é muito estritamente, e assim semelhante a Java a esse respeito). / p >.

.

Estou me perguntando como é maduro e estável d é, e se for um bom substituto para C / C ++.

Eu ficaria cauteloso em usar qualquer idioma que ainda não tenha sido apoiado por um corpo de padrões como ANSI, ISO ou ECMA.Esse é talvez um indicador de maturidade.Que o dito Java e Delphi, por exemplo, cairia nessa categoria, e enquanto eu não uso essas línguas, eles provavelmente poderiam ser descritos como "maduros".

Outra medida pode ser o número e a qualidade dos livros e artigos escritos para a linguagem.Há um livro para D que estou ciente de Andrei Alexandrescu.Ele também escreveu um longo artigo Na língua para o Dr.. DOBBS, onde ele lida especificamente com a questão da biblioteca padrão.

Eu tive uma boa experiência escrevendo um pequeno jogo em D1 com Phobos e SDL, mas era um projeto muito pequeno.

Na minha opinião, D não é:

  • um fórum oficial da Web, onde as pessoas podem obter ajuda e procurar respostas (não registradores de notícias)
  • Um repositório oficial para muitos SDKs convertidos em D (por exemplo SDL, GTK, etc. Estes são muitas vezes difíceis de encontrar e usar, quando existem em tudo.)

Eu não acho que a questão de substituir C é sobre se um substituto potencial é "bom" ou "maduro" suficiente em um nível teórico, mas sim sobre considerações práticas e o fato de que C é "bom o suficiente" para o queé usado para.A menos que uma linguagem tenha ambientes completos de construção e tempo de execução nativos para cada sistema operacional principal, não é realmente prático para o que C é usado.O fato de que C é a linguagem do POSIX é uma grande parte de toda a questão.

Certamente Outras línguas semi-baixo, como D podem ter ótimas aplicações em campos especializados.Mas é improvável que você veja os principais softwares multiplataforma (servidores da Web, servidores de banco de dados, processadores de texto, navegadores da Web, etc.) escritos em D, porque nenhum sistema operacional (muito menos todos eles) vem com um ambiente de construção ou de tempo de execução. .

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