タグ付けされた質問 「erlang」

Erlangは、ガベージコレクションされた汎用のプログラミング言語とランタイム環境であり、並行性、分散、フォールトトレランスのサポートが組み込まれています。

18
Project Eulerとの速度比較:C vs Python vs Erlang vs Haskell
私はProject Eulerからの問題#12をプログラミング演習として使用し、C、Python、Erlang、およびHaskellでの(確かに最適ではない)実装を比較しました。実行時間をいくらか長くするために、最初の問題で述べたように、500ではなく1000を超える除数で最初の三角形の数値を検索します。 結果は次のとおりです。 C: lorenzo@enzo:~/erlang$ gcc -lm -o euler12.bin euler12.c lorenzo@enzo:~/erlang$ time ./euler12.bin 842161320 real 0m11.074s user 0m11.070s sys 0m0.000s Python: lorenzo@enzo:~/erlang$ time ./euler12.py 842161320 real 1m16.632s user 1m16.370s sys 0m0.250s PythonとPyPy: lorenzo@enzo:~/Downloads/pypy-c-jit-43780-b590cf6de419-linux64/bin$ time ./pypy /home/lorenzo/erlang/euler12.py 842161320 real 0m13.082s user 0m13.050s sys 0m0.020s アーラン: lorenzo@enzo:~/erlang$ erlc euler12.erl lorenzo@enzo:~/erlang$ time erl …

8
Elixirにはなぜ2種類の関数があるのですか?
私はElixirを学んでいて、なぜ2種類の関数定義があるのか​​不思議に思います。 defを使用して呼び出されたモジュールで定義された関数myfunction(param1, param2) fnを使用して呼び出され、で定義された無名関数myfn.(param1, param2) 2番目の種類の関数だけがファーストクラスのオブジェクトのようであり、パラメーターとして他の関数に渡すことができます。モジュールで定義された関数は、でラップする必要がありますfn。otherfunction(myfunction(&1, &2))それを簡単にするために似ている構文糖がありますが、そもそもなぜそれが必要なのですか?なぜ私たちはできないのotherfunction(myfunction))ですか?Rubyのようにモジュール関数を括弧なしで呼び出すことだけを許可するのですか?モジュールの機能とファンも持つErlangからこの特性を継承しているようですが、実際にはErlang VMが内部でどのように機能するかに由来していますか? 2つのタイプの関数を持ち、それらを他の関数に渡すためにあるタイプから別のタイプに変換する利点はありますか?関数を呼び出すための2つの異なる表記法がある利点はありますか?
279 erlang  elixir 

11
Erlangはどこで使用されていますか?その理由は?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 Erlangが正常に使用されているかどうかにかかわらず、最も一般的なアプリケーション/ウェブサイト/ソリューションのリストを知りたいのですが。 他のプログラミング言語ではなく、特定のソリューションに使用される理由を説明していただければ幸いです。 BAD Erlangのケーススタディ(Erlangが誤用されているケース)をリストすることも興味深いでしょう。
258 erlang  case-study 

