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

54

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

    
por killown 19.09.2010 / 12:35
fonte

23 respostas

116

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

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

The Swiss Army knife generally has a blade, as well as various tools, such as screwdrivers and can openers and many others. These attachments are stowed inside the handle of the knife through a pivot point mechanism...

The design of the knife and its flexibility have both led to worldwide recognition...

    
por 19.05.2013 / 01:39
fonte
79

Porque

  1. ninguém quer reescrever todo o código legado.
  2. É difícil concordar com todos os propósitos
  3. Depois de criar uma lista abrangente de finalidades, elas mudariam antes que você pudesse criá-la.
  4. Alguém iniciaria um idioma completamente diferente devido a um novo propósito.
  5. Microsoft
  6. Apple
  7. Código aberto
  8. O que faríamos com todo o Babel Fish?
  9. Não foi possível tornar o SQL universal.
por 24.03.2011 / 16:49
fonte
38

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

É por isso que os controladores de voo 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 128k de memória para trabalhar e, além disso, se meu código receber uma exceção não tratada, o avião cai, 200 pessoas morrem e eu sou processado por $ 1B e tenho que enviar engenheiros para todos os aeroportos do mundo para consertar aeronaves que estão em terra perdendo meus clientes $ 10M / dia. Eu tenho que trabalhar com uma linguagem que é muito apertada e tem um pequeno número de partes móveis que podem dar errado.

Para meu aplicativo da web, eu 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). Eu vou estar olhando para uma linguagem que me dá uma tonelada de recursos e produz saída que pode ser transmitida o mais rápido possível. Eu realmente não me importo se meu site cair, talvez eu perca algumas vendas (US $ 100) e tenha que consertar o caso de uso que foi bombardeado, não é grande coisa.

Web sites não foram 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 uma forma muito restrita. / p>     

por 20.08.2012 / 06:53
fonte
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 tem um daqueles pequenos martelos com as chaves de chave de fenda na alça oca, então eu tenho muita simpatia por você.

Sério. Se você vai a uma loja de automóveis, o seu mecânico tem apenas uma única ferramenta para fazer tudo em seu toolchest? 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 de software profissionais devem possuir um conjunto suficiente de ferramentas para realizar seu comércio. Se você abrir sua caixa de ferramentas e ver apenas [o equivalente em software de] 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 deslizante, desajeitadamente, com danos menores a graves. Mas é muito difícil virar um parafuso com uma marreta.

    
por 24.03.2011 / 16:57
fonte
18

Um tipo diferente de resposta para os outros - eu realmente acho que existe potencial para uma linguagem se tornar "universal", permitindo as características e paradigmas de muitas outras linguagens, embora talvez não seja um linguagem estritamente projetada que você pode estar pensando.

Para usar 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 falsa.

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

Quero dizer, e se você puder adicionar e remover recursos da linguagem como quiser e ter sua própria caixa de ferramentas com as ferramentas de que precisa nela, mesmo que as ferramentas tenham objetivos diferentes.

O conceito já existe parcialmente. Por exemplo, idiomas como Nemerle permitem que você adicione a sintaxe a o idioma e, como tal, você pode usar "o melhor recurso da linguagem X" e adicioná-lo a Nemerle (ou ao seu próprio). 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 tal forma que você possa import Haskell; import Prolog; e começar a escrever as duas linguagens como se fosse faziam parte da sua língua?

A pergunta então é: como você consegue que os recursos de diferentes linguagens / paradigmas funcionem uns com os outros? Embora eu não possa responder a 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 de F # sem reclamações.

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

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

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

    
por 12.04.2017 / 09:31
fonte
10

Os melhores recursos de algumas linguagens conflitam com os melhores recursos de outras pessoas.

Por exemplo: Reflexões com reconhecimento de tipo são um recurso realmente interessante, mas não valeria muito em uma linguagem fracamente tipada, mas a digitação frouxa também pode ser um benefício real em alguns momentos.

Mesmo dentro de um idioma, nem sempre é possível usar todos os melhores recursos ao mesmo tempo, porque eles conflitam entre si.

    
por 17.09.2010 / 21:16
fonte
7

"Jack of all trades - mestre de ninguém." vem à mente.

Alguns programas requerem velocidade, outros grandes quantidades de memória ou acesso rápido ao disco. Algumas línguas são boas em uma, mas ruins em outra - eu não acho que você teria uma língua que fosse boa de todo.

Assim, enquanto você pode escrever praticamente qualquer programa em qualquer idioma, o que você recebe não é garantidamente o melhor programa que você poderia escrever para resolver esse problema.

    
por 17.09.2010 / 21:51
fonte
4

