O próximo idioma geração de baixo nível é a melhor aposta ao migrar uma base de código? [fechadas]

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

  •  07-07-2019
  •  | 
  •  

Pergunta

Vamos dizer que você tem uma empresa de gestão de uma grande quantidade de C / C ++, e que pretende iniciar a migração planejamento de novas tecnologias para que você não acabar como empresas COBOL há 15 anos.

Por enquanto, C / C ++ é executado mais do que bem e não há muito dev no mercado para ele.

Mas você quer começar a pensar nisso agora, porque dada a enorme base de código em execução e a sensibilidade de dados, você sente que pode levar 5-10 anos para passar para o próximo passo sem sobrecarregar o orçamento e as equipes de desenvolvimento.

Você já ouviu falar sobre D , começando a ser bastante maduro, e Go , prometendo ser bastante popular.

Qual seria sua escolha e por quê?

Foi útil?

Solução

D and Go provavelmente só irá se tornar tão popular como Python e Ruby são hoje. Cada um deles preencher um nicho, e mesmo que D era para ser um substituto de pleno direito da C ++, ele provavelmente nunca vai adquirir massa suficiente para empurrar C ++ distância. Para não mencionar que ambos não são estáveis ??/ maduro o suficiente, e não se sabe se você vai ter suporte para estes idiomas em 10-20 anos para o hardware então atual e sistemas operacionais. Considerando-se que C / C ++ é muito bonito o linguagem compilada e é usado na grande maioria dos sistemas operacionais e aplicativos de código nativo, é muito improvável que ele vai embora em um futuro previsível.

Outras dicas

C e C ++ são uma combinação praticamente imbatível quando se trata de não gerenciados / línguas nativas / "de baixo nível".

Não é porque eles são os melhores linguagens, longe disso, mas porque eles estão lá, eles fazem o trabalho, e eles são bom o suficiente . Não há dúvida de que a D, por exemplo, é melhor do que C ++, em muitos aspectos. Mas ele falhar no mais importante: a compatibilidade com todo o código existente C ++. Sem essa exigência, a maior parte desse código seria escrito em um hoje de qualquer maneira linguagem gerenciada. A única razão pela qual tantas bases de código usam hoje C ++ é porque eles usaram no ano passado, e que seria muito de uma dor de mudar para outra coisa. Mas se e quando que mudar, eles normalmente não mudar para D. Eles mudar para C # ou Java ou Python.

O problema para D e outros "próximo" línguas competindo pelos mesmos nichos, é que, enquanto eles são melhores, eles não estão inovador o suficiente para as pessoas motivam a realmente mudar para eles.

Assim, C e C ++ estão aqui para ficar. C é improvável a evoluir muito mais longe. É como ela é, e um dos nichos que tem para preenchimento é "simplicidade, mesmo para escritores de compiladores". Nenhuma outra língua é provável que vencê-lo nesse nicho, mesmo que nunca rever a norma novamente.

C ++ está evoluindo muito mais dramaticamente, com C ++ 0x se aproximando, e eles já tem uma lista enorme de recursos que eles querem fazer depois . C ++ não é um beco sem saída de qualquer forma.

Ambos os idiomas estão aqui para ficar. Talvez em 50 anos outras línguas vai tê-los substituído, mas isso não vai acontecer nesta década.

Eu uso atualmente D regularmente. Eu não recomendo ainda para pessoas que escrevem código de produção, porque é muito bleeding edge. I fugir com ele porque a maioria do meu código é protótipos de pesquisa em bioinformática. No entanto, a linguagem está começando a se estabilizar. Andrei Alexandrescu está lançando um livro intitulado "A Linguagem de Programação D" em Março próximo, e agora há um impulso para estabilizar a especificação para a versão 2 da língua a tempo para o livro.

