Se o Java pessoas vão para o Scala, C# vá para o F#, onde Ruby as pessoas vão funcional do nirvana?[fechado]

StackOverflow https://stackoverflow.com/questions/2254368

Pergunta

Eu conheço um monte de Java, as pessoas começaram a olhar para Scala, uma vez que ele roda sobre a JVM, e um monte de gente no Microsoft mundo está olhando para o F#, mas o que Ruby tem como um natural funcional sucessor?

Em um puro FP sentido Ruby não falta nada, em vez disso ele tem muita alguns podem dizer.Uma linguagem funcional forças que o programador não use variáveis globais e outras expressões idiomáticas muito (embora seja possível usar globais em uma linguagem funcional)

Foi útil?

Solução

Há dois muito diferentes definições do que é programação funcional" significa.Você pode tipo-de fazer um em Ruby, mas você não pode fazer o outro.

Essas duas definições são:

  • programação com o primeiro-funções de classe e
  • programação com funções matemáticas

Você pode espécie de programa com o primeiro-funções de classe em Ruby.Ele tem suporte para a primeira classe de funções.Na verdade, ele tem muito apoio:há Proc.new, proc, lambda, Method, UnboundMethod, blocos, #to_proc e ->() (e, provavelmente, alguns outros que eu esqueça).

Todas estas comportar-se de forma ligeiramente diferente, tem a sintaxe um pouco diferente, comportamento um pouco diferente e um pouco diferentes restrições.Por exemplo:o único desses que é sintaticamente leve o suficiente para que você pode realmente usá-lo densamente, está blocos.Mas blocos de ter algumas bastante graves restrições:você só pode passar de um bloco para um método, os blocos não são objetos (que, em uma linguagem orientada a objeto em que "tudo é um objeto" é um muito uma restrição severa) e, pelo menos em Ruby 1.8 há também algumas restrições w.r.t parâmetros.

Referindo-se a um método é uma outra coisa que é bastante estranho.No Python ou ECMAScript por exemplo, eu só posso dizer baz = foo.bar para referir-se a bar método de foo objecto.Em Ruby, foo.bar é um método chamada, se eu quiser referir-se à bar método de foo, Eu tenho que dizer baz = foo.method(:bar).E se eu agora quero chamada esse método, eu não posso apenas dizer baz(), Eu tenho que dizer baz.call ou baz[] ou (no Ruby 1.9) baz.().

Assim, a primeira classe de funções em Ruby não realmente de primeira classe.Eles são muito melhores do que os de segunda classe, e eles são bom o suficiente™, mas eles não estão totalmente de primeira classe.

Mas, geralmente, Rubyists não deixe Ruby apenas para a primeira classe de funções.Ruby suporte é bom o suficiente para que quaisquer vantagens que você pode obter a partir de um melhor suporte em outra língua, geralmente é comido pelo esforço de formação para o novo idioma ou por algo mais que vocês estão acostumados a que você agora deve desistir.Como, digamos Nmdiz ou apertado de integração do Unix ou Ruby on Rails ou sintaxe ou ...

No entanto, o segunda definição de FP é onde Ruby cai na sua cara.Se você deseja fazer a programação com funções matemáticas em Ruby, você está em um mundo de dor.Você não pode usar a maioria absoluta das bibliotecas Ruby, porque a maioria deles são stateful, effectful, incentivar a mutação ou caso contrário, são impuros.Você não pode usar a biblioteca padrão para as mesmas razões.Você não pode usar o núcleo da biblioteca.Você não pode usar qualquer um dos principais tipos de dados, porque todos eles são mutáveis.Você poderia simplesmente dizer "eu não ligo para o que eles são mutáveis, eu simplesmente não modifica-los e sempre copiá-los", mas o problema é:alguém ainda pode modifica-los.Também, porque eles são mutáveis, Ruby não é possível otimizar a cópia e o coletor de lixo não está atento para esse tipo de carga de trabalho.

Ele simplesmente não funciona.

Há também um par de características que não têm realmente nada a ver com programação funcional, mas que mais funcional línguas tendem a ter, de que Ruby está em falta.A correspondência de padrões, por exemplo.A preguiça também não foi fácil alcançar antes de Enumerators foram de forma mais agressiva, usada em Ruby 1.9.E ainda há algumas coisas que trabalha com estrita Enumerables ou Arrays, mas não com preguiça Enumerators, embora na verdade, não existe razão para que eles exigir rigor.