Existe. Nenhuma ferramenta é a melhor para tudo, mas algumas ferramentas como muitas linguagens de programação servem para todos os propósitos, 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 propósitos e você pode escolhê-las. Eu não recomendo, mas é possível.

    
por 18.09.2010 / 16:04
fonte
4

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

The more generalized a programming language the more code it takes to accomplish something. The more specialized the language the less you can accomplish with it.

    
por 24.03.2011 / 05:34
fonte
4

As linguagens moldam a maneira como as pessoas pensam. Isso é verdade para idiomas naturais. Se uma criança conhece apenas uma língua com os números "um, dois, muitos", ensinar matemática infantil é ... difícil. (Desculpe, eu não tenho o link) Em inglês, falamos sobre diferentes momentos como se fossem lugares - daí o conceito de viagem no tempo é possível de imaginar. Em algumas outras línguas, a idéia de viagem no tempo nunca ocorreria em seus falantes.

Isso também é válido para linguagens de programação.

Portanto, se tivermos uma única linguagem de programação, todos pensarão em todas as tarefas computacionais exatamente iguais. Assim, 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 de hardware subjacentes (como as coisas realmente são feitas no hardware) e os programas em cada * linguagem são convertíveis em C. compiladores para tarefas assembler) O problema com C é basicamente que as conversões mencionadas acima não fazem sentido do ponto de vista de um programador 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 sem captura / upvalue / etc, defina uma função em outro lugar e passe um ponteiro para a função. (veja qsort () ) Para usar lambdas com valores capturados, a quantidade e a complexidade do código que você tem que escrever aumentam muito - até onde eu saiba, ninguém nunca escreveu o código para usar este método de programação em C. Ao contrário de idiomas onde lambdas são parte da linguagem, e basicamente usado em todos os lugares.

A principal diferença entre C e C ++ é como você pode pedir ao C ++ para cuidar de coisas para você; mas você não pode mais ver, a partir de uma única linha de código, o quanto está realmente 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 em todo o mundo simplesmente não faria sentido se fosse programada nesse idioma. Ou seja, se a linguagem poderia ser usada para implementar esse programa, o que não é um dado.

    
por 24.03.2011 / 17:32
fonte
4

