Pergunta

Atualmente estou primariamente um D programador e estou olhando para adicionar outro linguagem para minha caixa de ferramentas, de preferência um que suporta os hacks metaprogramação que simplesmente não pode ser feito em uma linguagem estaticamente compilado como D.

Eu ler sobre Lisp um pouco e eu gostaria de encontrar uma linguagem que permite que algumas das coisas legais que Lisp faz, mas sem a sintaxe estranha, etc. de Lisp. Eu não quero começar uma guerra chama linguagem, e tenho certeza que Ruby e Python têm suas vantagens e desvantagens, por isso vou listar o que é importante para mim pessoalmente. Diga-me se Ruby, Python, ou alguma outra língua seria melhor para mim.

Importante:

  1. Boa metaprogramming. Capacidade para criar classes, os métodos, etc. funções, em tempo de execução. De preferência, mínima distinção entre o código e os dados, o estilo de Lisp.
  2. Nice, limpo, sintaxe são e, semântica intuitivos consistentes. Basicamente, um bem pensado, divertido de usar, linguagem moderna.
  3. Vários paradigmas. Ninguém paradigma é certo para cada projeto, ou mesmo a cada pequena subproblema dentro de um projeto.
  4. Uma linguagem interessante que realmente afeta a maneira como se pensa sobre programação.

Um pouco importante:

  1. Desempenho. Seria bom se o desempenho foi decente, mas quando o desempenho é uma prioridade real, eu vou usar D vez.
  2. Bem documentado.

Não importante:

  1. tamanho Comunidade, a disponibilidade biblioteca, etc. Nenhum destes são características da própria linguagem, e todos podem mudar muito rapidamente.
  2. disponibilidade
  3. Job. Eu não sou um tempo inteiro, programador profissional. Eu sou um estudante de graduação e de programação é tangencialmente relevantes para a minha pesquisa.
  4. Qualquer recursos que são projetados principalmente com projetos muito grandes trabalhado por um milhão de macacos de código em mente.
Foi útil?

Solução

Não há realmente uma enorme diferença entre Python e Ruby, pelo menos em um nível ideológico. Para a maior parte, eles são apenas diferentes sabores da mesma coisa. Assim, eu recomendaria ver qual deles corresponde ao seu estilo de programação mais.

Outras dicas

Eu ler sobre Lisp um pouco e eu gostaria de encontrar uma linguagem que permite que algumas das coisas legais que Lisp faz, mas sem a estranha sintaxe, etc. de Lisp.

Não nós todos.

mínima distinção entre o código e os dados, o estilo de Lisp

Infelizmente, a distinção mínima entre o código e os dados e sintaxe "estranho" são conseqüências do outro.

Se você quiser sintaxe de fácil leitura, você tem Python. No entanto, o código é não representado em qualquer um dos comumente usados ??alto-estruturas de dados. Ele falha, como a maioria das línguas fazem-no item nº 1 da sua lista de 'importante'. Isso torna difícil para fornecer ajuda útil.

Você não pode ter tudo. Lembre-se, você não é o primeiro a ter esse pensamento. Se algo como o idioma ideal existiu, estaríamos todos a usá-lo. Desde que o mundo real fica aquém de seus ideais, você vai ter que re-priorizar sua lista de desejos. A seção "importante" deve ser reorganizada para identificar o que é realmente importante para você.

Honestamente, tanto quanto instalações Metaprogramação ir, Ruby e Python são muito mais semelhantes do que alguns dos seus aderentes gostam de admitir. Esta avaliação de ambas as ofertas de linguagem uma bonita comparação bom / revisão:

Então, basta escolher um com base em alguns critérios. Talvez você gosta de Rails e quer estudar esse código. Talvez SciPy é o seu lugar. Olhe para o ecossistema de bibliotecas, comunidade, etc, e escolher um. Você certamente não vai perder em algum nirvana metaprogramming base na sua escolha de qualquer um.