Embora D não é um super formal da C, é o que eu chamaria de um super idiomática exceto para a falta de um pré-processador. Em outras palavras, qualquer código escrito em C adequada (ignorando o pré-processador), pode ser trivialmente traduzido para D sem uma reformulação, porque conceitos C como ponteiros e ASM em linha estão lá e trabalhar o mesmo em D como em C. D também suporta direta ligando para o código C e a biblioteca padrão D inclui a totalidade da biblioteca padrão C.

Além disso, apesar da falta D's de bibliotecas porque ainda é uma linguagem borda sangramento, é o sonho de um escritor biblioteca por causa de suas capacidades de metaprogramação. Se ele decola, ele provavelmente terá algumas libs bastante impressionantes. Para uma prévia desta, ver std.range ou std.algorithm na biblioteca padrão D2 (Phobos). Como outro exemplo, eu implementado um OpenMP-como modelo de paralelismo (foreach paralelo, mapa paralelo, paralelo reduzir, futuros) como uma biblioteca pura em D, sem qualquer apoio especial compilador. (Veja http://cis.jhu.edu/~dsimcha/parallelFuture.html )

Uma vez que você está interessado principalmente no longo prazo, eu diria que dar D 6 meses para estabilizar (dado o livro de Andrei e o impulso atual para estabilizar o idioma, versão 2 deve ser estável até então) e depois tomar um duro olhar para ele.

Edit: Agora que a especificação linguagem principal é relativamente estável e o foco se voltou para o conjunto de ferramentas e desenvolvimento de bibliotecas, eu seria recomendar D para projetos de pequena produção, a menos que você está em um ambiente muito avessos ao risco . projetos maiores que absolutamente deve ter um bom conjunto de ferramentas e suporte biblioteca ainda deve esperar, no entanto.

Se você acredita nos princípios de manufatura enxuta, você deve se esforçar para "decidir o mais tarde possível". O momento deve ser o último momento responsável, ou seja, o momento em que deixar de tomar uma decisão elimina uma importante alternativa.

Eu penso que este princípio pode ser aplicado à sua situação. Em vez de cometer agora a uma linguagem (que você nem sabe que vai ser em torno de 10 anos), você deve manter suas opções em aberto. Talvez refatorar algum do seu código para que ele é um pouco mais genérico ou é construído sobre mais abstrações, de modo que quando ele é de fato necessário para migrar, o processo será mais fácil.

Stick with C e C ++. Eu não vê-lo indo a maneira de COBOL, ele é executado, bem como qualquer coisa, e você não terá nenhum problema em encontrar pessoas para código em C e C ++.

C++ - é relativamente jovem e atualizado ... Tem um grande número de fornecedores do compilador e tem melhorou o tempo todo.

C - seria viver por muito tempo preenchendo a lacuna entre assembler e linguagens de alto nível. Ele também é muito simples e fácil de implementar linguagem, para que ele permaneceria o primeira língua para várias arquiteturas "estranhas" como novos incorporados ou extremamente.

D é promissor, mas ainda especificações e bibliotecas muito novas e instáveis.

Go nasceu há algumas semanas ... nunca use nada de versão 0 para grandes projetos importantes. Também é significativamente mais limitado o C++ ou D.

2019 actualização: C ++ vai ficar em torno para os próximos 10 anos ... (se não, vou corrigir esta resposta, quando não será relevante mais ....)

as empresas razão trabalha com COBOL hoje é b / c eles já têm milhões de código COBOL escritas. se o poderia jogá-lo - eles vão fazer isso de uma vez, por outro lado - as empresas trabalham com C / C ++ como parte de suas necessidades e novos projetos utilizando esta linguagem b / c que não pode / não quero usar Java / c # qualquer outro quadro linguagem baseada -. modo COBOL não é a analogia aqui

Como dsimcha disse que a forma D é atualmente arriscado. No entanto, a língua tem um enorme potencial, é de baixo nível e eu experimentei drasticamente melhor produtividade com D (em vez de C ++). Talvez o que as pessoas sentem com linguagens dinâmicas.

