Existem coisas que Elixir pode fazer que Erlang não pode, ou vice-versa?

102

Essa questão está no contexto do Beam VM e nos recursos que ele fornece, não no contexto geral do que uma linguagem completa de Turing pode fazer. Quero investir algum tempo para aprender Erlang ou Elixir puro. Eu entendi as diferenças básicas entre os dois e estou inclinado para o Elixir por causa das macros, melhor sintaxe e desenvolvimento mais rápido da linguagem hoje.

Minha pergunta é: se eu escolher Elixir, vou tropeçar em algo que não posso fazer nele, mas posso fazer em Erlang? Posso usar todo o material OTP, todas as bibliotecas Erlang, recarga de código, etc. com Elixir?

Não estou pedindo a preferência de alguém entre os dois; apenas fatos sobre as possibilidades das línguas. De preferência de alguém que usou os dois na produção.

Saša Šijak
fonte
19
@hedgehog não é uma opinião, um fato. A pergunta é "Minha pergunta é: se eu escolher Elixir, vou tropeçar em algo que não posso fazer, mas posso fazer em Erlang? Posso usar todo o material OTP, todas as bibliotecas Erlang, recarregar código, etc. com Elixir?" e a resposta é baseada em fatos, não em opinião.
Saša Šijak de
4
Para essa pergunta, a resposta é: tudo o que você pode fazer em Erlang é possível no Elixir. Mas o título sugere que a questão é em que você deve investir e aqui a resposta é "depende". O que você quer fazer? Para aplicações web o Elixir é muito mais bacana, pois foi criado para solucionar esse problema. Para alguns tipos de sistemas distribuídos, você pode considerar a simplicidade do Erlang superior. A falta de recursos costuma ser a coisa boa. Aprender apenas Erlang ajudará você a se concentrar na parte mais importante: OTP.
tkowal
2
@ SašaŠijak Eu mudei o título da pergunta, para IMO refletir melhor sobre o que se trata - reverta se você não concordar.
Paweł Obrok
2
@ PawełObrok ótima edição, resume corretamente o que eu estava interessado em saber
Saša Šijak
3
toda vez que faço esse tipo de pergunta, recebo -10
votos negativos

Respostas:

37

Apenas para prefaciar - usei apenas Elixir na produção, não Erlang.

Eu honestamente recomendaria Elixir. Esta é a minha opinião e não necessariamente a certa para você, mas abaixo listarei meus motivos.

  1. Produtividade: Eu venho de uma experiência em Ruby / Rails, então a sintaxe e o estilo do Elixir são algo que me era muito familiar. Um dos principais fatores que me ajudam a determinar se devo ou não aprender um idioma é o quão produtivo posso ser nele - principalmente por que escolhi Ruby. Elixir é o mesmo. Posso trabalhar tão rápido quanto Ruby com todos os benefícios adicionais de simultaneidade e correspondência de padrões.
  2. Erlang: Como o Elixir é construído sobre o Erlang e compila até erlang e beam vm, você tem acesso a todos os módulos e pacotes erlang. Portanto, se você está preocupado em usar o elixir e perder todos os recursos do Erlang, não deveria. Elixir ainda tem suas próprias implementações da maioria dos maiores recursos Erlang / OTP, como GenServer, GenEvent etc.
  3. Comunidade / Recursos: A comunidade Elixir é realmente ótima. O canal Slack é muito popular e uma ótima maneira de obter algumas respostas para perguntas de iniciante. Já existem alguns livros realmente bons escritos sobre a linguagem (Programming Elixir 1.2 - Dave Thomas, autor do Ruby Pickaxe) também que tornam o acesso à linguagem realmente fácil.

Na verdade, se você confundir os dois, provavelmente chegará à mesma decisão de que Elixir é uma linguagem muito melhor, com todos os recursos do Erlang + More. Também está aumentando, não me lembro dos números exatos, mas me lembro de ter lido algo no site da Hex (gerenciador de pacotes) sobre um aumento considerável nos downloads de pacotes.

Harrison Lucas
fonte
14
Elixir não compila em Erlang, ele compila em código BEAM. Elixir NÃO é semelhante a coffeescript, et. al. que apenas escreva JS.
Peter R
64

Você não deve tropeçar em nada que possa fazer em um que não possa no outro, já que pode chamar livremente o código Elixir de Erlang e vice-versa. Você pode até mesmo misturar facilmente arquivos Erlang e Elixir em um projeto.

No Elixir:

:erlang_module.erlang_function(args)

em Erlang:

'Elixir.ElixirModule':elixir_function(args)
Paweł Obrok
fonte
2
Às vezes pode ser um pouco complicado ao construir versões com dependências aninhadas ou outros casos muito específicos, mas acho que esta é definitivamente a resposta certa. NOTA : se estiver executando em máquinas com muitos recursos limitados, adicionar dependências Elixir e Elixir a uma versão pode ser mais pesado em termos de memória. Portanto, se não me engano, às vezes pode acontecer que manter o Erlang puro tenha o benefício de economizar alguns megabytes de memória, tornando mais fácil evitar travamentos quando não há espaço para expandir a VM.
Laymer
37

TL; DR - Comece com Elixir

Erlang tem uma curva de aprendizado mais íngreme em comparação com Elixir. Depois de começar a aprender Elixir, você começará a aprender Erlang automaticamente. Portanto, comece com Elixir. Elixir é escrito em Erlang e Elixir. Veja a distribuição no Github (já que o Elixir está cheio de macros, também conhecidas como meta-programação). Distribuição do código do projeto Elixir

Você pode usar o Elixir com Erlang e vice-versa, daí o ecossistema Erlang completo de mais de 20 anos de bibliotecas.

Mais detalhes da Erlang Solutions

A produtividade 'out of the box' do Elixir é alcançada por um forte foco em ferramentas e conveniência na expressão da manipulação de dados. O design do sistema é o mesmo no Elixir e no Erlang, mas o Elixir remove muitos códigos clichê e é mais fácil de estender. A remoção do clichê aumenta a produtividade e permite que os programadores obtenham feedback mais rápido - crucial quando você deseja lançar seu produto no mercado o mais rápido possível. Menos clichê também deixa os desenvolvedores felizes, e os desenvolvedores felizes são desenvolvedores surpreendentemente produtivos.

Joe Armstrong (inventor de Erlang)Postagem no blog de sobre Elixir

Comece aqui para aprender sobre Elixir - Primeiros passos

Quando sentir que está indo bem, comece a praticar exercícios e outros recursos .

Sairam
fonte
3

Existem algumas coisas. Acho que você não pode fazer uma função anon recursiva no Elixir. Agora, para ser justo, isso é algo que em mais de 8 anos de Erlang eu não acho que precisei fazer, e se eu fizesse, poderia ser feito facilmente de alguma outra maneira. Provavelmente, existem algumas outras coisas como essa que, honestamente, você pode ignorar.

Em geral, para coisas que a maioria das pessoas se preocupa com qualquer coisa que você possa fazer em Erlang, você pode fazer em Elixir e vice-versa. A comunidade do lado do Elixir parece ser mais ativa, então eu sugiro começar por aí. Mudei recentemente de Erlang para Elixir e com exceção de algumas coisas extravagantes em Proper, posso dizer que é uma transição muito fácil

Zachary K
fonte