7
技術的には、なぜErlangのプロセスはOSスレッドよりも効率的ですか?
アーランの特徴 以下からのErlangプログラミング(2009): Erlangの並行性は高速でスケーラブルです。そのプロセスは軽量であり、Erlang仮想マシンは、作成されたすべてのプロセスに対してOSスレッドを作成しません。これらは、基盤となるオペレーティングシステムに関係なく、VMで作成、スケジュール、および処理されます。その結果、プロセスの作成時間はマイクロ秒のオーダーであり、同時に存在するプロセスの数とは無関係です。これをJavaおよびC#と比較してください。すべてのプロセスについて、基盤となるOSスレッドが作成されます。Erlangが両方の言語よりもはるかに優れているため、いくつかの非常に競争力のある比較が得られます。 同時実行アーラン(PDFファイル)に指向プログラミング (スライド)(2003年): Erlangプロセスの作成にかかる時間は1µsから2,500プロセスまで一定であることがわかります。その後、最大30,000プロセスで約3µsに増加します。JavaとC#のパフォーマンスは、図の上部に示されています。少数のプロセスでは、プロセスの作成に約300µsかかります。2,000を超えるプロセスを作成することは不可能です。 最大30,000プロセスの場合、2つのErlangプロセス間でメッセージを送信する時間は約0.8µsであることがわかります。C#の場合、メッセージごとに約50µs、最大プロセス数(約1800プロセス)までかかります。Javaはさらに悪く、最大100のプロセスでメッセージあたり約50µsかかった後、約1000のJavaプロセスがあるとメッセージあたり10msに急速に増加しました。 私の考え Erlangプロセスが新しいプロセスの生成においてはるかに効率的であり、プロセスごとのメモリフットプリントがはるかに小さい理由を技術的に完全には理解していません。OSとErlang VMの両方は、スケジューリング、コンテキストスイッチを実行し、レジスタの値を追跡する必要があります。 単に、OSスレッドがErlangのプロセスと同じ方法で実装されていないのはなぜですか?彼らはもっと何かをサポートする必要がありますか?そして、なぜ彼らはより大きなメモリフットプリントを必要とするのですか?そしてなぜ彼らは産卵とコミュニケーションが遅いのですか? 技術的に、スポーンと通信に関して、ErlangのプロセスがOSスレッドよりも効率的であるのはなぜですか?また、OSのスレッドを同じ効率的な方法で実装および管理できないのはなぜですか。また、OSスレッドのメモリフットプリントが大きく、生成と通信が遅いのはなぜですか? もっと読む SMPに焦点を当てたErlang VMの内部(2008) JavaとErlangでの並行性(pdf)(2004) JavaのスレッドとErlangのプロセスのパフォーマンス測定(1998)


4
Erlangは何で書かれていますか?
エリクソンのErlangとErlang / OTPの実装は、どのように書かれてコンパイルされていますか?アセンブリ、C、またはErlang自体ですか? 更新1:DrJokepuに感謝します。私が正しく理解していれば、ErlangソースからVMへのコンパイラはErlang自体で作成されています。ただし、VMはCで記述されています。 更新2:Hynek-Pichi-Vychodilは多くの詳細を指摘しました。 VMとHWが相互作用するドライバー:C コンパイラ(VMへ)およびライブラリ:Erlang。 拡張機能:ポートまたはErlangノードをその言語で記述することにより、任意の言語で可能です。

1
Elixir / erlangはマイクロサービスアプローチにどこに適合しますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 この質問を改善する 最近、共同作業する複数のマイクロサービスをデプロイするために、Docker Composeでいくつかの実験を行っています。マイクロサービスが提供する多くの利点を見ることができ、それらを管理するための優れたツールセットがあるので、マイクロサービスワゴンに飛び込むことはそれほど難しくないと思います。 しかし、私はElixirも実験しており、それ自体がもたらす利点をとても気に入っています。それはあなたのコードを複数の分離されたアプリケーションに詰め込むことを奨励し、ホットコードのアップグレードをサポートすることを考えると、どのようにdockerをelixir(またはそのことについてはerlang)と混合しますか? たとえば、dev-prodパリティを提供するためにdockerを使用したい場合、elixirはそれにどのように適合しますか?Dockerコンテナーは不変であることを考えると、ホットコードのアップグレードを実行できなくなりますよね?青/緑のデプロイメントまたはカナリアリリースについてはどうですか? つまり、Elixirでマイクロサービスを作成して、他の言語で作成されているかのようにそれらを使用することができます。ポリグロティズムは、いずれにせよマイクロサービスの利点の1つですが、OTPプラットフォームを使用することの完全な利点は得られません。純粋なコラボレーティブerlangアプリケーションは、中間のキューを使用して異なる(または異なる)言語で記述されたマイクロサービス間で通信するよりもはるかに最適であると推測します。

