Erlangプログラミング

[cover photo]
  • 2010年07月 発行
  • 508ページ
  • ISBN978-4-87311-465-1
  • フォーマット Print PDF
  • 原書: Erlang Programming

この商品は好評につき現在入荷待ちです
Ebook Storeで電子版を購入:
価格3,110円

Erlangは、エリクソンで電話通信網用に開発された宣言型の関数型言語です。エリクソン社内で20年間にわたり使われてきたという実績があり、並列処理指向、分散処理指向、軽量、耐障害性、稼動中でもバージョンアップ可能といった特徴から、無停止型サーバの構築全般でも威力を発揮しています。マルチコアCPU時代を迎えた現在、マルチコアの最適な利用という観点での注目度も高く、将来を嘱望されている言語です。Erlang歴15年、コミュニティのリーダー的存在であり、Erlang教育のエキスパートであるFrancesco Cesariniと、関数型言語の研究者として有名なSimon Thompsonが、Erlangの特性を理解し、その威力を最大限に発揮させるために不可欠な知識を伝授します。

関連書籍

並行コンピューティング技法

目次
序
まえがき
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 更に勉強するために
索引

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

1刷正誤表

Erlangプログラミング1刷正誤表

2010年8月10日更新

位置
p73
コード
try 式 of
  パターン1 [when ガード1] ->
              式本体1;
  パターン2 [when ガード2] ->
              式本体2
catch
  [クラス1:]例外パターン1
             [when 例外ガード列1] ->
             例外本体1;
  [クラスN:]例外パターンN
             [when 例外ガード列N] ->
             例外本体N
end

try 式 of
  パターン1 [when ガード1] ->
              式本体1;
  ...
  パターンN [when ガードN] ->
              式本体N
catch
  [クラス1:]例外パターン1
             [when 例外ガード列1] ->
             例外本体1;
  ...
  [クラスM:]例外パターンM
             [when 例外ガード列M] ->
             例外本体M
end
p82
2段落
degubber:start() debugger:start()
p109
4段落
2行目
関数の実行に要した時間をミリ秒単位で 関数の実行に要した時間をマイクロ秒単位で
p165
末尾
複数のレコード定義で...しまうためです。 この2行を削除。
p291
1段落
1行目
node:get_path()と打ち込んで code:get_path()と打ち込んで

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]