Disclaimer:. Eu só dabble em qualquer idioma, mas eu, pelo menos, escrito programas de trabalho pequenos (e não apenas scripts rápidos, para o qual eu uso Perl, bash ou GNU make) em ambos

Ruby pode ser muito bom para os "múltiplos paradigmas" ponto 3, porque ele trabalha duro para tornar mais fácil para criar linguagens específicas de domínio. Por exemplo, navegar on-line e olhar para um par de pedaços de Ruby on Rails código, e um par de pedaços de código Rake. Eles são ambos Ruby, e você pode ver as semelhanças, mas eles não se parecem com o que você normalmente pensamos como a mesma língua.

Python parece-me ser um pouco mais previsível (possivelmente correlacionada com 'clean' e 'sãos' ponto 2), mas eu realmente não sei se isso é por causa do próprio ou apenas que ele é normalmente usado por pessoas idioma com valores diferentes. Eu nunca tentou magia profunda em Python. Eu certamente dizer que ambas as línguas são bem pensado.

Ambos marcar bem em 1 e 4. [Edit: na verdade 1 é bastante discutível - não há "eval" em ambos, tão comum em linguagens interpretadas, mas eles são dificilmente conceitualmente puro. Você pode definir fechamentos, métodos de atribuir a objetos, e outros enfeites. Não tenho certeza se isso vai tão longe quanto quiser.]

Pessoalmente acho Rubi mais divertido, mas, em parte, isso é porque é mais fácil de obter o pensamento distraído de maneiras legais para fazer as coisas. Eu realmente utilizado Python mais. Às vezes você não quer legal, você quer continuar com ele para que ele fez antes de deitar ...

Nenhum deles é difícil de entrar, então você poderia simplesmente decidir fazer a sua próxima tarefa menor em um, e um depois que na outra. Ou pegar um livro introdutório sobre cada a partir da biblioteca, skim-ler os dois e ver o que você pega.

Você considerou Smalltalk? Ele oferece uma sintaxe muito simples, clara e extensível com refletividade e capacidades de introspecção e um ambiente de desenvolvimento totalmente integrado que aproveita essas capacidades. Ter um olhar para algum do trabalho que está sendo feito em Squeak Smalltalk por exemplo. Um grande número de pesquisadores que usam Squeak sair na Squeak lista de discussão e #squeak na freenode , assim você pode obter ajuda em questões complexas de forma muito fácil.

Outros indicadores de sua relevância atual: ele roda em qualquer plataforma que você se importar em nome (incluindo o iPhone ); Gilad Bracha está baseando seu trabalho Novilíngua em Squeak; a equipe V8 cortou seus dentes na Smalltalk VMs ; e Dan Ingalls e Randal Schwartz recentemente voltou ao trabalho Smalltalk depois de anos no deserto.

Boa sorte com sua pesquisa -. Deixe-nos saber o que você decidir, no final

Lisp satisfaz todos os seus critérios, incluindo desempenho, e é a única língua que não tem sintaxe (estranho). Se você abster-lo em tal incrivelmente mal informados / base equivocada e, consequentemente, perder a experiência de usar por exemplo Emacs + SLIME + CL, você estará fazendo-se um grande desserviço.

Seus 4 pontos "importantes" levar a Rubi exatamente, enquanto que os 2 pontos "pouco importantes" governado por Python. Que assim seja.

Você está descrevendo Ruby.

  • Boa metaprogramming. Capacidade de criar classes, métodos, funções, etc. no tempo de execução. De preferência, o mínimo distinção entre o código e os dados, estilo de Lisp.

É muito fácil de estender e modificar primitivos existentes em tempo de execução. Em Ruby tudo é um objeto, strings, inteiros, até mesmo funções.

Você também pode construir atalhos para o açúcar sintático, por exemplo, com class_eval .

  • Nice, limpo, sintaxe são e, semântica intuitivos consistentes. Basicamente, um bem pensado, divertido uso, linguagem moderna.

