Por que não pode haver uma linguagem de programação "universal" que serve a todos os propósitos? [fechadas]


57

por que não combinar os melhores recursos de todas as linguagens de programação existentes e encaixá-la em uma linguagem de programação universal?


23
O termo "melhor" é subjetivo, portanto você nunca teria um melhor aceito universalmente. É claro que existem algumas linguagens adequadas para amplas faixas de desenvolvimento em todas as plataformas. C ++ e Java são os dois principais.
GrandmasterB

5
@GrandmasterB Você esqueceu o C # #
Daniel Little

15
Existe, ele se chama 'C'
Martin Beckett

9
nós, como espécie, temos uma capacidade inata de discordar (em virtude de nossa individualidade); portanto, nunca concordamos com o que é universalmente necessário e, portanto, nunca haverá um (pelo menos não criado por seres humanos!)
Nim

9
Uma linguagem de programação universal? Você quer dizer, análogo à linguagem humana universal que todos mudaram para tantos anos atrás?
precisa saber é o seguinte

Respostas:


116

Pela mesma razão, você não usa um canivete suíço para esculpir uma galinha ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

O canivete suíço geralmente possui uma lâmina, além de várias ferramentas, como chaves de fenda, abridores de latas e muitas outras. Esses acessórios são armazenados dentro do cabo da faca através de um mecanismo de ponto de articulação ...

O design da faca e sua flexibilidade levaram ao reconhecimento mundial ...


26
Pela mesma razão, você não leva uma minivan para uma corrida de arrancada. Pela mesma razão, você não leva uma pistola de água para um duelo.
Chris

19
@ Chris E se for um duelo de pistola de água?
Rusty

44
Pela mesma razão, você nunca entra com um siciliano quando a morte está em jogo.
Rusty

6
Se você tivesse um canivete suíço que fizesse todas as coisas necessárias para construir uma casa, seria bom para alguma delas?
Brad Mace

4
Essa resposta é uma analogia horrível. Talvez se você tivesse escrito: porque o idioma francês permite uma fidelidade de expressão diferente da língua inglesa, eu poderia ter gostado mais da analogia. Mas linguagens de computador não são 'coisas', nem linguagens humanas. A resposta correta é: nós não sabemos. Isso exigirá mais informações sobre como os humanos expressam a lógica e como eles chegam a esse ponto. Além disso, alguns idiomas são 'meta-idiomas', capazes de expressar outros DSLs. Devemos incluí-los na sua pergunta?
Dibbeke

80

Porque

  1. ninguém quer reescrever todo o código legado.
  2. É difícil concordar com todos os propósitos
  3. Depois de reunir uma lista abrangente de propósitos, eles mudam antes que você possa construí-lo.
  4. Alguém começaria uma linguagem completamente diferente devido a um novo objetivo.
  5. Microsoft
  6. maçã
  7. Código aberto
  8. O que faríamos com todos os peixes Babel?
  9. Não foi possível nem universalizar o SQL.

Você parou de repente. Eu estava esperando uma daquelas listas "Top 10" ha-ha-only-serious.
Jeffrey Hantin 18/09/10

4
+1 por impedir, pelo menos por enquanto, uma campanha "Save the Babel Fish". Malditos hippies.
Rusty

2
quanto ao peixe Babel, faça sushi!
precisa saber é o seguinte

11
Em relação ao ponto 1, todo o código legado eventualmente precisará ser reescrito de qualquer maneira, usando a última moda em código / bibliotecas ou será incapaz de executar de maneira eficaz sem uma quantidade ridícula de custos de suporte.
Michael

38

O que você tem na programação é um domínio de problemas muito grande. Esse domínio varia extremamente e em várias direções.

É por isso que os controladores de vôo incorporados são escritos em C e os sites são escritos em PHP, Java, Rails, .NET e vários outros.

Para o controlador de vôo incorporado, tenho cerca de 128k de memória para trabalhar e, além disso, se meu código for uma exceção sem tratamento, o avião cair, 200 pessoas morrem e eu sou processado no valor de US $ 1 bilhão, e tenho que enviar engenheiros para todos aeroporto do mundo para consertar aeronaves aterradas, perdendo meus clientes em US $ 10 milhões / dia. Eu tenho que trabalhar com uma linguagem muito rígida e com um pequeno número de partes móveis que podem dar errado.

