Erlangは、エリクソンで電話通信網用に開発された宣言型の関数型言語です。エリクソン社内で20年間にわたり使われてきたという実績があり、並列処理指向、分散処理指向、軽量、耐障害性、稼動中でもバージョンアップ可能といった特徴から、無停止型サーバの構築全般でも威力を発揮しています。マルチコアCPU時代を迎えた現在、マルチコアの最適な利用という観点での注目度も高く、将来を嘱望されている言語です。Erlang歴15年、コミュニティのリーダー的存在であり、Erlang教育のエキスパートであるFrancesco Cesariniと、関数型言語の研究者として有名なSimon Thompsonが、Erlangの特性を理解し、その威力を最大限に発揮させるために不可欠な知識を伝授します。
Erlangプログラミング
Francesco Cesarini、Simon Thompson 著、佐藤 嘉一 訳
- TOPICS
- Programming
- 発行年月日
- 2010年07月
- PRINT LENGTH
- 508
- ISBN
- 978-4-87311-465-1
- 原書
- Erlang Programming
- FORMAT
関連ファイル
正誤表
ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。
1刷正誤表
Erlangプログラミング1刷正誤表
2010年8月10日更新
|
目次
目次 序 まえがき 1章イントロダクション 1.1 なぜ Erlangを使うべきか? 1.2 Erlangの歴史 1.3 Erlangの特徴 1.3.1 ハイレベルな構成要素 1.3.2 並列プロセスとメッセージ渡し 1.3.3 拡張可能、安全、かつ効率的な並列性 1.3.4 ソフトリアルタイム性 1.3.5 堅牢さ 1.3.6 分散コンピューティング 1.3.7 統合とオープン性 1.4 Erlangとマルチコア 1.5 ケーススタディ 1.5.1 AXD301 ATMスイッチ 1.5.2 CouchDB 1.5.3 ErlangとC++との比較 1.6 Erlangをどのように使うべきか? 2章 Erlangの基礎 2.1 整数 2.2 Erlangのシェル 2.3 浮動小数点数 2.3.1 数学的演算子 2.4 アトム 2.5 ブール 2.6 組 2.7 リスト 2.7.1 文字と文字列 2.7.2 アトムと文字列 2.7.3 リストの構築と処理 2.7.4 リスト上の関数および演算 2.8 項の比較 2.9 変数 2.10 複雑なデータ構造 2.11 パターンマッチング 2.12 関数 2.13 モジュール 2.13.1 コンパイルと Erlangの仮想機械(VM) 2.13.2 モジュール指令 2.14 エクササイズ 3章 Erlangの逐次処理 3.1 条件評価 3.1.1 case構成要素 3.1.2 変数のスコープ 3.1.3 if構成要素 3.2 ガード 3.3 組み込み関数 3.3.1 オブジェクトへのアクセスと検査 3.3.2 型変換 3.3.3 プロセス辞書 3.3.4 メタプログラミング 3.3.5 プロセス、ポート、分散処理、およびシステム情報 3.3.6 入出力 3.4 再帰 3.4.1 末尾再帰関数 3.4.2 末尾呼び出し再帰の最適化 3.4.3 繰り返し処理と再帰関数との比較 3.5 実行時エラー 3.6 エラーの処理 3.6.1 try … catchの利用 3.6.2 catchの使用 3.7 ライブラリモジュール 3.7.1 ドキュメント 3.7.2 有用なモジュール 3.8 デバッガ 3.9 エクササイズ 4章 並列プログラミング 4.1 プロセスの生成 4.2 メッセージ渡し 4.3 メッセージの受信 4.3.1 選択的および非選択的な受信 4.3.2 エコー(echo)の例 4.4 登録済みのプロセス 4.5 タイムアウト 4.6 ベンチマーク 4.7 プロセスの骨格 4.8 末尾再帰とメモリリーク 4.9 並列性指向プログラミングに関するケーススタディ 4.10 競合条件、デッドロック、およびプロセスの枯渇 4.11 プロセス管理系 4.12 エクササイズ 5章プロセスのデザインパターン 5.1 クライアント /サーバモデル 5.1.1 クライアント /サーバの例 5.2 プロセスパターンの例 5.3 有限状態機械 5.3.1 有限状態機械(FSM)の例 5.3.2 排他制御用のセマフォ 5.4 イベント管理系とイベントハンドラ 5.4.1 汎用的なイベント管理系の例 5.4.2 イベントハンドラ 5.5 エクササイズ 6章プロセスエラーの処理 6.1 プロセスリンクおよび出口シグナル 6.1.1 出口トラップ 6.1.2 監視用の組み込み関数 6.1.3 組み込み関数 exit 6.1.4 組み込み関数と用語 6.1.5 伝播の意味論 6.2 堅牢なシステム 6.2.1 クライアントの監視 6.2.2 監督プロセスの例 6.3 エクササイズ 7章レコードとマクロ 7.1 レコード 7.1.1 レコードの導入 7.1.2 レコードを使った処理 7.1.3 レコード上の関数とパターンマッチング 7.1.4 シェルにおけるレコード 7.1.5 レコードの実装 7.1.6 レコード用の組み込み関数 7.2 マクロ 7.2.1 単純なマクロ 7.2.2 引数付きのマクロ 7.2.3 デバッグおよびマクロ 7.2.4 インクルードファイル 7.3 エクササイズ 8章ソフトウェアのアップグレード 8.1 モジュールのアップグレード 8.2 背後にあるもの 8.2.1 コードのロード 8.2.2 コードサーバ 8.2.3 追放のためのモード 8.3 プロセスのアップグレード 8.4 .erlangファイル 8.5 エクササイズ 9章高度なデータ型と高度な構成要素 9.1 本当の意味での関数型プログラミング 9.2 funと高階の関数 9.2.1 引数としての関数 9.2.2 関数を書く: fun式 9.2.3 返却値としての関数 9.2.4 既定義関数の利用 9.2.5 関数と変数 9.2.6 既定義、高階の関数 9.2.7 遅延評価とリスト 9.3 リスト内包表現 9.3.1 最初の例 9.3.2 リスト内包表現の一般形 9.3.3 複数の生成系 9.3.4 標準関数 9.4 バイナリと直列化 9.4.1 バイナリ 9.4.2 ビット構文 9.4.3 ビットに対するパターンマッチング 9.4.4 ビット列内包表現 9.4.5 ビット構文の例: TCPセグメントのデコード 9.4.6 ビット毎の演算子 9.4.7 直列化 9.5 参照 9.6 エクササイズ 10章 ETSとDetsテーブル 10.1 ETSテーブル 10.1.1 実装とトレードオフ 10.1.2 テーブルの生成 10.1.3 テーブル要素の処理 10.1.4 例:索引の構築、その1 10.1.5 テーブルの走査 10.1.6 例:索引の構築、その2 10.1.7 テーブル情報の抽出:match 10.1.8 テーブル情報の抽出:select 10.1.9 テーブルに関する他の操作 10.1.10 レコードと ETSテーブル 10.1.11 テーブルの可視化 10.2 Detsテーブル 10.3 携帯利用者データベースの例 10.3.1 データベースのバックエンド操作 10.3.2 データベースサーバ 10.4 エクササイズ 11章 Erlangでの分散プログラミング 11.1 Erlangでの分散システム 11.2 Erlangによる分散コンピューティング:基本 11.2.1 ノード名と可視性 11.2.2 通信とセキュリティ 11.2.3 通信とメッセージ 11.2.4 ノードの接続 11.2.5 リモート手続き呼び出し 11.2.6 rpcモジュール 11.2.7 分散プログラミングに不可欠なモジュール 11.3 epmdプロセス 11.3.1 ファイアウォールの背後での分散Erlang 11.4 エクササイズ 12章 OTP挙動 12.1 OTP挙動への導入 12.2 汎用サーバ 12.2.1 サーバの起動 12.2.2 メッセージ渡し 12.2.3 サーバの停止 12.2.4 例全体のコード 12.2.5 gen_serverの実行 12.3 監督プロセス 12.3.1 監督プロセスの仕様 12.3.2 子プロセスの仕様 12.3.3 監督プロセスの例 12.3.4 動的な子プロセス 12.4 アプリケーション 12.4.1 ディレクトリ構造 12.4.2 アプリケーションリソースファイル 12.4.3 アプリケーションの起動と停止 12.4.4 アプリケーションモニタ 12.5 リリースの処理 12.6 その他の挙動および参考文献 12.7 エクササイズ 13章 Mnesiaの導入 13.1 Mnesiaを使うべきとき 13.2 Mnesiaの設定 13.2.1 スキーマのセットアップ 13.2.2 Mnesiaの起動 13.2.3 Mnesiaのテーブル 13.3 トランザクション 13.3.1 書き出し 13.3.2 読み込みと削除 13.3.3 添え字付け 13.3.4 きわどいオペレーション 13.4 分断されたネットワーク 13.5 参考文献 13.6 エクササイズ 14章 wxErlangによる GUIプログラミング 14.1 wxWidgets 14.2 wxErlang: ErlangとwxWidgetsとの結合 14.2.1 オブジェクトと型 14.2.2 イベント処理、オブジェクト識別子、イベント型 14.2.3 まとめ 14.3 第1の例: MicroBlog 14.4 MiniBlogの例 14.5 wxErlangの取得と実行 14.6 エクササイズ 15章ソケットプログラミング 15.1 ユーザデータグラムプロトコル 15.2 トランスミッションコントロールプロトコル 15.2.1 TCPの例 15.3 inetモジュール 15.4 参考文献 15.5 エクササイズ 16章 Erlangと他のプログラミング言語とのインタフェース 16.1 言語相互接続に関する概要 16.2 Javaとの相互接続 16.2.1 ノードとメールボックス 16.2.2 Erlang型による表現 16.2.3 通信 16.2.4 まとめ:RPC再訪 16.2.5 相互作用 16.2.6 細部 16.2.7 更なる展望 16.3 Cのノード 16.3.1 次のステップ 16.4 Unixシェル上での Erlang:erl_call 16.5 ポートプログラム 16.5.1 Erlangのポートコマンド 16.5.2 データのポート間通信 16.6 通信に対するライブラリサポート 16.6.1 Rubyでの作業:erlectricity 16.7 リンクインドライバとFFI 16.8 エクササイズ 17章トレース用組み込み関数、dbgトレーサ、マッチの仕様 17.1 イントロダクション 17.2 トレース用の組み込み関数 17.2.1 プロセスのトレースフラグ 17.2.2 フラグの継承 17.2.3 ゴミ集め( GC)とタイムスタンプ 17.3 組み込み関数trace_patternによる呼び出しのトレース 17.4 dbgトレーサ 17.4.1 dbgの導入 17.4.2 トレースおよびプロファイル関数 17.4.3 ローカルおよびグローバル関数呼び出しのトレース 17.4.4 分散環境 17.4.5 出力のリダイレクト 17.5 マッチの仕様:fun構文 17.5.1 fun2msを用いた仕様の生成 17.5.2 etsおよびdbgにおけるマッチの仕様の差異 17.6 マッチの仕様:ボルトとナット 17.6.1 頭部 17.6.2 条件 17.6.3 仕様の本体 17.6.4 マッチの仕様の保存 17.7 参考文献 17.8 エクササイズ 18章 型とドキュメント 18.1 Erlangにおける型 18.1.1 例:レコードと型フィールド 18.1.2 Erlangの型記法 18.2 TypEr:成功型および型推論 18.2.1 Dialyzer: Erlangプログラムの矛盾検査系 18.3 EDocによるドキュメント生成 18.3.1 usr_db.erlのドキュメント化 18.3.2 EDocの実行 18.3.3 EDoc内での型 18.3.4 EDocで次のステップへ 18.4 エクササイズ 19章 EUnitとテスト実行環境 19.1 テスト駆動型開発 19.2 EUnit 19.2.1 EUnitの使い方 19.2.2 関数型のテスト、例:木の直列化 19.3 EUnitのインフラ 19.3.1 assertマクロ 19.3.2 テスト生成関数 19.3.3 EUnitのテスト表現 19.4 状態ベースのシステムに対するテスト 19.4.1 定型処理:セットアップと後始末 19.5 Erlangにおける並列プログラムのテスト 19.6 エクササイズ 20章スタイルと効率 20.1 アプリケーションとモジュール 20.1.1 ライブラリ 20.1.2 きわどいコード 20.1.3 インタフェース 20.1.4 返却値 20.1.5 内部データ構造 20.2 プロセスと並列性 20.3 スタイル上の便宜 20.4 コーディングの戦略 20.5 効率 20.5.1 逐次的プログラミング 20.5.2 リスト 20.5.3 末尾再帰と非末尾再帰 20.5.4 並列性 20.6 最後に… 付録 Erlangの使用法 A.1 Erlangのスタート A.1.1 システムのインストール A.1.2 Erlangシェルの実行 A.2 Erlang用のツール A.2.1 エディタ A.2.2 その他のツール A.3 更に勉強するために 索引