Rubi segue o princípio de menos surpresa , e quando se compara o código Ruby vs o equivalente em outra linguagem muitas pessoas consideram que é mais "bonita".

  • Vários paradigmas. Ninguém paradigma é certo para cada projeto, ou mesmo a cada pequena subproblema dentro um projeto.

Você pode acompanhar orientada imperativo, objeto, funcional e reflexiva.

  • Uma linguagem interessante que realmente afeta a maneira como se pensa sobre programação.

Isso é muito subjetivo, mas do meu ponto de vista a capacidade de usar muitos paradigmas ao mesmo tempo permite a ideias muito interessantes.

Eu tentei Python e que não se encaixa seus pontos importantes.

exemplos de código que fazem a mesma coisa (junção com uma nova linha não- descrições vazias de itens de uma lista myList) em diferentes línguas (línguas são organizados em ordem inversa-alfabética):

Rubi :

myList.collect { |f| f.description }.select { |d| d != "" }.join("\n")

ou

myList.map(&:description).reject(&:empty?).join("\n")

Python :

descriptions = (f.description() for f in mylist)
"\n".join(filter(len, descriptions)) 

ou

"\n".join(f.description() for f in mylist if f.description())

Perl :

join "\n", grep { $_ } map { $_->description } @myList;

ou

join "\n", grep /./, map { $_->description } @myList;

Javascript :

myList.map(function(e) e.description())
      .filter(function(e) e).join("\n")

Io :

myList collect(description) select(!="") join("\n")

Aqui está um guia Io .

Rubi seria melhor do que Lisp em termos de ser "mainstream" (o que quer que realmente significa, mas uma preocupação realista é o quão fácil seria encontrar respostas às suas perguntas sobre a programação Lisp se fosse para ir com isso.) Em qualquer caso, eu encontrei rubi muito fácil de pegar. Na mesma quantidade de tempo que eu tinha passado primeiro aprender Python (ou outras línguas para que o assunto), eu logo foi escrito melhor código muito de forma mais eficiente do que eu já tinha antes . Isso é apenas a opinião de uma pessoa, embora; levá-la com um grão de sal, eu acho. Eu sei muito mais sobre Ruby neste momento do que eu Python ou Lisp, mas você deve saber que eu era uma pessoa Python por um bom tempo antes de eu mudei.

Lisp é definitivamente muito legal e vale a investigar; como você disse, o tamanho da comunidade, etc, podem mudar muito rapidamente. Dito isto, o próprio tamanho não é tão importante qualidade como o da comunidade. Por exemplo, o canal #ruby-lang ainda é preenchido com algumas pessoas incrivelmente inteligentes. Lisp parece atrair algumas pessoas realmente inteligentes também. Eu não posso falar muito sobre a comunidade Python como eu não tenho muita experiência em primeira mão, mas parece ser "muito grande" às ??vezes. (Lembro-me de pessoas que são bastante rude em seu canal IRC, e pelo que eu ouvi de amigos que são realmente em Python, que parece ser a regra e não a exceção.)

De qualquer forma, alguns recursos que você pode achar útil são:

1) A pragmática série programadores Ruby Metaprogramação ( http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming ) - não é livre, mas os episódios posteriores são bastante intrigante. (O código é livre, se você quiser baixá-lo e ver o que você estaria aprendendo sobre.)