11
シェルからErlangのリリースバージョン番号を取得する方法
多くのプログラムは、次のようなコマンドでバージョン番号を返します。 $ program --version program (platform info) v1.2.3 これは、プログラムのインストールやメンテナンスのスクリプトを作成する場合や、システム管理者や友人からのその他の制御された自動化マジックに役立ちます。 問題 簡単アーラン(OTP)のバージョン番号を取得する方法? ネット上 ここにいくつかの不十分なソリューションがあります([1]と他のチュートリアル/ Erlangのドキュメント): エミュレータ $ erl 1> erlang:system_info(otp_release). "R13B03" スクリプトを書くのは難しい。erlシェルプロンプトから単一のコマンドを実行する方法が見つかりませんでした。 リリースファイル $ cat /usr/lib/erlang/releases/RELEASES [{release,"OTP APN 181 01","R13B03","5.7.4", [{kernel,"2.13.4","/usr/lib/erlang/lib/kernel-2.13.4"}, {stdlib,"1.16.4","/usr/lib/erlang/lib/stdlib-1.16.4"}, {sasl,"2.1.8","/usr/lib/erlang/lib/sasl-2.1.8"}], permanent}]. パラダイスの解析(シェル付き)。 別の方法として、インストールパスをチェックすることもできますが、移植性はありません(私のインストールパスにはバージョンが含まれていないため)。 個人的なコンテキスト:同じバージョンのRabbitMQとプラグインを複数のマシンにインストールするスクリプトを書いています。一部のプラグインはOTPバージョンの最小要件を備えており、それがこの質問の始まりです。 [1] http://forum.trapexit.org/viewtopic.php?p=42946
108 shell  erlang 

4
ElixirがErlangができないこと、またはその逆ができることはありますか?
この質問は、Beam VMとそれが提供する機能のコンテキストにあり、Turingの完全な言語が実行できることの一般的なコンテキストではありません。純粋なアーランかエリクサーのどちらかを学ぶために時間をかけたいです。私は2つの間の基本的な違いを理解し、今日、マクロ、より良い構文、および言語のより速い開発のために、Elixirに傾いています。 私の質問は、エリクサーを選択した場合、Erlangでは実行できないが、Elixirでは実行できない何かに遭遇しますか?ElixirですべてのOTPのもの、すべてのErlangライブラリ、コードの再読み込みなどを使用できますか? 私は2人の間の誰かの好みを求めているのではありません。言語の可能性についての事実。できれば両方をプロダクションで使用した人から。
102 erlang  elixir  otp 

4
Erlangの99.9999999%(ナインナイン)の信頼性
アーランは、稼働システムで20年以上使用されており、稼働率は99.9999999%であると報告されています。 私は次のように計算しました: 20*365.25*24*60*60*(1 - 0.999999999) == 0.631 s つまり、システムのダウンタイムは20年間で1秒未満です。私はこれの妥当性に異議を唱えるつもりはありません。たった0.631秒でシステムを(故意にまたは偶然に)シャットダウンする方法に興味があります。大規模なソフトウェアシステムに精通している誰かがこれを私たちに説明できますか?ありがとうございました。 処理ユニット(またはマシン)のクラスターでサービスのダウンタイムを計算する方法を知っている人はいますか?

5
akkaとErlangの違いは?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私は最近アッカを見ていて、それはかなり印象的です。場所の透過性、監視階層など、erlangのキラー機能のほとんどを持っているようです。erlangにakkaにはない機能はありますか?
97 erlang  akka 

8
関数型言語(具体的にはErlang)はどのように/なぜ適切にスケーリングしますか?
しばらくの間、関数型プログラミング言語と機能の可視性の高まりを見てきました。私はそれらを調べましたが、上訴の理由はわかりませんでした。 その後、最近、CodemashでのKevin Smithの "Basics of Erlang"プレゼンテーションに参加しました。 私はプレゼンテーションを楽しみ、関数型プログラミングの属性の多くにより、スレッド化/同時実行の問題を回避することがはるかに容易になることを学びました。状態と可変性の欠如により、複数のスレッドが同じデータを変更することが不可能になることを理解していますが、Kevinは(正しく理解していれば)すべての通信はメッセージを通じて行われ、メッセージは同期して処理されます(ここでも同時実行の問題を回避します)。 しかし、Erlangが非常にスケーラブルなアプリケーションで使用されていることを読んだことがあります(Ericssonが最初にそれを作成した理由の全体)。すべてが同期的に処理されるメッセージとして処理される場合、1秒あたり数千のリクエストを効率的に処理する方法を教えてください。それが、非同期処理に移行し始めた理由ではありませんか?複数の操作スレッドを同時に実行することを利用して、スケーラビリティを実現できますか?このアーキテクチャはより安全ですが、スケーラビリティの点で後退しているようです。何が欠けていますか? Erlangの作成者が並行性の問題を回避するために意図的にスレッド化のサポートを回避したことは理解していますが、スケーラビリティを実現するにはマルチスレッド化が必要だと思いました。 関数型プログラミング言語はどのようにして本質的にスレッドセーフでありながら、まだ拡張できるのでしょうか。

