問題タブ [erlang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
functional-programming - Erlang: 良い仕事をしています
私は関数型プログラミングを少しやったことがあり、いくつかのオンライン リファレンスがあるので、基本的な Erlang プログラミングはかなり簡単だと思います。
しかし、私は関数型プログラミングよりもはるかに多くの手続き型/オブジェクト指向プログラミングを行ってきたので、Erlang コードのスタイルや効率はあまりよくないと思います。
優れた効率的でスタイルの良い関数型プログラミングをカバーするリソースを推奨できる人はいますか?
ありがとう!
erlang - Erlang での io:fread の予期しない動作
これはアーランの質問です。
io:fread による予期しない動作に遭遇しました。
io:fread の使い方に何か問題があるのか、io:fread にバグがあるのか、誰かが確認できるかどうか疑問に思っていました。
次のような「三角形の数字」を含むテキスト ファイルがあります。
数値の各ペアの間には 1 つのスペースがあり、各行はキャリッジ リターンと改行のペアで終わります。
次の Erlang プログラムを使用して、このファイルをリストに読み込みます。
このプログラムの出力は次のとおりです。
4 行目の最後の数字 (34) と 5 行目の最初の数字 (10) が 1 つの数字 3410 にマージされていることに注意してください。
「od」を使用してテキスト ファイルをダンプすると、これらの行に特別なことは何もありません。それらは、他の行と同じように cr-nl で終わります:
興味深い観察結果の 1 つは、問題が発生する数値の一部がたまたまテキスト ファイル内の 16 バイト境界にあることです (ただし、6890 など、すべてではありません)。
concurrency - 関数型言語(特にErlang)はどのように/なぜうまくスケーリングするのですか?
関数型プログラミングの言語と機能の可視性が高まるのをしばらく見守っています。私はそれらを調べましたが、訴えの理由はわかりませんでした。
それから、最近、CodemashでのKevinSmithの「 BasicsofErlang」プレゼンテーションに参加しました。
私はプレゼンテーションを楽しんで、関数型プログラミングの多くの属性がスレッド化/並行性の問題を回避するのをはるかに簡単にすることを学びました。状態と可変性がないために複数のスレッドが同じデータを変更できないことは理解していますが、Kevin氏は(正しく理解していれば)すべての通信はメッセージを介して行われ、メッセージは同期的に処理されます(同時実行の問題を回避します)。
しかし、私はErlangが非常にスケーラブルなアプリケーションで使用されていることを読みました(Ericssonが最初にErlangを作成した理由のすべて)。すべてが同期処理されたメッセージとして処理される場合、1秒あたり数千の要求を効率的に処理するにはどうすればよいでしょうか。非同期処理に移行し始めたのはそのためではありません。複数のスレッドの操作を同時に実行し、スケーラビリティを実現できるようにするためです。このアーキテクチャは、より安全ですが、スケーラビリティの点で一歩後退しているようです。私は何が欠けていますか?
Erlangの作成者は、並行性の問題を回避するために意図的にスレッドのサポートを避けたことを理解していますが、スケーラビリティを実現するにはマルチスレッドが必要だと思いました。
関数型プログラミング言語は、本質的にスレッドセーフでありながら、どのように拡張できるのでしょうか。
haskell - 関数型言語の特徴
すべての関数型言語は、関数をプログラムの基本的な構成要素として使用するなど、いくつかの基本的なプロパティを共有し、反復の代わりに再帰を使用するなどのすべての結果をもたらすことが知られています。ただし、いくつかの根本的な違いもあります。Lisp は Lisp コードとデータの両方に単一の表現を使用しますが、ML には ML コードの標準表現はありません。Erlang には組み込みのアクターベースの同時実行性があります。Haskell にはモナドがあります。Haskell は、静的型システムで純粋関数と非純粋関数を区別しています。ML にはありません。
他の関数型言語 (Clojure、F#、Arc、その他) との根本的な違いは何ですか? 基本とは、この言語で開発する方法に影響を与える何かを意味し、たとえば、それが広く普及したランタイムと統合されているかどうかではありません。
string - Erlang ビルドの動的ファイル名
関数からの整数値に基づいた名前のファイルを作成しようとしていますが、明らかに以下では機能しませんが、アイデアが得られます:
Erlangs が文字列をサポートしていなくても、これは単純なはずです。そのため、明らかな何かが欠けているに違いありません (何かに慣れていないことの代償と同様に) :
erlang - timer_serverという名前のgen_serverにより、タイマーモジュール関数が返されませんでした
gen_server
と呼ばれるIを生成するスーパーバイザーを作成しましたtimer_server
。このtimer_serve
rのタスクの1つは、登録を管理timer:send_interval
し、特定の間隔でpidにメッセージを送信するために呼び出すことです。
gen_server
しかし、私が呼んでいるの初期段階では、timer:send_interval
私はロックアップを取得していました。ドキュメントによると、タイマー:関数はすぐに戻るので、これは非常に厄介でした。
名前を変更gen_server
すると、record_timer_server
この問題は解決しました。私の質問は2つあります:
- アプリケーションの起動時に呼び出された
timer_server
ときにすでにプロセスが存在するのに、なぜ登録済みプロセスを作成できるのですか?timer:start()
timer_server
一度開始すると、関数を使用して呼び出している場合、この関数が名前の検出に不一致を引き起こさないのはなぜsend_interval
ですか?
コードは必要ないと思いますが、必要に応じて更新して追加することができます。
erlang - Erlang サーバーまたは fsm を正常に終了しますか?
gen_fsm の動作を持つモジュールがあります。現在、適切な状態/メッセージで標準の {stop, Reason, State} を返すことで終了しています。
正常に終了したように見えますが、実行時にエラーと見なされます。
これは正常ですか?エラーと見なされずに fsm プロセスを停止する方法はありますか?
concurrency - 分散システム上のメールボックス プロセッサ
379 ページの Expert F# のコピーに次のコメントがあることに気付きました。
メッセージの受け渡しと処理
多くの場合、共有メモリの同時実行とメッセージ パッシングの同時実行は区別され ます。多くの場合、前者はローカル マシンでより効率的です。これについては、この章で後述する「共有メモリの同時実行の使用」セクションで説明します。後者は、分散システムなどの共有メモリがないシステムに対応し、共有メモリに関連するパフォーマンスの問題を回避するためにも使用できます。
共有メモリのないプロセス間の同時並行性を渡すメッセージに興味があります。MailboxProcessor の使用方法を示す Expert F# およびインターネット上のすべての例には、このコードのいくつかのバリエーションが含まれています。
つまり、チャネルにメッセージを投稿する前に、共有メモリ内の MailboxProcessor のハンドルを取得する必要があります。私の知る限り、これは Erlang スタイルの同時実行ではありません。メッセージは同じプロセス (注: スレッドではなくプロセス) 内の MailboxProcessors にのみポストできるからです。
1 つのプロセス内の 1 つの MailboxProcessor が別の MailboxProcessor プロセスにメッセージを送信することは可能ですか? もしそうなら、サンプルを提供していただけますか?
erlang - Erlang でのプロセス バランシング
erlang標準ライブラリに一種の「ロードバランサ」があるかどうか知っている人はいますか? つまり、非常に大きなデータセットに対して非常に単純な操作を行う場合、すべてのアイテムのプロセスを構築するオーバーヘッドは、操作を順番に実行するよりも大きくなります。しかし、「適切な数」のプロセスで作業のバランスをとることができれば、パフォーマンスが向上するので、基本的にこのタスクを達成する簡単な方法があるかどうかを尋ねています.
ところで、OTP アプリケーションがある種の負荷分散を行っているかどうか知っている人はいますか? つまり、OTP アプリケーションには「ワーカー プロセス」(Java っぽいスレッド ワーカーのような) という概念がありますか?