Acho que quando os idiomas são considerados iguais aos softwares comerciais, há sempre uma necessidade constante de adicionar novos recursos para justificar novos lançamentos.
Pode haver ou existem idiomas em que a versão 1.0 é a versão final? É claro que as correções de erros estão isentas disso, mas o conjunto de recursos sempre permanece o mesmo?
Dessa forma, todos os recursos do idioma se encaixam muito bem e não parecem estar aparafusados após o fato de os recursos obsoletos ainda existirem por causa da compatibilidade com versões anteriores.
Eu suponho que algumas línguas acadêmicas são assim? Mas existem idiomas comercialmente bem-sucedidos que seguem essa idéia? A biblioteca que acompanha também é livre para obter novos recursos, mas o idioma sempre permanece constante.
Um exemplo que posso dar é: um dos meus idiomas favoritos em C #, que eu uso com bastante frequência, mais e mais recursos são adicionados a cada versão. Para tirar proveito disso, tenho que deixar as tarefas reais em mãos e gastar um tempo considerável aprendendo-as, em vez de poder pegar conceitos triviais e combiná-los para resolver problemas mais complexos com facilidade.
Então, acho que estou procurando uma abordagem minimalista em que tudo seja consistente, faça sentido e seja o mais ortogonal possível.
Respostas:
Lisp, Smalltalk. Coincidentemente, esses também são os melhores idiomas do grupo.
Tanto o Lisp quanto o Smalltalk são linguagens que são construídas em torno de uma forte metáfora unificadora. A metáfora de Lisp é "tudo é uma lista; essa lista representa dados e código (como funções)". A metáfora de Smalltalk é "tudo é um objeto; a única maneira de invocar um comportamento é passar uma mensagem para um objeto". Essas metáforas permitem que os idiomas sejam estáveis, mínimos e poderosos. O resto está na biblioteca.
As coisas que são chamadas de "estruturas de controle" em todas as linguagens não mínimas (eu queria escrever "inchado") são partes da biblioteca aqui (como um exemplo:
cond
função em lisp;ifTrue:
/ifFalse:
família de mensagens no Smalltalk implementam uma condição, onde outros idiomas possuemif
palavras-chave).Pode-se observar que o Lisp / Smalltalk é uma incorporação quase mínima de seu paradigma e nada mais (Lisp: programação funcional; Smalltalk: programação orientada a objetos).
fonte
O TeX , o sistema de composição tipográfica, tem sido muito estável desde a versão 3.
Não vou afirmar que cumpre o seu "Então, acho que estou procurando uma abordagem minimalista, onde tudo seja consistente, faça sentido e seja o mais ortogonal possível". , mas atende a maioria dos outros critérios.
fonte
C e Fortran são línguas que vêm à mente. Eles são muito estáveis e sua sintaxe é facilmente contida na mente. Além de escrever um código incorreto, há muito poucas surpresas ao usar esses idiomas. Mas eu não os consideraria ótimos idiomas para o rápido desenvolvimento de aplicativos.
Prefiro o rápido avanço de idiomas com recursos que, depois de dedicar um pouco de tempo, tornam meu trabalho consideravelmente mais fácil e o código menos complexo, mantendo a expressividade.
fonte
Behavior
eCollection
hierarquias). Parece-me que C é muito menos estável com todos aqueles C89, C99 e outros enfeites.Outros já disseram Lisp, então devo falar sobre Forth . É muito fácil de implementar e as regras da linguagem são simples de seguir.
É um idioma baseado em pilha com um dicionário de "palavras". Você pode estender o idioma facilmente usando alguns recursos herdados.
Um exemplo MUITO conciso de gráficos de tartarugas:
Em seguida, executá-lo
: squiral -50 50 g 20 0 do 100 f 21 t loop ;
fornece:Crédito para o blog deste funcionário da Microsoft .
fonte
Embora Lisp tenha sido mencionado, a linguagem mais minimalista que conheço é o esquema . Tive dificuldade para entender isso nos cursos universitários onde precisava. Mas isso mudou minha maneira de pensar sobre programação e é muito mínima. Tão mínimos quanto toda a sintaxe são Parênteses
()
e espaços.A única mudança na linguagem foi a decisão de converter os primitivos como
+
,define
(e alguns outros) para built-ins. Isso significa que eles estão disponíveis no lançamento, mas podem ser redefinidos durante o tempo de execução.fonte
Tcl, que foi projetado para ser minimalista em primeiro lugar
A partir daí, na página http://www.tcl.tk/about/features.html , um dos recursos é que é muito fácil aprender e onde programadores casuais ou mesmo não programadores podem usá-lo.
fonte
Existem poucas línguas que permaneceram relativamente inalteradas desde a sua criação fora das línguas esotéricas que dificilmente serão o que é desejado (eu odiaria tentar escrever algo significativo no Befunge (embora ele também tenha sido modificado desde o seu 1.0 original lançamento)).
Os idiomas com maior probabilidade de satisfazer o desejo de não precisar aprender nada de novo são os idiomas especializados em "cola" entre outros programas. Idiomas como jcl , bash e similares. Linguagens de script simples também podem se encaixar nisso - awk é um dos líderes.
Uma vez que alguém sai deste reino, o desenvolvimento acontece. A linguagem ou os frameworks. Em algumas situações, é 'difícil' codificar para o idioma sem obter parte de alguma estrutura que está revertendo rapidamente.
Muitos idiomas têm algum grau de compatibilidade com versões anteriores. Ainda é possível escrever o Java 1.4 hoje, embora provavelmente não seja recomendado - as estruturas que as pessoas escrevem para ele estão mudando mais rapidamente que a linguagem. Ainda é possível encontrar os compiladores f77 e f90 por aí para uma especificação de idioma que não mudou em 20 ou 40 anos. C, Objetivo C, C ++ ainda podem ser codificados para especificações mais antigas da linguagem - não é necessário continuar atualizando o código porque uma nova especificação foi lançada ou uma nova estrutura está disponível.
Algumas línguas têm uma história inalterada bastante longa, porque a própria linguagem é suficientemente poderosa para fazer o que se quer. Lisp é o principal candidato nesta área. Em seguida, também cai no campo "não mudou muito".
Indo para linguagens de script mais tradicionais, veja TCL, Perl e Python. Evite coisas que estão atualmente no domínio 'moda' que estão experimentando uma explosão de popularidade por algum motivo ou outro (ruby e javascript, estou olhando para você). O TCL mudou ao longo dos anos , embora um de seus objetivos seja tentar manter a consistência do design. O Perl e o Python modernos têm alguma consistência no design, apesar de admitir que novos recursos podem parecer atraídos (embora não seja necessário usá-los).
fonte
Eu acho que o Python é um candidato razoável para uma linguagem com o minimalismo como um de seus objetivos de design. Ele é baseado em torno de um número relativamente pequeno de conceitos fundamentais, ea versão 3 tentou, entre outras coisas, simplificar a linguagem um pouco por remover alguns recursos.
(É verdade que não é o mesmo que um conjunto de recursos que permaneceu o mesmo da versão 1, mas acho que é uma maneira bastante arbitrária de avaliar idiomas, já que os autores podem chamá-lo de versão 1 sempre que quiserem.)
fonte
Eu acho que a abordagem de design "minimalista" seria exemplificada pelo Tcl. Como exemplo, você pode usar o comando {catch} com os valores {return -code n} para implementar qualquer estrutura de controle que sua imaginação possa conceber; o Perl teve que esperar uma década para (oficialmente) obter {switch} - (não que o Perl sempre precisou). Você também verá que o Dodekalogue http://wiki.tcl.tk/10259 cobre completamente a gramática do Tcl - o resto, qualquer que seja o paradigma de programação com o qual você deseja trabalhar, pode ser expresso nessa gramática.
fonte