2) Em Lisp por Paul Graham ( http://www.paulgraham.com/onlisp.html ). É um pouco velho, mas é um clássico (e para download gratuito).

Eu estou usando Python para muitos projetos e acho que Python não fornecer todas as características que você pediu.

Importante:

  1. Metaprogramação: Python suporta a geração metaclasses e tempo de execução classe / método etc
  2. Sintaxe: Bem isso é de alguma forma subjetiva. I como a sintaxe Pythons por sua simplicidade, mas algumas pessoas se queixam de que Python é sensível a espaços em branco.
  3. Paradigmas: Python suporta processual, orientada a objetos e programação funcional básico.
  4. Eu acho que Python tem um estilo orientado muito prático, foi muito inspirador para mim.

Um pouco importante:

  1. Performance: Bem sua linguagem um script. Mas escrever extensões C para Python é uma prática de otimização comum.
  2. Documentação: eu não posso reclamar. Não é que detalhou como alguém pode saber a partir de Java, mas é bom o suficiente.

Como você é estudante de graduação que você pode querer ler este artigo afirmando que Python é tudo uma cientista precisa . Infelizmente, não posso comparar Python para Ruby, desde que eu nunca usei esse idioma.

Saudações, Dennis

@ Jason I respectivamente discordar. Existem diferenças que fazem o Ruby superior ao Python para metaprogramação - tanto filosóficas e pragmáticas. Para começar, Rubi obtém direito herança com herança única e mixins . E quando se trata de metaprogramming você simplesmente precisa entender que é tudo sobre o auto . A diferença canônica aqui é que em Ruby você tem acesso ao auto objeto em tempo de execução - em Python você não

Ao contrário Python, em Ruby não há nenhuma fase de compilação ou tempo de execução separado. Em Ruby, cada linha de código é executada contra um determinado auto objeto. Em Ruby cada classe herda de ambos objeto e um metaclass escondido. Isto faz para algumas dinâmicas interessantes:

class Ninja
  def rank
    puts "Orange Clan"
  end

  self.name #=> "Ninja"
end

Usando self.name acessa metaclass as classes Ninja nome para retornar o nome da classe de Ninja. Será metaprogramming flor tão bonita em Python? Eu sinceramente duvido!

Bem, se você não gosta da sintaxe lisp talvez assembler é o caminho a percorrer. : -)

Ele certamente tem mínima distinção entre o código e os dados, é multi-paradigma (ou talvez isso não é paradigma) e é uma mente em expansão (se tediosa) experiência, tanto em termos de aprendizagem e os truques que você pode fazer.

satisfaz Io todos os seus pontos "importante". Eu não acho que há uma linguagem melhor lá fora para fazer hackery meta louco.

aquele que suporta os hacks metaprogramação que só não pode ser feito em uma linguagem estaticamente compilado

Gostaria muito de encontrar uma linguagem que permite que algumas das coisas legais que Lisp não

Lisp podem ser compilados.

Você tentou Rebol?

A minha resposta seria nem. Eu sei que ambas as línguas, deu uma aula sobre Ruby e sido programação em python por vários anos. Lisp é bom em metaprogramming devido ao fato de que o seu único objectivo é transformar listas, o seu próprio código-fonte é apenas uma lista de tokens de modo metaprogramming é natural. As três línguas que eu gosto melhor para este tipo de coisa é Rebol, Forth e Factor. Rebol é uma linguagem dialecting muito forte que leva o código de seu fluxo de entrada, corre uma expressão contra ela e transforma-lo usando regras escritas na língua. Muito expressivo e extremamente bom em dialecting. Factor e Forth são mais ou menos completamente divorciada da sintaxe e você programá-los através da definição e chamando palavras. Eles geralmente são escritos principalmente em sua própria língua. Você não escreve aplicações em sentido tradicional, você estender a linguagem escrevendo suas próprias palavras para definir a sua aplicação em particular. Fator pode ser especialmente agradável, pois tem muitos recursos só tenho visto em Smalltalk para avaliar e trabalhar com código-fonte. Um realmente agradável espaço de trabalho, documentos interativos, etc.

Não há realmente muito a separar Python e Ruby. Eu diria que a comunidade Python é maior e mais maduro do que a comunidade Ruby, e isso é muito importante para mim. Ruby é uma linguagem mais flexível, o que tem repercussões positivas e negativas. No entanto, estou certo de que haverá muitas pessoas para entrar em detalhes sobre essas duas línguas, então eu vou jogar uma terceira opção para o ringue. Como cerca de JavaScript?

