第二部は四章からなり、以下の内容を扱っている:
- 分散計算の、イベント/ローカル状態/グローバル状態、の概念
- それらに関連した論理時間について
- => __信頼可能な__分散システム上での非同期分散計算の性質を考察する上で基礎となる概念
六章:
- プロセスのイベント群の部分順序によって、分散計算を表現する方法
| # package: http://packages.erlang-solutions.com/erlang/esl-erlang/FLAVOUR_3_general/esl-erlang_18.0-1~ubuntu~precise_amd64.deb | |
| $ erl +V | |
| Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 7.0 | |
| $ git clone git@github.com:sile/jsone | |
| $ cd jsone/ | |
| $ make init | |
| $ make eunit | |
| $ w3m -dump .eunit/jsone_decode.COVER.html | |
| File generated from /path/to/jsone/.eunit/jsone_decode.erl by COVER 2015-06-26 at 02:07:11 |
| -module(hood_melville_queue). % Exercise 8.3 version | |
| -export([empty/0, snoc/2, tail/1]). | |
| empty() -> | |
| {0, [], idle, []}. | |
| snoc({Diff, F, State, R}, X) -> | |
| check({Diff-1, F, State, [X | R]}). |
九章は前回に終わらなかった分を軽く取り上げる。
{lazy,segmented}-binary-numbersを使って、inc/decをO(1)で実行する方法を見てきた:
| > timer:tc(fun() -> list_to_binary([ io_lib:format("~2.16.0B", [X]) || <<X:8>> <= list_to_binary(lists:seq(0,255)) ]) end). | |
| {1565, | |
| <<"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435"...>>} | |
| > timer:tc(fun() -> << <<if X < 10 -> X + $0; true -> X - 10 + $A end>> || <<X:4>> <= list_to_binary(lists:seq(0,255)) >> end). | |
| {2784, | |
| <<"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435"...>>} | |
| > timer:tc(fun() -> hexlify:hex1(list_to_binary(lists:seq(0,255))) end). | |
| {220, |