Para meu aplicativo Web, tenho vários GB de memória para trabalhar, mas a velocidade da rede é limitada (em menor grau todos os dias, mas esse é provavelmente o maior limite da Web). Vou procurar uma linguagem que me oferece muitos recursos e produz resultados que podem ser transmitidos o mais rápido possível. Eu realmente não me importo se meu site for desativado, talvez eu perca algumas vendas (US $ 100) e precise corrigir o caso de uso que bombardeou, não é grande coisa.

Os sites não são escritos em C há mais de 15 anos (alguém faz algum script cgi?) E, até onde eu sei, os controladores de vôo estão apenas começando a olhar para C ++, mas mesmo assim de maneira muito restrita.


3
A maioria dos sites que realmente ganham dinheiro perderá mais de US $ 100 se sofrerem um tempo de inatividade significativo. Não é para sugerir que seja comparável a uma situação de vida ou morte, mas ainda assim, isso está subestimando o risco mais do que um pouco.
Aaronaught 30/08/2012

3
Você tem alguma idéia de como o flakey é o Facebook? Eles publicaram recentemente o código push a cada 37 minutos. O site deles é constantemente copiado de uma maneira ou de outra e eles têm um milhão de tickets em sua lista de pendências. O ponto é que com a web ninguém vai morrer, você "pode" perder algumas vendas, mas, no geral, não há muito risco. A maioria dos problemas que você enfrenta são só vai afetar alguns clientes não toda a base
Bill Leeper

24
  1. Vá para a sua garagem (ou a garagem dos seus pais).
  2. Abra a caixa de ferramentas.
  3. Se você vir mais de uma ferramenta, pense em como isso se aplica à sua pergunta.

Se você não tem uma caixa de ferramentas ou apenas um desses pequenos martelos com as pontas da chave de fenda na alça oca, então eu tenho uma grande simpatia por você.

A sério. Se você for a uma oficina, seu mecânico possui apenas uma única ferramenta "faça tudo" em seu baú? Ele (ou ela) é um profissional, com ferramentas de nível profissional projetadas especificamente para executar várias tarefas de reparo de automóveis.

Da mesma forma, os desenvolvedores profissionais de software devem possuir um conjunto suficiente de ferramentas para realizar seu negócio. Se você abrir a caixa de ferramentas e vir apenas [o software equivalente a] uma chave de fenda Philips, não poderá se considerar um profissional.

Você pode girar um parafuso com uma chave de boca, uma chave de caixa, uma chave de catraca ou uma chave ajustável. Você pode até girar um parafuso com um alicate de junta, desajeitadamente, com danos pequenos a graves. Mas é bastante difícil girar um parafuso com uma marreta.


Isso é para incluir a "garagem dos pais". Isso realmente deixa mais claro, já que eu não tenho garagem.
Dan Rosenstark

5
Uma analogia melhor seria uma linguagem, é como uma caixa de ferramentas e não como uma ferramenta individual.
Tom Hawtin - defina

4
Pode haver 20 ferramentas diferentes na caixa. Mas aposto que você só precisa de um idioma para descrevê-los.
ThomasX

2
Atualmente, a caixa de ferramentas é mais parecida com as bibliotecas disponíveis para o idioma em questão.
Michael

18

Um tipo diferente de resposta para as outras - eu realmente acho que há potencial para uma linguagem se tornar "universal", permitindo os recursos e paradigmas de muitas outras línguas, embora não seja talvez uma linguagem estritamente projetada em que você possa estar pensando.

Para usar a analogia de brettmjohnson acima, a idéia de que cada linguagem de programação é a ferramenta dentro de uma caixa (ou em um canivete suíço) é a suposição que todo mundo está fazendo, mas é realmente uma suposição defeituosa.

E se a linguagem de programação fosse a caixa de ferramentas?

Quero dizer, e se você puder adicionar e remover recursos do idioma como quiser e ter sua própria caixa de ferramentas com as ferramentas necessárias - mesmo que as ferramentas sejam para propósitos diferentes.

O conceito já existe parcialmente. Por exemplo, idiomas como Nemerle permitem adicionar sintaxe ao idioma e, como tal, você pode pegar "o melhor recurso do idioma X" e adicioná-lo ao Nemerle (ou ao seu). Isso não significa necessariamente escrever suas próprias macros o tempo todo - cada idioma (ou paradigma) pode ser definido dentro de uma macro em uma biblioteca padrão - de forma que você possa import Haskell; import Prolog;e comece a escrever os dois idiomas como se fosse parte de um seu idioma?