Go é tanto blogue comercializados parece uma piada para mim. Despachando um método de interface não é trivial, e realmente mais lento do que despachar um método herança simples regular.

Se você tem uma enorme base de código a decisão é, naturalmente, mais difícil, eu aconselharia apenas para alternar para novos projetos, não para os já existentes.

Eu não iria se concentrar em uma linguagem, mas mais sobre as bibliotecas que o rodeiam. C ++, em combinação com as bibliotecas de impulso são uma excelente escolha. As pessoas que desenvolvem em C ++ tendem a ter uma melhor compreensão da computação, eu me começou de com Java que fez a minha vida mais fácil, escondendo um monte de coisas fundamentais, que é bom, porém eu realmente só começou a entender a programação uma vez que eu aprendi C / C ++ (ponteiros etc).

Eu reconheço que C ++ pode ser difícil (por exemplo, gerenciamento de memória), então eu acho que é bom ter uma linguagem 'adicionar' onde o desempenho não é essencial e legibilidade (== maintainability) marca alta: Eu recomendo Python para isso.

Existem inúmeras máquinas que executam o software C ++, eu não vê-los fechando tudo de uma vez. Se C ++ vai no caminho de COBOL haverá um enorme mercado para migração de aplicativos. Haverá ferramentas especializadas desenvolvidas para traduzir aplicações C ++ para a linguagem popular do tempo (Z ++ ???).

Então eu acho que o melhor conselho é para atravessar essa ponte quando chegar a ele.

Confira Intel® cilk ++ Software Development Kit se quer despertou o seu interesse no desenvolvimento de C ++ / multi-core. Não vejo C ou C ++ vai desaparecer tão cedo também.

Comparando C * para Cobol é questionável

Comparando C * para Cobol pode levar à conclusão errada. C foi perfeito para o seu dia, um enorme salto em frente na sua introdução, e ainda recebe o trabalho feito hoje.

Eu resumiria Cobol no meu dia mais caridosa com " boa tentativa ".

C e C ++ irá sobreviver por muito tempo, porque eles se encaixam no projeto de lei bem como linguagens de implementação. Isso nunca vai realmente mudar.

Além disso, consideram que a questão negativo principal com C / C ++ é a falta de segurança de memória. Isto tende a ser cada vez menos de um problema como códigos amadurecer. Isto significa que não haverá uma razão séria para substituir os códigos antigos.

Espero que os sistemas de software vai crescer para fora de C. Olhe para a hierarquia de hoje:

  • aplicativo escrito em um quadro como o Rails
  • Aplicação de back-end escrito em Ruby, PHP, Python, C #, qualquer que seja
  • Ruby, PHP, Python ou C implementação # run-time (escrito em C *)
  • OS kernel (escrito em C89)

Eu não acho que as camadas antigas vão desaparecer, e eu acho legados camadas superiores escritos em C e C ++ simplesmente ser apoiado dessa forma por um período indefinido de tempo, acabou sendo eliminados por seus substitutos escritas em Ruby, Python , C #, ou um desenvolvimento futuro.

Nós não temos nenhuma idéia se vai vai encontrar aceitação. Basta estar pelo Google provavelmente não vai ser suficiente.

D? Bem, algumas coisas boas estão sendo dito sobre ele, mas não vai ser tirar qualquer um. Sem base de usuários para falar. D é # 20 em popularidade na TIOBE Índice e caindo rapidamente.

Você pode dizer que a popularidade de um idioma tem pouco a ver com o quão bem ele é adequado para o trabalho da sua empresa. Mas tem muito a ver com o quão fácil será para encontrar pessoas qualificadas para o programa na mesma.

Java está no topo e eu ficaria surpreso se ele foi mais longe nos próximos 20 anos. Não é considerado um sistema de linguagem de programação, mas executa bem o suficiente que existem algumas tarefas que você faria em C ++ que você não poderia, em Java. Certamente estes dias ninguém está disposto a programadores tarefa humanos com o trabalho feito (na perfeição e, muitas vezes mais eficaz) pelo coletor de lixo. Eu, pelo menos considerada Java um avanço significativo em relação C ++ em termos de efetividade de programação.

