De uma linguagem de programação razoavelmente comum, qual você considera a mais alucinante?
Tenho escutado muitos podcasts de programação e demorado algum tempo para aprender algumas novas linguagens que estão sendo consideradas futuras e importantes. Não estou necessariamente falando sobre o BrainFuck , mas qual linguagem você considera uma que desafia os paradigmas comuns de programação?
Para mim, fiz alguns programas funcionais e lógicos (por exemplo, Prolog ) na década de 1990, então não posso dizer que encontro algo especial por lá.
Estou longe de ser um especialista nisso, mas até hoje a linguagem de programação mais alucinante para mim é o Perl . Não porque o "Hello World" é difícil de implementar, mas há tanta flexibilidade lexical que algumas das soluções mais difíceis podem ser decompostas de forma tão poética que eu tenho que sair do meu terminal para clarear a cabeça. Não estou dizendo que provavelmente venderia uma implementação comercial de software, apenas que há uma razão distinta pela qual o Perl é tão (in) famoso. Basta olhar para a lista básica de livros.
Então, qual é a sua linguagem alucinante que promove suas melhores práticas e programação ?
fonte
Respostas:
APL
Esta linguagem é incrivelmente poderoso e muito concisa, ele irá prejudicar o seu cérebro.
Para iniciantes, é difícil usar sem um teclado personalizado ou pelo menos uma sobreposição de teclado para exibir todos os símbolos obscuros que ele usa.
Então a linguagem é do paradigma baseado em vetor / array e é especializada em álgebra linear complexa. A versão original nem tinha construções de loop, tudo e qualquer coisa feita ao encadear operadores de matriz bastante incomuns.
strip_tags()
qualquer pessoa? (emprestado da Wikipedia)fonte
Haskell . Está muito perto de ser puramente funcional, ao qual a maioria das pessoas não está acostumada; muito exigente, o que é útil quando você sabe o que está fazendo, mas frustrante até então; tem uma sintaxe bastante enigmática e altamente simbólica, o que é ótimo quando você a conhece, mas é opaca antes disso ... a lista continua.
Além disso, é simplesmente impossível formatar as coisas de uma maneira que pareça boa para mim.
fonte
Prolog. Era tão diferente de qualquer outro idioma que eu tinha usado quando fui exposto a ele pela primeira vez. Eu gosto, então não odeio a sintaxe nem nada.
fonte
!
).Eu concordo com você no Perl. É a sintaxe mais feia que eu já vi. Eles dizem que nem mesmo os desenvolvedores Perl conseguem se lembrar do que escreveram no dia seguinte.
fonte
Eu teria que dizer adiante . A notação de que todas as operações são manipulações de pilha. Em sua forma pura, não há variáveis locais para usar.
fonte
Ruby .
Isso me faz querer me matar:
(Eu poderia ter a sintaxe exata errada, mas você entendeu).
fonte
DateTime.Now.AddMonths(1);
? Esses recursos dificilmente tornam o código mais legível. (Não estou dizendo que C # tem a melhor sintaxe Você pode transferi-lo para as convenções idiomas e ainda será aplicada..)Brainfuck
Qualquer um que possa honestamente escrever essa zombaria de um idioma nem precisa de um tópico como esse.
Olá Mundo (ponteiros, esquerda; explicação, direita):
fonte
Lisp é a minha mais recente linguagem alucinante.
Levei as mônadas e a programação funcional de Haskell comigo e agora tenho macros para trabalhar. Estou entrando no CLOS e ainda não toquei no sistema de condições.
fonte
CAXUMBA
Esta é uma linguagem que aparece de vez ao tempo em histórias online e tem a honra de ser adicionado em uso de produção real armazenar informações críticas de segurança de vida (isto é, registros de pacientes). No entanto, esse também é um idioma em que a dispersão é apreciada e funções como as seguintes podem aparecer no código de produção (exemplo do artigo da Wikipedia sobre o tópico):
fonte
Eu diria Coq , ou outra implementação da teoria dos tipos dependentes. O sistema de tipos de Haskell não é muito expressivo comparativamente. Mover para um sistema de tipos mais expressivo (por exemplo, o cálculo de construções (CoC)) permite que você faça algumas coisas legais, como provar propriedades de programas no idioma e incorporar fortes invariantes em seus tipos, que podem ser verificados estaticamente.
fonte
Objetivo-C . Para ser justo, eu o estudei extremamente brevemente e não gostei da sintaxe à primeira vista, tanto que desisti dela.
Como é uma linguagem comum (relativamente) comum (principalmente para desenvolvimento em Mac / iPhone / iPad ), tenho certeza de que é realmente um pouco decente quando você se acostuma.
fonte
[foo bar]
útil se você perceber que é apenas um açúcar sintático para oobjc_sendMsg(foo, "bar");
qual, por sua vez, procura o ponteiro de função (é uma "barra" especial, não genérica). Você percebeu que é totalmente datilografado?[receiver doStuff:arg]
ele é muito parecido com um java dinâmicaEu escolho Mercury .
Mercury inclinou minha mente, mostrando-me que mesmo línguas puras pode fazer I / O .
A maneira como isso funciona é que as funções de E / S no Mercury recebem um valor de 'estado do mundo' e retornam um novo valor de 'estado do mundo'. Portanto, as funções de E / S em Mercúrio transformam o mundo e, portanto, a pureza é mantida.
fonte
Tem que ser Scheme , certamente. Tentar explicar
call-with-current-continuation
sempre machuca meu cérebro, mas depois que você entende, você pode criar soluções incrivelmente elegantes.Deseja parar parcialmente através de um algoritmo e controle manual para outra pessoa? Certo!
Deseja retomar a mesma continuação várias vezes? Claro!
Deseja pausar a execução de um algoritmo, redefinir uma função e retomar a execução com a pilha original, mas com um estado global atualizado? Sem problemas! E faça isso várias vezes com alterações diferentes no estado global, mas com o mesmo ponto de reentrada da pilha? Para você, senhor, qualquer coisa!
fonte
Eu costumava usar um editor antigo chamado TECO (Text Editor and COmparator), que era uma linguagem de modificação de texto muito poderosa, com todos os tipos de recursos de macro. Não me lembro da famosa citação exata sobre o assunto, mas a essência era "qualquer coleção aleatória de 20 caracteres é quase sempre um programa legítimo da TECO e alterará seu arquivo (é um editor) de uma maneira fundamentalmente imprevisível. um conversor de Fortran para PL1 em cerca de uma página do código TECO.
fonte
Assembléia tem sido a mais "perturbadora" para mim, mas estou apenas começando.
fonte
Lisp . Aprender é uma série de pequenas epifanias, cada uma das quais mudará totalmente a maneira como você pensa em resolver problemas de programação.
fonte
REBOL
Ele é construído em torno da noção de código como dados, como é o Lisp . Os adeptos da linguagem têm dificuldade em explicar quais são seus benefícios exclusivos em relação a outras abordagens nessa família e geralmente acabam dando de ombros e dizendo algo como "Bem, o cara que criou o AmigaOS veio com ela, a biblioteca padrão é incluída e microscópica, e quando você o receber, será como tomar a pílula vermelha da Matrix e você nunca mais voltará. "
O problema disso é que ele é peculiar e não definiu com precisão quais programadores são seu mercado. Mas também em parte porque muitas das pessoas que a defendem são péssimas em explicar . :)
Mas Douglas Crockford costumava ser um fã, inspirou-se nisso com a criação do JSON e sugeriu que as pessoas investigassem isso em outubro de 2010:
Eu acho que vale a pena olhar para quem quer explicar como eles pensam sobre o design e a extensibilidade da linguagem. Agora que é de código aberto (após 18 anos de desenvolvimento proprietário), as isenções de responsabilidade usuais que eu costumava dar para mantê-lo à distância já não se aplicam ... vale a pena dar uma olhada! A comunidade até saiu do seu programa proprietário de mensagens baseado em Rebol e começou a conversar no Stack Overflow (para minha surpresa!)
fonte
Eu diria pelo quanto muitas pessoas evitam ter que escrevê-lo diretamente, que os desenvolvedores acham que o SQL é alucinante. Eu acho que muitas pessoas simplesmente não pensam em termos de conjuntos.
fonte
Puro
Pure é uma linguagem funcional baseada na reescrita de termos. Eu gosto, é esparsa e expressiva, embora um pouco discreta.
fonte
Pode não ser o mais alucinante, mas foi de longe o mais difícil para mim aprender (eu pensei que Haskell e linguagem assembly fossem mais fáceis!)
Esse é o conjunto de linguagens HDL , notavelmente VHDL (e Verilog em menor grau)
Superar o fato de que toda "função" é executada ao mesmo tempo é incrivelmente difícil e você não pode evitar a mudança para paralelizar absolutamente tudo. Obviamente, isso é apenas uma linguagem de programação de fronteira.
fonte
Tcl
Comecei a aprender uma vez, mas como aprendi o suficiente para fazer sentido, realmente não gostei da maneira como fazia meu cérebro parecer. Isso parece se qualificar como alucinante.
fonte
Linguagem de máquina de Turing , obviamente. É extremamente poderoso, comprovadamente superior a todas as outras linguagens de programação existentes e garantido que machucará seu cérebro se você tentar usá-lo.
fonte
C
Ponteiros, gerenciamento de memória e conversão de tipos, todos pensam muito e são fáceis de errar. A falta de estruturas de dados internas, como tabelas ou listas de hash, significa que você precisa criar sua própria ou encontrar uma biblioteca de terceiros e aprender sua API.
fonte
JESS (Java Expert System Shell). Incorporada em um ambiente Java, essa adaptação do CLIPS é uma linguagem de sistema especialista funcional baseada em regras. Tentando mapear objetos Java reais como fatos e encontrar as perguntas certas para obter os resultados que você espera é um verdadeiro desafio. Menos ainda, se você estiver familiarizado com a teoria especialista em sistemas, mas quando você vem de uma mentalidade pura de OOP, ela não se encaixa bem. NOTA: CLIPS não é Lisp, mas parece com isso. Mais uma mente dobrada.
Depois de passar pela curva de aprendizado inicial, é bastante poderoso e muito rápido encontrar as respostas.
fonte
O TeX conta como uma linguagem, uma vez que é Turing completo , e eu o considero bastante preocupante. Uma linguagem para escrever matemática (e livros sobre programação) ...
fonte
CIL
CIL, a linguagem intermediária comum que todos os programas .NET compilam, uma espécie de assembly orientado a objetos. É interessante para mim tentar escrever ou ler código nele e comparar suas construções com as do C # que eu já conheço. É uma boa maneira de aprender mais o que o .NET faz nos bastidores. E pode ser útil para coisas como geração dinâmica de código ou reescrita de códigos compilados existentes usando o Mono Cecil .
fonte