A questão então é: como você consegue que os recursos de diferentes linguagens / paradigmas funcionem entre si? Embora eu não possa responder isso, estruturas como .Net e JVM oferecem algumas das soluções - as linguagens são pelo menos parcialmente compatíveis devido à maneira como são compiladas. Você pode pegar qualquer código escrito em C #, por exemplo, e usá-lo no F # sem queixas.

O 'problema' com a solução como é hoje é que o uso dessas linguagens juntas exige que você as crie como projetos separados, que não podem se referir um ao outro - você só pode ter uma referência unidirecional. A barreira do idioma é que cada projeto compila todos os seus arquivos separadamente no Common Intermediate Language antes que qualquer outro projeto possa acessá-lo.

Um trampolim para remover essa barreira seria permitir que códigos de diferentes idiomas (por exemplo, C # e F #) fossem compilados dentro do mesmo projeto. Em teoria, você pode compilar cada arquivo separadamente (ou em grupos - se eles tiverem tipos parciais ou referências circulares) e, em seguida, compilar arquivos de um idioma diferente que possa acessar os objetos já compilados (CIL). Você precisaria definir estritamente a ordem de compilação para que isso funcione - mas a ordem de compilação já é necessária no caso de F #.

Enfim, não estou dizendo "definitivamente pode haver uma linguagem universal". Estou sugerindo que existe o potencial para uma interoperabilidade muito melhor entre os idiomas do que o que existe atualmente. Na realidade, não é provável que melhore muito em breve, apenas por causa da enorme quantidade de trabalho necessário para implementar uma linguagem e as bibliotecas, as ferramentas etc. necessárias para usá-lo.


4
Todo o mundo não é um PC. A maioria dos processadores neste planeta possui menos de 64 KB de espaço total de memória. Uma linguagem que pode ser usada nesses processadores deve ser tão reduzida em relação àquelas que a maioria deste fórum parece usar que sua linguagem universal acabará como uma linguagem assembly aprimorada. Eu acho que seria chamado "C".
uɐɪ

10

Os melhores recursos de alguns idiomas conflitam com os melhores de outros.

Por exemplo: reflexões com reconhecimento de tipo são um recurso muito bom, mas não valeria muito em uma linguagem de tipo fraco, mas a digitação solta também pode ser um benefício real às vezes.

Mesmo em um idioma, você nem sempre pode usar os melhores recursos ao mesmo tempo, porque eles entram em conflito.


Mas se esse características foi habilitado Accordind / desativado com as necessidades, por exemplo: você pode permitir que tipo reflexões conscientes e desativar o recurso linguagem fracamente tipada e assim por diante ...
killown

2
e se você tentasse combinar vários recursos de idiomas em um idioma que pudesse fazer qualquer coisa, você obteria muita redundância, confusão, bugs de todas as maneiras diferentes de usar combinações diferentes de recursos e muitas esforço desperdiçado especificando qual paradigma você está usando nesta linha.

killown você está certo, mas resolver o problema tornando o idioma ultra-configurável dificulta o uso do idioma descrito pela fennic. Eu gosto de uma linguagem flexível que permita coisas, mesmo que sejam perigosas em alguns casos, mas o nível de configuração que você precisaria para combinar alguns conceitos tornaria mais complexo do que simplesmente voltar e escrever a solução em C de baixo nível ou algo assim. .
Bill

11
+1 para recursos conflitantes
Frank Shearar

Acho que o problema não é apenas o fato de os recursos da linguagem estarem em conflito, mas sim o fato de muitas linguagens assumirem uma estrutura subjacente, que inclui recursos que impõem um certo nível de sobrecarga, mas permitem que determinadas operações sejam simplificadas. Os idiomas também costumam ter certos "padrões de uso típicos" associados a eles. A seleção de quais recursos devem ser incluídos em uma estrutura e quais padrões de codificação devem ser empregados envolvem trade-offs; e combinações diferentes de recursos e padrões são melhores para aplicativos diferentes.
Supercat 20/08

7

"Jack de todos os comércios, mestre de ninguém." vem à mente.

Alguns programas exigem velocidade, outros grandes quantidades de memória ou acesso rápido ao disco. Alguns idiomas são bons em um, mas ruins em outro - não acho que você tenha um idioma que seja bom.

Portanto, enquanto você pode escrever praticamente qualquer programa em qualquer idioma, o que você recebe não é garantido como o "melhor" programa que você pode escrever para resolver esse problema.


4

Há sim. Nenhum ferramenta é o melhor de tudo, mas algumas ferramentas como muitas linguagens de programação servem para todos os efeitos, não melhor para todos.

Você pode escolher a melhor ferramenta para o trabalho, mas existem linguagens de programação que podem ser usadas para todos os fins e você pode escolhê-las. Eu não recomendo, mas é possível.


4

Por causa de algo que chamo de "paradoxo de generalização / especialização", que provavelmente tem outro nome e realmente não é um paradoxo

Quanto mais generalizada a linguagem de programação, mais código é necessário para realizar alguma coisa. Quanto mais especializada a linguagem, menos você pode realizar com ela.


2
Eu concordo com você, exceto que é possível ter bibliotecas especializadas em um idioma generalizado.
dan_waterworth

@dan: Concordou, mas apenas se o idioma se concentrar em fornecer recursos aos escritores da biblioteca. Meus dois idiomas favoritos são D e Python. Ambas são linguagens bastante generalistas (especialmente D), mas ambas possuem muitos recursos para escritores de bibliotecas, portanto, você pode criar suas próprias bibliotecas para lidar com coisas especializadas. I desprezar super-Domain Specific Languages como Matlab e R.
dsimcha

4

Os idiomas moldam a maneira como as pessoas pensam. Isso é verdade para idiomas naturais. Se uma criança conhece apenas um idioma com os números "um, dois, muitos", ensinar matemática a criança é ... difícil. (Desculpe, não tenho o link). Em inglês, falamos de momentos diferentes como se fossem lugares - portanto, é possível imaginar o conceito de viagem no tempo. Em alguns outros idiomas, a idéia de viajar no tempo nunca ocorreria aos seus falantes.

Isso também vale para linguagens de programação.

Portanto, se tivermos uma única linguagem de programação, todos pensarão em todas as tarefas computacionais exatamente da mesma forma. Portanto, não exploraremos alternativas, e a melhor maneira de fazer algo permanecerá desconhecida.

O mais próximo que temos de uma linguagem universal é o C. C mapeia muito de perto os conceitos subjacentes de hardware (como as coisas realmente são feitas no hardware) e os programas em todos os * idiomas são conversíveis em C. (Veja como o CFront usou compiladores C para assembler O problema com C é basicamente que as conversões acima mencionadas não fazem sentido do ponto de vista dos programadores em C.

"Lambdas" sempre foram possíveis em C. A sintaxe está desativada, incluindo o código espalhado por todo o projeto / arquivo, portanto, não era uma solução preferida. Com uma versão no-capture / upvalue / etc, defina uma função em outro lugar e passe um ponteiro para a função. (consulte qsort () ) Para usar lambdas com valores capturados, a quantidade e a complexidade do código que você precisa escrever aumentam muito - até onde eu sei, ninguém jamais escreveu o código para usar esse método de programação em C. Ao contrário dos idiomas em que os lambdas fazem parte do idioma e são basicamente usados ​​em todos os lugares.

A principal diferença entre C e C ++ é como você pode solicitar que o C ++ cuide das coisas ; mas você não poderá mais ver, a partir de apenas uma única linha de código, o quanto realmente está pedindo. A resposta é: depende (de todo esse outro código).

Algumas linguagens de programação são excelentes para tarefas específicas, mas onde a maioria dos programas atuais em uso no mundo simplesmente não faria sentido se programados nessa linguagem. Ou seja, se a linguagem pudesse ser usada para implementar esse programa, o que não é um dado.


2
"Em alguns outros idiomas, a idéia de viajar no tempo nunca ocorreria aos seus falantes". Citação necessária. A hipótese Sapir-Whorf não é de modo algum amplamente aceita, especialmente em sua forma forte.
Muhammad Alkarouri

4

A impossibilidade por mérito técnico de se ter uma linguagem universal? Isso é total absurdo. Você poderiater uma linguagem universal que cubra todas as bases. O problema é principalmente histórico: idiomas diferentes foram inventados para fazer coisas diferentes e serem usados ​​em comunidades diferentes. Muitos deles ficaram presos. Adicione a essas preferências (vi! Emacs! Wait, eu quis dizer Java! C #, espere, quis dizer Microsoft, Open Source, etc. etc. etc.) e incorporação geral de acidentes históricos ... Veja as linguagens naturais em uma pequena área massa como alguns países europeus para ver o quão louco esse tópico pode se tornar. Algumas cidades têm seu próprio orgulho e alegria, um pequeno dialeto que apenas eles falam. Nações e comunidades de programação não são tão diferentes, nem as comunidades de programação são mais racionais. Se fossem, todos nós falaríamos esperanto e programaríamos na Universal alguma coisa ...


11
O problema é mais profundo que isso. Quanto mais opções você disponibilizar, mais precisará ser especificado explicitamente, em vez de ser a única maneira implícita de como as coisas funcionam nesse idioma. Os problemas ficam mais óbvios se, em vez de comparar Java com C #, você comparar Java com Prolog. Ter os recursos de ambos em um idioma complicaria a sintaxe da linguagem composta. Uma escolha mais razoável pode ser reduzir ao mínimo a sintaxe e permitir que qualquer recurso seja implementado como uma biblioteca de metaprogramação. Isso é basicamente o que o Lisp faz, embora seu núcleo não seja suficientemente baixo para alguns trabalhos.
precisa saber é o seguinte

4

É um erro pensar que "combinar todos os recursos" criará uma linguagem melhor.

É mais provável que você acabe com uma bagunça inchada, complexa e ilegível.

Um bom design de linguagem requer escolhas e trocas a serem feitas. Indiscutivelmente, as melhores / mais revolucionárias / mais bem-sucedidas linguagens são aquelas que extraem algo e fornecem uma alternativa melhor ao invés de adicionar coisas novas.

  • Linguagens de programação estruturada (C, Pascal) - remove "goto", substitui por procedimentos e loops estruturados etc.
  • Java - remove "gerenciamento manual de memória", substitui por GC / memória gerenciada
  • Haskell / Clojure - remove "estado mutável não controlado"
  • Lisp - remove a maioria das "sintaxes da linguagem", substitui por uma árvore homoicônica flexível de expressões-s

Há uma grande conversa sobre este top por tio Bob Martin - a última linguagem de programação


"Linguagens de programação estruturada (C, Pascal) - remove" goto ", substitui por procedimentos e loops estruturados etc." - Desculpe, você está errado lá: C tem goto. Mas eu gosto do resto da resposta. A principal coisa que C faz é deixar que você não se importe exatamente onde está tudo na memória e o que está em qual registro, a que horas, e oculta o contador do programa (em termos do endereço exato em que está sentado novamente). quase em um nível de precisão de montagem com um goto).
precisa saber é o seguinte

0

Não há nenhuma ferramenta que possua todos os melhores recursos. Por exemplo, um bom recurso do Javascript e do Scheme é que eles são pequenos; portanto, se você começar a compactar recursos, já terá perdido esse.

Ainda o Cobra parece promissor na direção de ter todos os recursos interessantes de outros idiomas. :-)


0

Porque se você criar um idioma assim, será outro idioma novo. Você pode ter uma grande base de fãs, mas todos os outros idiomas ainda existirão.

C ainda existe, embora muitos novos idiomas tenham sido inventados desde então.

Você poderia dizer que python é uma linguagem universal, mas também há ruby.

A razão pela qual existem muitas linguagens é simplesmente porque existem muitos programadores e alguns deles gostam de criar novas linguagens.

A razão pela qual não existe uma linguagem universal única com a qual todos concordam é que a programação como um ofício não é ditada por alguma instituição que toma toda a decisão. Todo mundo é livre para fazer o que quiser.

É uma coisa boa.


Eu também argumentaria que não é bom nem ruim, mas sim um artefato do fato de que a engenharia de software não tem nem cem anos de idade e é muito imatura em comparação com todos os outros tipos de engenharia existentes.
Michael

0

Com tudo o que está escrito até agora, é difícil acrescentar muitas justificativas novas, mas vou apresentar algumas.

  • Evolução: Não são apenas os sistemas biológicos que são introduzidos, sofrem mutações e passam por uma competição de sobrevivência do mais apto por recursos e um nicho a ser chamado. A competição é boa e leva as coisas adiante.

  • Maturidade: produzimos linguagens de computador há provavelmente menos de um século. Ainda não podemos ter a resposta, porque ainda nem sabemos todas as perguntas.

  • Gênese separada: Não tenho certeza da palavra certa para isso, mas no mundo existem muitos sistemas de escrita que começaram em muitas regiões geográficas. Pense no cuneiforme que foi ditado em parte pelas exigências de esculpir em tabletes de argila. Pense nos alfabetos sânscrito, grego, hebraico, romano e árabe. Hieróglifos, o método chinês de escrever com mais de 6000 símbolos, compartilhado em muitos países do leste asiático. Pense em alfabetos mistos mais modernos com base fonética como cirílico, katakana e hirigana. Eu não sou lingüista, então não chame as imprecisões muito severamente, mas quando as culturas em todo o mundo precisam de algo, elas o criam e o fazem por necessidade. As linguagens de computador surgiram quando havia muita comunicação mundial e, como os sistemas Imperial e Métrico, vieram de lugares com uma poderosa liderança de idéias. Porém, as linguagens de programação atendem a muitas culturas diferentes (algumas delas culturas corporativas), portanto refletem as pessoas que as criaram. As linguagens de computador vêm com legados culturais que moldaram seu design e uso. Na cultura do kernel do sistema operacional, é improvável que C e C ++ sejam preteridos em breve para Java (ou vice-versa), porque permitem a geração de código nativo, acoplamento próximo / eficiente com hardware para criar camadas de abstração de hardware e possuem uma base considerável instalada.

  • Design do design: linguagens de programação surgem usando diferentes paradigmas organizacionais. COBOL e Ada eram de comitês que faziam parte do DOD, que tinham muita hierarquia. Se bem me lembro, C, C ++, Java e provavelmente muitos outros vieram de um ou de um pequeno número de designers. Fred Brooks compara os resultados do comitê versus as abordagens visionárias de seu artigo, Design of Design (http://www.youtube.com/watch?v=pC-DlX-PaF4). Se hoje nos sentássemos para selecionar um Da Vinci ou um comitê para definir a linguagem de programação universal, saberíamos quem ou o quê por qual método ele deveria ser arquitetado?


0

Talvez um pouco diferente de tudo isso:

O que é um idioma? Para ser ridiculamente simples, é vocabulário, sintaxe e semântica.

Qual é a primeira coisa que você faz com uma linguagem de programação?
Você define coisas - classes, variáveis, métodos - e amplia o vocabulário e a semântica.

Por quê? Então agora você pode dizer coisas que não podia dizer antes.
Goste ou não, você criou uma nova linguagem para fins especiais.

IMHO, o que procurar em uma linguagem de uso geral é se facilita a criação de linguagens de uso especial.


0

Além do argumento do canivete suíço (que tem um ponto - é mais difícil projetar uma boa linguagem de amplo espectro do que uma específica de domínio - mas isso não significa que essa linguagem não seria possível e uma boa ideia), há problemas com "combinar os melhores recursos":

  • Para os recursos de linguagem, "melhor" é subjetivo ou pelo menos (interminavelmente) discutível.
  • Alguns recursos não são compatíveis; um bom recurso de um idioma pode explodir quando combinado com um bom recurso de outro.
  • Ainda não terminamos de apresentar novos recursos.

Em resumo, o design da linguagem é mais difícil e complicado do que isso. Embora, você pode dar uma olhada no Scala .



-2

Existe uma linguagem de programação universal. É chamado de "linguagem de máquina" e tudo em qualquer outra linguagem de computador é finalmente executado como linguagem de máquina.

Com o que se parece? Uma sequência de 0 a 9 e AF.

Mas é uma droga de se usar. Portanto, Alan inventa um idioma que pode ser traduzido para linguagem de máquina e é mais apropriado para o que Alan deseja fazer. Bill inventa um idioma diferente para o que Bill quer fazer. Em pouco tempo, você terá Cobol, Fortran, Lisp e Java. Todos eles são apenas versões simplificadas da linguagem de máquina, mais fáceis de escrever certos tipos de programas, mas mais difíceis ou impossíveis de escrever outros tipos de programas. Um é bom para contabilidade, outro é bom para controlar o ônibus espacial.


6
A linguagem de máquina não é universal; nem mesmo perto. Cada máquina tem seu próprio idioma.
hasen 24/03

3
Além disso, não é uma sequência de 0 a 9 e AF. São 1 e 0.
David Conrad

@hasen @David, não é razoável sugerir, como @Andy, que cada idioma é, de um ponto de vista, um idioma específico de domínio, construído em outros idiomas?
Armand

Eu disse 0-9 e AF porque era isso que você precisava saber para usar os códigos multi-punch em uma máquina de digitação. Parece 0-1 ou 0-15 ou 0-255, se você usar números, dependendo do tamanho de um pedaço de cada vez. E Hansen está certo; todo tipo de máquina possui seu próprio idioma. Atualmente, quase todos os PCs aceitam códigos 80386; até meu telefone vai! Mas o iPad não.
precisa

@hasenj e com características muito diferentes. A mentalidade necessária para programar um 6502 é diferente da programação de um x86 e, por sua vez, diferente de um chip RISC. Muito longe de ser universal.

-2

Só porque,

não há um computador UNIVERSAL.

não é uma forma de placa UNIVERSAL.

não é um programador UNIVERSAL.

e nem mesmo um cliente UNIVERSAL.

: P

Então, simplesmente precisamos de um diferente para outro. ;)


-2

A maioria das respostas aqui se concentra no uso da melhor ferramenta para cada problema. Eu não acredito que este seja um motivo suficientemente bom.

Se você olhar para grandes empresas, geralmente a empresa tenderá a usar um único (ou um pequeno número) de idiomas e tecnologias, mesmo que para um projeto específico haja uma linguagem melhor.

Isso é feito porque os benefícios que surgem da padronização aprimorada, suporte mais fácil, compartilhamento de código etc. são (na maioria das vezes) maiores que o valor agregado de um idioma específico.


11
Nunca vi nenhum projeto corporativo decente usando menos de quatro idiomas diferentes. E não acredito em nenhum desses "benefícios" ao selecionar ferramentas impróprias. Isso nunca funciona.
SK-logic

-3

Acho que todas as respostas "porque você não esculpe estátuas com um lápis" estão perdendo o objetivo.

Quem aqui, TRULY, seleciona um idioma antes de cada novo projeto?

A verdade é que só precisa de algumas linguagens de programação, e mundo da programação seria melhor assim: as pessoas iriam se concentrar em fazer o linguagem de script em vez de serem espalhadas por python / ruby ​​/ perl / younameit, por exemplo.

O C # é programado no / para Windows (tudo bem, existe o Mono, alguém aqui executa um C # no aplicativo Mono todos os dias?) E isso faz com que os usuários comprem o Windows7 / 8, e isso gera dinheiro para a Microsoft.
Outras empresas fazem o mesmo, então o código aberto conhece melhor, e também o mister gênio ... e temos muitas linguagens parecidas, é apenas a natureza egocêntrica da humanidade.


Concordamos - na maioria das vezes, realmente precisamos apenas de uma linguagem "segura" de alto nível, uma linguagem de programação de sistema "insegura" de baixo nível, todas as linguagens assembly (uma por CPU, são inevitáveis, mas ocultas), além de algum propósito especial (domínio específico) idiomas (por exemplo, SQL). O verdadeiro problema é que é impossível alguém declarar uma linguagem "obsoleta" (mesmo quando o designer da linguagem tenta fazer isso - por exemplo, Python 2 vs. Python 3). Mais idiomas novos a cada ano e nenhum idioma antigo descartado significa que eventualmente haverá mais idiomas em uso do que os programadores para usá-los. ;-)
Brendan

-5

Devemos procurar a economia para responder a essa pergunta. Se economizasse dinheiro comercial para ter apenas um idioma, nós o teríamos. Eles padronizavam e exigiam que todos usassem. As outras línguas definhavam em edifícios acadêmicos empoeirados e nos porões de entusiastas de olhos arregalados. Isso não aconteceu, portanto, não deve haver incentivo ao lucro em uma linguagem de programação universal, caso contrário, uma já teria evoluído naturalmente.


11
"Dinheiro economizado" é (apesar dos melhores esforços dos contadores) um conceito vago e nebuloso ao longo do ciclo de vida. Assim como os mecânicos falharam na padronização em um único tamanho de chave inglesa, não importa um kit de ferramentas inteiro, a engenharia de software falhou na padronização porque existem muitos critérios para selecionar uma ferramenta (linguagem) ou mesmo o processador / sistema operacional / ambiente
Andrew
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.