ElixirがErlangができないこと、またはその逆ができることはありますか?


102

この質問は、Beam VMとそれが提供する機能のコンテキストにあり、Turingの完全な言語が実行できることの一般的なコンテキストではありません。純粋なアーランかエリクサーのどちらかを学ぶために時間をかけたいです。私は2つの間の基本的な違いを理解し、今日、マクロ、より良い構文、および言語のより速い開発のために、Elixirに傾いています。

私の質問は、エリクサーを選択した場合、Erlangでは実行できないが、Elixirでは実行できない何かに遭遇しますか?ElixirですべてのOTPのもの、すべてのErlangライブラリ、コードの再読み込みなどを使用できますか?

私は2人の間の誰かの好みを求めているのではありません。言語の可能性についての事実。できれば両方をプロダクションで使用した人から。


19
@hedgehogは意見ではなく、事実です。質問は、「私の質問は、Elixirを選択した場合、Erlangで実行できないができないことを見つけますか?ElixirですべてのOTPのもの、すべてのErlangライブラリ、コードの再読み込みなどを使用できますか?」答えは意見ではなく事実に基づいています。
ササŠijak

4
その質問に対する答えは、ErlangでできることはすべてElixirで可能です。しかし、タイトルは質問があなたが何に投資すべきかであり、ここでの答えは「それは依存する」ことを示唆しています。何をしたいですか?Elixirは、この問題を解決するために作成されたため、Webアプリケーションの場合、はるかに優れています。分散システムの種類によっては、Erlangのシンプルさが優れていることがわかります。機能の欠如はしばしば良いことです。Erlangだけを学ぶことは、最も重要なビットであるOTPに集中するのに役立ちます。
tkowal 2016年

2
@SašaŠijakIMOが問題の内容をよりよく反映するように、質問のタイトルを変更しました-同意しない場合は元に戻します。
パヴェルObrok

2
PawełObrok素晴らしい編集@、それは間違いなく私が知って興味があったものをまとめたもの
ササŠijak

3
私がこの種の質問をするたびに-10の反対票が出ます
arisalexis

回答:


37

序文-エリクサーは本番環境でのみ使用し、Erlangは使用していません。

私は正直にエリクサーをお勧めします。これは私の意見であり、必ずしもあなたにとって正しい意見ではありませんが、以下に理由を記載します。

  1. 生産性:私はRuby / Railsの出身ですので、Elixirの構文とスタイルは非常に親しみやすいものでした。言語を学ぶかどうかを判断するのに役立つ主な要因の1つは、その言語でどれだけ生産性を発揮できるかです。主に、Rubyを選択した理由です。エリクサーも同じです。Rubyと同じくらい速く作業でき、同時実行性とパターンマッチングのすべての利点が追加されます。
  2. Erlang:ElixirはErlangの上に構築され、erlangとBeam vmにコンパイルされるため、すべてのerlangモジュールとパッケージにアクセスできます。したがって、エリキシルの使用について心配していて、Erlangのすべての機能を見逃している場合は、心配する必要はありません。Elixirには、GenServer、GenEventなどの大規模なErlang / OTP機能のほとんどの独自の実装さえあります。
  3. コミュニティ/リソース:Elixirコミュニティは本当に素晴らしいコミュニティです。Slackチャンネルは非常に人気があり、初心者の質問に対する回答を得るための優れた方法です。この言語について書かれた本当に優れた本(Programming Elixir 1.2-Dave Thomas、Ruby Pickaxeの著者)もすでにいくつかあり、この言語を本当に簡単に取り入れることができます。

実際、この2つをいじくり回している場合、ElixirがErlang + Moreのすべての機能を備えたはるかに優れた言語であるという同じ決定にたどり着くでしょう。増加傾向にありますが、正確な数は思い出せませんが、HexのWebサイト(パッケージマネージャー)で、パッケージのダウンロード数が大幅に増加したことについて何かを読んだことを覚えています。


13
ElixirはErlangにコンパイルされず、BEAMコードにコンパイルされます。Elixirはcoffeescriptなどに似ていません。al。JSと書くだけです。
Peter R

64

ErlangからElixirコードを自由に呼び出すことができ、その逆も可能であるため、他ではできないことで、何かにつまずくことはできません。ErlangファイルとElixirファイルを1つのプロジェクトで簡単に混在させることもできます。

エリクサーで:

:erlang_module.erlang_function(args)

Erlangで:

'Elixir.ElixirModule':elixir_function(args)

2
ネストされた依存関係や他の非常に特殊なケースでリリースをビルドする場合、それは少しトリッキーになることがありますが、これは間違いなく正しい答えだと思います。 :リソースに制約のあるマシンで実行する場合、リリースにElixirおよびElixirの依存関係を追加すると、メモリの点で負荷が大きくなる可能性があります。したがって、私が間違っていない場合は、純粋なErlangを使用すると数メガバイトのメモリを節約できるという利点があり、VMを拡張するためのスペースがなくなったときにクラッシュを回避しやすくなります。
レイマー

37

TL; DR- Elixirから始める

Erlangは、Elixirに比べて学習曲線が急です。Elixirの学習を開始すると、自動的にErlangの学習を開始します。したがって、エリクサーから始めます。エリクサーはアーランとエリクサーで書かれています。Githubでの配布を参照してください(Elixirにはマクロ(別名メタプログラミング)がたくさんあるため)。 Elixirプロジェクトコードの配布

ElixirをErlangと一緒に使用することができ、その逆も可能です。したがって、20年以上のライブラリの完全なErlangエコシステムを使用できます。

Erlang Solutionsの詳細

Elixirの「すぐに使える」生産性は、ツールへの強い焦点とデータ操作の表現における利便性によって達成されます。システム設計はElixirとErlangで同じですが、Elixirは多くの定型コードを削除し、拡張が容易です。ボイラープレートを削除することで生産性が向上し、プログラマーがより迅速にフィードバックを取得できるようになります。製品をできるだけ早く市場に投入したい場合に不可欠です。ボイラープレートが少ないと、開発者も幸せになり、幸せな開発者は驚くほど生産的な開発者になります。

ジョー・アームストロング(Erlang発明者)のエリクサーに関するブログ投稿

エリクサーについて学ぶためにここから始めてください- はじめに

うまくいったと感じたら、エクササイズその他のリソースの練習に向けて努力してください。


3

いくつかあります。Elixirで再帰的なanon関数を作成することはできないと思います。公平を期すために、これはErlangの8年以上の間、私がこれまでやる必要がなかったと思うものです。正直に言って、無視できるものは他にもいくつかあるでしょう。

一般的に、Erlangでできることはほとんどの人が気にしていることに対して、Elixirで行うことができ、その逆も同様です。エリクサー側のコミュニティはより活発であるようですので、そこから始めることをお勧めします。私は最近ErlangからElixirに移動しましたが、Properのいくつかの空想的なことを除いて、それはかなり簡単な移行であると言えます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.