E para este definição de FP, ele definitivamente faz sentido deixar Ruby para trás.

As duas principais línguas que Rubyists têm-se reunido, são Erlang e Clojure.Ambos são relativamente bons jogos para Ruby, porque ambos são dinamicamente tipada, semelhantes REPL cultura como Ruby, e (esta é mais uma Trilhos coisa de um Rubi coisa) também são muito bons na web.Eles têm ainda muito pequeno e acolhedor com as comunidades, a língua original criadores ainda estão ativos na comunidade, há um forte foco em fazer o novo, excitante e instigante coisas, todos os quais são traços que a comunidade Ruby também tem.

O interesse em Erlang começou, quando alguém mostrou o original de 1993 vídeo de introdução "Erlang:O Filme"a RubyConf de 2006.Um par de alto-perfil de Trilhos de projetos começou a usar Erlang, por exemplo PowerSet e GitHub.Erlang é também fácil de mestre para Rubyists, porque isso não levará a pureza tão longe como Haskell ou Limpa.O dentro de um ator é muito puro, mas o ato de enviar mensagens em si é, naturalmente, um efeito colateral.Outra coisa que faz Erlang fácil de entender, é que os Atores e os Objetos são na verdade a mesma coisa, quando você seguir Alan Kay definição da programação orientada a objeto.

Clojure tem sido uma recente adição ao Rubyist do toolbelt.Sua popularidade é que eu acho que principalmente pelo fato de que a comunidade Ruby finalmente aqueceu a idéia de que a JVM ≠ Java e abraçou JRuby e, em seguida, eles começaram a olhar ao redor o que outros coisas interessantes lá foi na JVM.E novamente, Clojure é muito mais pragmática do que as outras uma linguagem funcional como Haskell e outros Balbucia como Regime de e muito mais simples e mais moderno do que CommonLisp, portanto, é um ajuste natural para Rubyists.

Outra coisa legal sobre Clojure é que, por tanto Clojure e executar o Ruby na JVM, você pode combinar - os.

O autor de "Programação Clojure"(Stuart Halloway) é um (ex?) Rubyist, por exemplo, como é Phil Hagelberg, o autor do Leiningen ferramenta de compilação para o Clojure.

No entanto, Rubyists também estão olhando para ambos Scala (como um dos mais pragmática estaticamente tipada FP línguas) e Haskell (como um dos mais elegantes queridos).Em seguida, há projetos como o Scuby e Arrogância o que são pontes que permitem que você integre a Ruby com Scala e Haskell, respectivamente.Twitter a decisão de mover parte de seu baixo nível de infra-estrutura de mensagens, primeiro, a partir do MySQL para Ruby, em seguida, a partir de Ruby para Scala também é muito conhecido.

F# não parecem desempenhar qualquer papel, possivelmente devido a um medo irracional para com todas as coisas que a Microsoft a comunidade Ruby tem.(Que, BTW, parece principalmente infundado, dado que a F# equipe tem sempre feitas as versões disponíveis para Mono.)

Outras dicas

Java pessoas estão usando uma linguagem JVM e quero um mais funcional, compatível com o seu tempo de execução, então eles vão para a Scala.

C# as pessoas estão usando uma linguagem sobre o CLR e quero um mais funcional, compatível com o seu tempo de execução, então eles vão a F#.

Ruby pessoas estão usando uma linguagem que já é bastante funcional, e eles estão usando-o em um número de fatores tempos de execução (JRuby, IronRuby, ressonância magnética, MacRuby, Rubinius, etc...).Eu não acho que ele tem um natural funcional sucessor, ou mesmo precisa de um.

Qualquer versão do Lisp deve ser fino.

Ruby é auto é um tipo de linguagem de programação Funcional, Para que eu não vejo qualquer especial dialetos para os FP, utilizando ruby.

No hype nível, Haskell.

Supondo que Ruby pessoas não basta ir para a JVM-se, mais acho que adotar Erlang, sendo outra linguagem dinamicamente tipada.

Ruby não é tão funcional como dizer Lisp, mas é apenas funcional o suficiente para que você pode fazer alguma programação funcional em uma boa forma divertida.(ao contrário a tentar fazer programação funcional em algo como C#)

Também, na verdade, as forças que você funcionais paradigmas em alguns de seus sintaxe, tais como o uso intenso de blocos e de rendimento.(que eu me apaixonei depois de aprender Ruby).

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