Existem alguns tipos de software que não podem ser desenvolvidos pelas principais linguagens de programação?

8

Gostaria de saber se algumas das principais linguagens de programação absolutamente não podem ser usadas para criar alguns tipos muito específicos de software.

Por linguagem de programação principal, quero dizer os gostos de C ++, C #, Java, Ruby, Python. Por "não pode ser desenvolvido", quero dizer que não pode ser desenvolvido ou não é realista fazê-lo devido ao desempenho, dificuldade de implementação, etc.

Eu sempre pensei que qualquer linguagem de programação poderia ser usada para resolver qualquer problema, mas ultimamente tenho pensado que algumas linguagens são inadequadas para alguns projetos.

Se você puder fornecer exemplos de tais aplicativos, isso será apreciado. Obrigado.

mbillard
fonte
15
Ser inadequado para uma tarefa e incapaz de executar uma tarefa são duas coisas muito diferentes.
Covar
@Covar, eu mudei taskpara project. Espero que seja menos confuso.
11118 mbillard
Você está ciente do conceito de equivalência de Turing?
1
Relacionado (à questão de como alguns idiomas são adequados para casos específicos): paulgraham.com/avg.html
Doc Brown

Respostas:

13

Linguagens de nível superior, especialmente aquelas que não fornecem nenhum meio de mexer com a memória diretamente (da sua lista: Java, Ruby, Python) não são adequadas para a programação de sistemas. Para dar exemplos concretos, eu não implementaria (parte de - por exemplo, driver) um sistema operacional ou uma máquina virtual / intérprete no Python.

O inverso não é tão próximo do "impossível", mas escrever, por exemplo, scripts de utilidade ou um protótipo para software complexo e complicado, como um compilador em, por exemplo, C ++ (duplamente em C), pode ser tão complicado que se torna um matador de motivação, considerando que você recebe muitos encargos menores no topo do problema real.


fonte
Ainda pode ser feito - veja, por exemplo, jnode.org, que é um sistema operacional escrito em Java.
1
@ ThorbjørnRavnAndersen Sim, esses projetos de pesquisa aparecem de tempos em tempos. No entanto, eles estão longe dos projetos do mundo real. E se você tentar implementar, por exemplo, gerenciamento de memória em Java (ou Python, ou qualquer outra linguagem gerenciada por memória), terá que restringir severamente a linguagem e acabar com algo que está muito longe do código idiomático, ou terá que implementar muitas extensões (consulte o framework GC do PyPy e o MMTK do Jikes RVM).
7

Absolutamente, tudo depende do hardware subjacente

Por exemplo, se eu fosse programar o tear Jaquard , não seria possível usar o C ++ para fazer isso porque não existe nenhum compilador para esse hardware. Eu diria que nenhum compilador seria possível porque o hardware não suporta muitos dos requisitos que o C ++ exigiria para funcionar como uma linguagem.

Uma extensão disso está no mundo dos computadores analógicos, que funcionam de maneira totalmente diferente dos computadores digitais que prevalecem atualmente.

No entanto, você pode considerar que, dado o tempo suficiente, poderá criar um compilador / montador para qualquer máquina von Neumann (entrada-> processador / armazenamento-> saída). Mas algumas máquinas von Neumann, como o MU0 , são simples demais para permitir sua execução. Mais informações sobre MU0 para o leitor interessado .

Gary Rowe
fonte
5
Sim, no entanto, se o tear Jaquard pudesse simular uma máquina de Turing, você poderia escrever um compilador c ++ para ela, se assim o desejasse.
Whatsisname
2
@whatsisname, a equivalência de Turing é interessante apenas se o tempo usado não for um problema.
Além da equivalência de Turing, também há o problema de E / S: ele possui um mecanismo de comunicação com o mundo exterior durante a execução? Caso contrário, a linguagem é como um cérebro em um tanque . Se houver pelo menos uma entrada e um método de saída, é possível fazer pelo menos um raspador de tela.
rwong 12/05
6