A impossibilidade dos méritos técnicos de ter uma Linguagem Universal? Isso é um absurdo total. Você poderia ter uma linguagem universal que abrange todas as bases. O problema é principalmente histórico: diferentes idiomas foram inventados para fazer coisas diferentes e serem usados em diferentes comunidades. Muitos deles ficaram presos. Acrescente a essas preferências (vi! Emacs! Espere, eu quis dizer Java! C #, espere que eu quisesse dizer Microsoft, Open Source, etc. etc. etc.) e incorporação geral de acidentes históricos ... Veja as linguagens naturais em uma pequena terra Massa como alguns países europeus para ver o quão louco este tópico pode se tornar. Algumas cidades têm seu próprio orgulho e alegria, um pequeno dialeto que só eles falam. As nações e as 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 algo para o Universal ...

    
por 22.04.2011 / 01:33
fonte
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.

O bom design da linguagem requer escolhas e compromissos a serem feitos. Indiscutivelmente as melhores / mais revolucionárias / mais bem sucedidas linguagens são aquelas que eliminam algo e fornecem uma alternativa melhor em vez de adicionar coisas novas. Por exemplo

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

Há uma ótima palestra sobre esse top por parte do tio Bob Martin - The Last Programming Language

    
por 20.08.2012 / 13:23
fonte
0

Não há nenhuma ferramenta que tenha todos os melhores recursos. Por exemplo, um bom recurso do Javascript e do Scheme é que eles são pequenos, então se você começar a empacotar recursos, você já perdeu em um destes.

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

    
por 24.03.2011 / 00:12
fonte
0

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

C ainda existe, apesar de muitas novas linguagens terem sido inventadas desde então.

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

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

A razão pela qual não existe uma única língua universal que todos concordem é que a programação como uma arte não é ditada por alguma instituição que toma toda a decisão. Todo mundo é livre para fazer o que quiser.

Isso é bom.

    
por 24.03.2011 / 06:38
fonte
0

Com tudo o que está escrito até agora, é difícil adicionar uma nova lógica, mas vou lançar algumas.

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

  • Maturidade: Fazemos linguagens de computador há menos de um século. Não podemos ter a resposta ainda porque nem sabemos todas as questões ainda.

  • 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 em cuneiforme que foi ditado em parte pelas exigências de esculpir em tabletes de argila. Pense nos alfabetos em sânscrito, grego, hebraico, romano e árabe. Hieróglifos, o método chinês de escrita bonita com mais de 6000 símbolos compartilhados 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 linguista, portanto, não atire as imprecisões de forma muito severa, mas quando as culturas em todo o mundo precisam de algo, elas as criarão e farão delas 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 strong liderança de ideias. Mas as linguagens de programação servem muitas culturas diferentes (algumas delas culturas corporativas), então elas refletem as pessoas que as criaram. Idiomas 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 logo desaprovados para Java (ou vice-versa) porque permitem a geração de código nativo, o acoplamento próximo / eficiente com o hardware para criar camadas de abstração de hardware e uma base instalada considerável.

  • Design de Design: Linguagens de programação surgem usando diferentes paradigmas organizacionais. COBOL e Ada eram de comitês que faziam parte do DOD e 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ê com as abordagens visionárias em seu artigo, o Design of Design (http://www.youtube.com/watch?v=pC-DlX-PaF4). Se nos sentássemos hoje para selecionar um Da Vinci ou um comitê para definir a linguagem de programação universal, saberíamos quem ou por que método deveria ser arquitetado?

por 20.08.2012 / 21:02
fonte
0

Talvez um pouco diferente de tudo isso:

O que é uma linguagem? Para ser ridiculamente simples, é o vocabulário, a sintaxe e a semântica.

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

Por quê? Então agora você pode dizer coisas que você não poderia dizer antes. Goste ou não, você criou uma nova linguagem de propósito especial.

IMHO, a coisa a procurar em uma linguagem de propósito geral é se facilita a criação de linguagens de propósito especial.

    
por 20.08.2012 / 21:49
fonte
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 linguagem específica do domínio - mas isso não faz significa que tal linguagem não seria possível e uma boa idéia), há problemas em "combinar os melhores recursos":

  • Para recursos de idioma, "melhor" é subjetivo, ou pelo menos (interminável) 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 acabamos de lançar novos recursos.

Em suma, o design da linguagem é mais difícil e mais complicado do que isso. Embora você possa querer dar uma olhada em Scala .

    
por 30.08.2012 / 01:58
fonte
-2

O Visual Batch é uma tentativa de linguagem de programação personalizável. O link abaixo mostra como essa interface de programação pode ser adaptada para atender às necessidades de uma linguagem de programação universal.

link

    
por 29.01.2011 / 07:47
fonte
-2

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

Como se parece? Uma sequência de 0-9 e A-F.

Mas é uma puta para usar. Então Alan inventa uma linguagem que pode ser traduzida em linguagem de máquina e é mais apropriada para o que Alan quer fazer. Bill inventa uma linguagem diferente para o que Bill quer fazer. Em pouco tempo você tem Cobol e Fortran e 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ícil, ou impossível, de escrever outros tipos de programas. Um é bom para contabilidade, outro é bom para controlar o ônibus espacial.

    
por 24.03.2011 / 01:34
fonte
-2

Só porque,

não há um computador UNIVERSAL.

não é uma placa UNIVERSAL.

não é um programador UNIVERSAL.

e nem mesmo um cliente UNIVERSAL.

: P

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

    
por 24.03.2011 / 13:24
fonte
-2

A maioria das respostas aqui se concentra em usar a melhor ferramenta para cada problema. Eu não acredito que isso seja uma boa razão.

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 alguma 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.

    
por 24.03.2011 / 13:50
fonte
-4

Eu acho que todas as respostas "porque você não esculpe estátuas com um lápis" estão faltando o ponto.

Quem aqui seleciona verdadeiramente um idioma antes de cada novo projeto?

A verdade é que precisamos apenas de algumas linguagens de programação, e o mundo da programação seria melhor assim: as pessoas se concentrariam em tornar a a linguagem de script melhor em vez de estarem espalhadas por python / ruby / perl / younameit por exemplo.

C # é programado em / para windows (tudo bem, há Mono, qualquer um aqui roda um C # sob Mono app todos os dias?) e isso faz os usuários comprarem o Windows7 / 8, e isso faz dinheiro para a Microsoft. Outras empresas fazem o mesmo, então open source sabe melhor, então mister gênio também ... e nós temos muitas linguagens parecidas, é apenas a natureza autocentrada da humanidade.

    
por 20.08.2012 / 11:03
fonte
-5

Devemos olhar para a economia para responder a essa pergunta. Se economizasse dinheiro para ter apenas um idioma, nós o teríamos. Eles padronizariam e exigiriam que todos os utilizassem. As outras línguas iriam definhar em prédios acadêmicos empoeirados e nos porões de entusiastas de olhos arregalados. Isso não aconteceu, portanto, não deve haver nenhum incentivo de lucro em uma linguagem de programação universal ou uma evolução natural até agora.

    
por 20.08.2012 / 06:13
fonte