Estou bastante impressionado com Rubi . É um elegante linguagem, expressiva: Você pode conseguir um lote com não muito código, ainda que o código ainda é maioritariamente legível. Um dos principais princípios de Ruby é ser surpresas hold consistentes e não para o desenvolvedor. Esta é uma idéia muito boa, IMO, ea produtividade aumenta. Na época da grande Rails campanha publicitária (que ainda pode ser em andamento), fiz um amplo espaço ao redor de Ruby porque a sua implementação de referência é muitíssimo lento. No entanto, o JRuby pessoal da Sun tornaram incrivelmente rápido em um JVM, então agora é definitivamente alguma consideração. Rubi fornece fechamentos e um bom punhado de capacidades de programação funcional (veja abaixo para por que isso importante), embora não seja realmente considerada uma linguagem FP. Índice TIOBE: 10 e subindo

.

Algo a considerar para o futuro é o fato de que os fabricantes de CPU ter executado contra um limite de desempenho impostas pela física. Não há mais a CPU 30% mais rápido disponível a cada Natal, como era no passado. Então agora para obter mais desempenho que você precisa mais núcleos. desenvolvimento de software vai precisar de toda a ajuda que pode obter no apoio a programação concorrente multi-core. C ++ deixa você na maior parte sozinho com este, e soluções de Java são horríveis para os padrões modernos.

Em vista disso, há uma certa tendência para a programação funcional (que elimina grande parte dos problemas associados com a concorrência), bem como idiomas com melhor suporte a simultaneidade. Erlang foi escrito especificamente para este e para a capacidade de código de troca em um programa em execução (Ericsson queria uptimes incríveis). Scala é semelhante ao Java, mas com o apoio muito mais forte para programação funcional e simultaneidade. Clojure , idem, mas é um Lisp e não é mesmo no top 50 (ainda !!).

Scala foi desenvolvido acadêmicos, e mostra-o: É sofisticado e francamente pedante sobre tipos de dados; ele tenta ser o canivete suíço de linguagens de programação. Eu acredito que um monte de programadores médio inteligente vai ter problemas para obter um controle sobre Scala. Ruby é menos FP e não faz tanto sobre a concorrência, mas é pragmático, e divertido e fácil de fazer outras coisas. Além disso, em execução na JVM, há uma enorme quantidade de código prontamente disponíveis em bibliotecas Java, que Rubi pode interagir com. Assim:

A minha aposta seria em Ruby, com uma chance fora em Scala. Mas há uma abundância de alternativas!

Java. Para a maioria das coisas de baixo nível Java é muito bem estes dias. Por que ir com uma solução parcial para C / C ++, como D ou Go quando você pode ter algo tão seguro e fácil de desenvolver com como Java? Se você está procurando uma solução em tempo real, D e Go são definitivamente não -lo, para não mencionar que eles são, provavelmente, ainda menos apoiado do que Java.


Java é agora um sistema de linguagem de programação . Eu não vejo como você pode considerar qualquer coisa com construções inseguras, tais como ponteiros "next-gen". A única razão pela qual essas construções inseguras já existiu é porque era a abordagem pragmática para a construção de uma linguagem Turing completa. Não houve preocupação de representar a memória em objetos discretos, porque eles só queriam construir algo que trabalhou . Já existem aplicações duros e moles em tempo real em Java, uma variedade de processadores de bytecode hardware, e mais de 2 bilhões de dispositivos móveis com Java. No máximo, tudo o que se tem a fazer é adicionar algumas construções para interoperabilidade com os dispositivos, o que não seria muito código; mesmo em C / C ++ que você ainda tem que adicionar essas construções ...

O que você está programando? microcontroladores de 8 bits com 1 KB de RAM? Nesse caso, seria inútil usar outra coisa senão o assembler para essa plataforma ...

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