O JavaScript foi originalmente concebido para ser Esquema para a web, e é-protótipo baseado, o que é uma vantagem sobre Python e Ruby, tanto quanto multi-paradigma e metaprogramming está em causa. A sintaxe não é tão bom quanto os outros dois, mas é provavelmente a língua mais amplamente implantada na existência, eo desempenho está ficando melhor a cada dia.

Se você gosta do conceito de código-é-data-estilo lisp, mas não gosto da sintaxe lispy, talvez Prolog seria uma boa escolha.

Se isso se qualifica como uma "divertido de usar, linguagem moderna", eu vou deixar para os outros para julgar. ; -)

Ruby é a minha escolha depois de explorar Python, Smalltalk e Ruby.

E sobre OCaml?

OCaml apresenta:. Um sistema de tipo estático, inferência de tipos, polimorfismo paramétrico, recursão cauda, ??correspondência de padrão, de primeira classe fechamentos lexicais, functors (módulos paramétricos), tratamento de exceções, e coleta de lixo automática geracional incrementais

Eu acho que satisfaça o seguinte:

Importante:

  1. Nice, limpo, sintaxe são e, semântica intuitivos consistentes. Basicamente, um bem pensado, divertido de usar, linguagem moderna.
  2. Vários paradigmas. Ninguém paradigma é certo para cada projeto, ou mesmo a cada pequena subproblema dentro de um projeto.
  3. Uma linguagem interessante que realmente afeta a maneira como se pensa sobre programação.

Um pouco importante:

  1. Desempenho. Seria bom se o desempenho foi decente, mas quando o desempenho é uma prioridade real, eu vou usar D vez.
  2. Bem documentado.

Eu uso já Python muito pouco, mas muito mais Ruby. No entanto, eu diria que ambos fornecem o que você pediu.

Se eu ver todos os seus quatro pontos, então você pode pelo menos verificação: http://www.iolanguage.com/

E Mozart / Oz pode ser interessante para você também: http://mozart.github.io/

Saudações Friedrich

Para obter a sintaxe de estilo python e lisp-like macros (macros que são código real) e boa DSL ver convergem .

Eu não tenho certeza de que Python iria cumprir todas as coisas que você deseja (especialmente o ponto sobre a distinção mínima entre o código e dados), mas há um argumento a favor da python. Há um projeto lá fora, o que torna mais fácil para você extensões do programa de python em D, de modo que você pode ter o melhor dos dois mundos. http://pyd.dsource.org/celerid.html

Se você ama a rosa, você tem que aprender a viver com os espinhos:)

Eu recomendo que você vá com Ruby.

Quando eu comecei a aprender isso, eu achei muito fácil de pegar.

Do para não misturar o Ruby Linguagem de programação com Ruby Implementações, pensando que threads POSIX não são possíveis em Ruby.

Você pode simplesmente compilar com suporte pthread e isso já era possível no momento que este segmento foi criado , se você o perdão do trocadilho.

A resposta a esta pergunta é simples. Se você gosta de lisp, você provavelmente vai preferir rubi. Ou, o que quiser.

Eu sugiro que você experimente ambas as línguas e escolher o que lhe agrada. Ambos Python e Ruby pode fazer o que quiser.

Leia também esta discussão .

Vá com JS basta verificar AJS (Alternativa JavaScript Sintaxe) no meu github http://github.com/visionmedia ele vai te dar alguma limpo procurando fechamentos etc: D

No que diz respeito a sua principal ponto (meta-programação): Versão 1.6 do Groovy tem AST (Abstract Syntax Tree) a programação built-in como um recurso padrão e integrado. Ruby tem RubyParser, mas é um add-on.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top