Think Distributed

Database and Distributed Systems

erlang

Erlang OTP 21 の変更点

My OTP 21 Highlights – A Blog from the Erlang/OTP team – The Erlang/OTP team at Ericsson, the implementors and maintainers of Erlang/OTP. IO で port ではなく nif を使うようになった。 ベンチマークでは read で 2.8 倍スループットが上がってい…

Erlang OTP 22 で性能改善された点

Retiring old performance pitfalls – A Blog from the Erlang/OTP team – The Erlang/OTP team at Ericsson, the implementors and maintainers of Erlang/OTP. 名前付き関数 名前付き関数(関数内での名前を付けたクロージャー)の呼出をコンパイラは関数内…

Erlang で書き捨てのスクリプトを実行する方法

以下のファイルをコマンドラインから実行したいとします。 -module(foo). -export([create_file_slow/2]). create_file_slow(Name, N) when is_integer(N), N >= 0 -> {ok, FD} = file:open(Name, [raw, write, delayed_write, binary]), if N > 256 -> ok =…

erlc の使い方

普段は rebar を使っていますが、稀に erlc をそのまま使いたくなる時があるので使い方をメモしておきます。 コンパイルする(beam を生成する) $ erlc -Wall -I include/ -o target/ -smp foo.erl こうすると、target/foo.beam が生成されます。-Wall はすべ…

erlang でモジュールロード時に関数を実行する

-on_load(do_something/0). で callback を登録しておけばモジュールのロード時に実行されます。 -module(boo_app). -behaviour(application). -on_load(print_usage/0). %% Application callbacks -export([start/2, stop/1]). %%=========================…

Erlang で atom を動的に作る

atom を生成できる数に上限があり、なおかつ GC 対象にはならないため Erlang で atom を動的に作るのは基本的に筋が悪いのですけど、動的に atom を作りたくなることがままあります。 そういう時は以下のようにします。 4> list_to_atom(lists:concat([hoge…

Erlang でファイルの読み書き

Erlang の file モジュールの使い方の簡単な紹介です。 ファイルを開く file:open を使います。第2引数にモードを指定する時は以下の方針が良いでしょう。 read/write ために開く場合 [raw, binary, read, write] read only で開く場合 [raw, binary, read] …

gen_server 内のコードの書き方 Part1

初めて Erlang を触った時に gen_server:call のメッセージ処理をする部分でどうコードを書くべきか悩んだことがありました。 現在はある程度こう書いていけば上手くいくというのが分かったので、そのパターンを紹介します(という程おおげさな話ではありませ…

rebar3 の umbrella テンプレートで複数リリースを作る方法

対象読者 rebar3 で複数のリリースを 1 リポジトリで管理したい人。 なお、アプリケーション毎にリポジトリを分けた方が rebar3 による管理だけを考えれば楽というのは注記しておきます。 複数のリポジトリに対して PR を投げたり、deps のバージョンを管理…