Erlang
ここでタグというのは、目印、マーカーのこと。タグ付き直積の例は、JSONオブジェクト、プロパティ名(キー)がタグになっている。Erlangのプロパティリストもタグ付き直積の表現と考えていい、ただし、リストはどうしても可変長になるから、その点ではタプ…
2本のパイプをマージするようなヤツ 入ってきたのをテケトー(予測不可能)に振り分けるヤツ 2本のパイプからタプルを作る、zipのようなヤツ コピーするヤツ 列αとβのインターリーブをα§β と書くと: α, β → γ γ∈α§β α → β, γ α∈β§γ α, β → γ γ = zip(α, β) …
僕はメイヤー先生のファン http://d.hatena.ne.jp/m-hiyama/20060403/1144025475 http://d.hatena.ne.jp/m-hiyama/20060313/1142209318 それはいいとして、メイヤー流のクエリー/コマンド・スタイルでプログラムを書いても何も不便はない。クエリーでもコマ…
Int = Z = {..., -1, 0, 1, 2, 3, ...}、XInt = Int + {∞, -∞} とする。他に全体集合T(total, universal, あるいはterm)を考えて、すべての領域はTの部分集合だとする。圏論で定式化したいなら、Tを固定して、モノ射 X→T だけを考えたスラント圏(ほぼsubo…
App.erl アプリケーションのインターフェースモジュール App_app.erl applicationコールバックモジュール App_server.erl gen_serverコールバックモジュール App_X_srv.erl サーバーが複数の場合の、gen_serverコールバックモジュール App_sup.erl トップス…
アプリケーションの意味を4つくらいに分けて考えるといい。 単にモジュールの集合 .appファイル(メタデータ)を持つモジュールの集合 OTP監視ツリー構造を持つモジュール集合 アプリケーションコントローラが認識できるアプリケーション ライブラリアプリケ…
gen_server:startとかがignoreを返すのってなに? と思っていたが、例えば、既に同じ機能をサービスするサーバーが上がっているから自分は不要だ、とかいうとき使えるかも。エラーではないが起動する必要はない、って事情。
バージョンをvsnと表記する(いまだに馴染めない^^;)。 「アプリケーション」が独特な意味を持つ(いまだに馴染めない^^;)。 libはアプリケーション群を意味する(馴染んだ)。 シェルとmakeをヘビーに使う(もう大変だよ)。 全体に古風(年寄り向きとも…
%% This code used to reside in net.erl, but has now been moved to%% a searate module. s/searate/separate/
悔やまれた件、もう一度調べた。基本的には、「OTP設計原理」を読めばよいのだ。次の概念を理解しよう。 アプリケーション OTP-ST(監視ツリー) OTP-STアプリケーション トップスーパーバイザ アプリケーションコントローラ・プロセス アプリケーションマス…
edoc:read_source/{1, 2} -- これは便利だ! 他にも意外に便利な関数があるかもよ。@headerfile を読む検索パスは、{includes, Path} where Path = [string()] オプションで指定される。includesはEPPの処理のときも共通に使われる。{doc_path, Path} where …
動的呼び出し Mod:func(Arg) がundefで失敗するまでに、とんでもない時間がかかる。
stdlib/proc_lib.erlを読むといいかも。
erl_call -s -sname test とかして、testノードが起動してないと、erl_callがERTSを起動しようとする(-s (startかな)オプションによる)。これが失敗した場合、どうもクリーンナップができてないようで、testというノードのエントリーがEPMDに残るようだ…
ついでに書いておかなかった件。曖昧な記憶によると: -name node1@localhost -- ドメイン名にドットがないと、どっかで構文エラー。 -name node1@128.0.0.1 -- 忘れた。 -name node1@192.160.0.33 (ホントのIPアドレス) -- 忘れた。ダメだったかな。 -nam…
> werl -env ERL_WINDOW_TITLE "Test and Debug"
ERL_LIBSが実在しないディレクトリを指すとwerlがクラッシュ。
stdlib/src/shell.erlに次のような行がある。 io:fwrite("** ~w: ~s **\n", [Line,apply(Mod,format_error,[What])]),Whatがエラーreasonで、対応するモジュールModのformat_error/1 を呼び出して 人間可読エラーメッセージを生成している。同じ手法は: ker…
io_libのman: Type:chars() = [char() | chars()]Function:char_list(Term) -> bool() Returns true if Term is a flat list of characters, otherwise it returns false.deep_char_list(Term) -> bool() Returns true if Term is a, possibly deep, list o…
%% @doc シリアライズ・ドライバ. %% %% @docfile "serialize.edoc"これはクラッシュしてしまう。日本語のせいではなくて、@docと@docfileは共存させられないようだ。
werl hi -myapp foo bar baz -myapp hoge -- fuga 1> init:get_plain_arguments(). ["fuga"] 2> init:get_arguments(). [{root,["C:\\INSTAL~1\\ERL56~1.4"]}, {progname,["erl"]}, {home,["C:\\Documents and Settings\\Hiyama\\Work","hi"]}, {myapp,["foo…
@typeによる型定義に長い説明を付けたいのだが、それができない。@docは、どこに書いても次の関数にかかってしまう。
kernel/include/file.hrl で使われている。型に、pos_integer(), non_neg_integer() なんてのも使われている。
file_libじゃなくて、filelib。まー、そういうこともあるよね。ところで、libはツマンネー。あれはなんだ?
stdlib/erl_posix_msg.erl : message(e2big) -> "argument list too long"; message(eacces) -> "permission denied"; message(eaddrinuse) -> "address already in use"; message(eaddrnotavail) -> "can't assign requested address"; message(eadv) -> "a…
behaviour定義があると、勝手にメッセージを生成してくれる。 This module defines the serialize_json behaviour. Required callback functions: special_value/3, integer_value/3, real_value/3, string_value/3, start_array/2, end_array/2, start_obje…
\ Erlang JSON JavaScript リストの成分 メンバー 要素 要素 マップの成分 要素 メンバー プロパティ
@type の左辺は関数呼び出し形式、総称の型パラメータを入れてよい。 @type pair(X, Y) = {X, Y}別名や一部束縛は次のようにする。 @type tuple_2(X, Y) = pair(X, Y) @type tuple_2_atom(Y) = tuple_2(atom(), Y)レコード型の型定義は次のようにする。 @typ…
アプリケーション・マスターって概念もあったな。グループリーダーってのはプロセスの概念だが、関係あったっけ?
ネタもと: http://yaws.hyber.org/wiki/showPage.yaws?node=YawsAndCygwin src/Makefile内の yaws_generated.erl に注目。 同、regenターゲットにも注目。 ん? EBIN_FILES=$(MODULES:%=../ebin/%.$(EMULATOR)) ../ebin/yaws.app このパーセントの使い方は?…