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?
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?
Respostas:
Pela mesma razão, você não usa um canivete suíço para esculpir uma galinha ...
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 ...
Porque
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.
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.
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.
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.
"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.
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.
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.
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.
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 ...
É 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.
Há uma grande conversa sobre este top por tio Bob Martin - a última linguagem de programação
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).
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. :-)
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.
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?
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.
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":
Em resumo, o design da linguagem é mais difícil e complicado do que isso. Embora, você pode dar uma olhada no Scala .
Lote visual é 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.
http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4
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.
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.
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.
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.