3
現在の機能的リアクティブプログラミング実装のステータスは何ですか?
Haskellでいくつかの単純な自動物理システム(振り子、ロボットアームなど)を視覚化しようとしています。多くの場合、これらのシステムは次のような方程式で記述できます。 df/dt = c*f(t) + u(t) ここでu(t)、ある種の「インテリジェントコントロール」を表します。これらのシステムは、関数型リアクティブプログラミングパラダイムに非常にうまく適合しているように見えます。 そこで、Paul Hudak氏の著書「The Haskell School of Expression」を手に取ってみたところ、そこに提示されているドメイン固有言語「FAL」(Functional Animation Language)は、私の単純なおもちゃシステムでは非常にうまく機能していることがわかりましたintegrate。効率的に使用するには少し面倒すぎるようですが、簡単に修正できます)。 私の質問は、今日のより高度な、または実用的なアプリケーションのための、より成熟した、最新の、よく維持された、パフォーマンス調整された代替手段は何ですか? このWikiページにはHaskellのいくつかのオプションがリストされていますが、以下の点については明確ではありません。 (私が理解しているように)このプログラミングパラダイムの発明者の1人であるConal Eliottのプロジェクト「reactive」のステータスは、少し古く見えます。私は彼のコードが好きですが、多分私は他のより最新の代替案を試すべきですか?構文/パフォーマンス/実行時の安定性の点で、それらの主な違いは何ですか? 2011年の調査のセクション6 から引用すると、「... FRPの実装は、レイテンシの保証が必要なドメインで効果的に使用するには、まだ十分に効率的または予測可能ではありません...」。FRPが15年以上存在しているという事実を考えると、調査はいくつかの興味深い可能な最適化を示唆していますが、このパフォーマンスの問題は少なくとも数年以内に解決するのが非常に、または本質的に難しい場合があるという印象を受けます。これは本当ですか? 調査の同じ著者は彼のブログで「時間の漏れ」について語っています。問題はFRPに固有のものですか、それとも純粋で厳密でない言語でプログラミングするときに一般的に発生する問題ですか?FRPベースのシステムを長期間にわたって安定させることは、十分に高性能ではないにしても、非常に難しいと思ったことはありませんか? これはまだ研究レベルのプロジェクトですか?プラントエンジニア、ロボット工学エンジニア、金融エンジニアなどの人々が実際にそれらを使用していますか(ニーズに合った言語で)? 私は個人的にはHaskellの実装を好んでいますが、他の提案も受け入れています。たとえば、Erlangを実装するのは特に楽しいでしょう-インテリジェントで適応性のある、自己学習型のサーバープロセスを用意するのは非常に簡単です。

9
Node.jsまたはErlang
処理できる並行性レベルに関しては、これらのツールが本当に気に入っています。 Erlang / OTPははるかに安定したソリューションのように見えますが、関数型言語のパラダイムについてさらに多くの学習と多くの知識が必要です。そして、マルチコアCPUに関しては、Erlang / OTPの方がはるかに優れているようです(間違っている場合は訂正してください)。 しかし、どちらを選ぶべきですか?短期的および長期的な観点からどちらが優れていますか? 私の目標は、高負荷でのWebプロジェクトのスケーリングを従来の言語よりも簡単にするツールを学ぶことです。

1
Erlangのプロセス/メッセージとSmalltalkのオブジェクト/メッセージの違いは何ですか?
Smalltalkのオブジェクト/メッセージとErlangのプロセス/メッセージの違いを理解しようとしています。このトピックに関する次の投稿を読みました。 私が理解している限り、Smalltalkでは、すべてがオブジェクトであり、すべてが同じ「オブジェクト/メッセージ」の抽象化を持っています-番号1でさえ、メッセージの受け渡しでのみ到達できるオブジェクトです。ある1アーラン/エリクシルの処理は?Erlangのすべてがメッセージ/プログラムパラダイムへの応答ですか?Erlangの番号にメッセージを送信できますか? どうもありがとう。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.