Sim, há certas coisas que não podem ser feitas com vários idiomas. Aqui estão alguns dos principais critérios que afetam isso:

  • Nível baixo : drivers de dispositivo e módulos de controle de hardware podem exigir acesso a locais específicos de memória e instruções de montagem. Se o idioma não fornecer uma maneira de fazer isso, você simplesmente não poderá usá-lo (muito poucos oferecem locais e montagens de ponteiros personalizados)
  • Desempenho : em alguns casos, não se trata apenas de levar muito tempo; se você tem um feed de dados contínuo ou ao vivo, não tem escolha, mas é rápido o suficiente para processá-lo em tempo real.
  • Binário : para produção comercial, seus requisitos podem ser distribuir apenas binários, muitas linguagens semelhantes a scripts não possuem formas binárias.
  • Memória : para dispositivos de área ocupada e pequena, você tem uma quantidade muito limitada de memória (ou outros recursos). Os idiomas que precisam de VMs ou grandes bibliotecas padrão não podem ser direcionados para essa máquina.
  • Tempo real : além de ser rápido o suficiente, certos dispositivos precisam responder a eventos dentro de um prazo garantido com base em um determinado evento. Um idioma precisaria oferecer suporte ao evento e garantir o tempo de processamento (algo como um coletor de lixo impediria isso).
  • Matemática : muitos cálculos exigem uma biblioteca completa de funções matemáticas e tipos de dados apropriados. Geralmente, isso requer detalhes de implementação específicos. Algumas linguagens de script podem não especificar isso suficientemente bem ou falhar ao fornecer as principais funções.
  • Compatibilidade : Alguns hardwares simplesmente não possuem compiladores / intérpretes para determinados idiomas.

Essas são algumas das coisas que eu poderia pensar. Tenho certeza que existem mais. Mas o ponto importante é que sim, existem requisitos-chave limitantes que impedirão o uso de um idioma.

edA-qa mort-ora-y
fonte
1
Muitos desses problemas não são inerentes ao idioma, mas são problemas de nossas implementações atuais.
Whatsisname
1
@whatsisname: Até certo ponto, mas diferentes idiomas se prestam a diferentes implementações. Além disso, algumas linguagens não podem ser otimizadas tanto quanto outras, o exemplo clássico são as rotinas matriciais em que as implementações do Fortran podem ser otimizadas de maneira muito mais agressiva do que as restrictimplementações pré- C.
David Thornley
A coleta de lixo pode ser (e foi) feita em tempo real.
APENAS MINHA OPINIÃO correta
4

Eu sempre pensei que qualquer linguagem de programação poderia ser usada para resolver qualquer problema, mas ultimamente tenho pensado que algumas linguagens são inadequadas para alguns projetos.

Sim, isso está correto e sempre foi. "Incapacidade" e "Inadequado" são muito diferentes.

Você pode bater um prego em uma placa com a ponta de uma chave de fenda. Você pode apertar um parafuso com a ponta de um martelo. Mas o martelo é muito mais adequado e é uma ferramenta melhor para pregos, e uma chave de fenda é uma ferramenta melhor para fixadores rosqueados.

Linguagens de programação são ferramentas. Certas ferramentas são melhores em determinadas tarefas.

whatsisname
fonte
1

A única coisa que posso considerar irrealista é o desenvolvimento de drivers de dispositivos de baixo nível em uma linguagem altamente virtualizada como Java ou C # - se você estiver tentando manipular o hardware, a VM mais incrível (que torna tantas coisas tão agradáveis ​​e simples) vai ficar no seu caminho. Tenho certeza de que isso poderia ser feito, se você realmente quisesse, mas isso envolveria muitas adaptações de VM para fazê-lo funcionar.

Qualquer outra coisa pode ser feita praticamente em qualquer idioma que você quiser.

Michael Kohne
fonte
1

Sistema incorporado vem à mente. Não é realista programar um roteador, por exemplo, ou algum tipo de robótica usando uma linguagem como C #. Embora existam projetos como o netduin alavancando a micro estrutura, talvez eu tenha refutado meu ponto de vista.

aceinthehole
fonte
1
Não é necessariamente irrealista usar C # para um roteador ou robótica. Se você pode reduzir o tempo do programador usando C #, pode fazer o aumento das necessidades de computação valer a pena. Isso se aplica a qualquer idioma / ambiente.
Whatsisname
@whatsisname: Obviamente, roteadores muito sérios são programados em VHDL. :-)
Zan Lynx
0

As chamadas linguagens 4GL são limitadas pelo ambiente de programação ao qual estão vinculadas. Você não pode programar uma GUI com ABAP, por exemplo. Tudo o que se pode fazer é como uma GUI no ambiente limitado de um cliente SAP (e isso só pode ser executado conectado a uma instância do SAP).

Ingo
fonte