関連サイト
本書の関連ページが用意されています。
内容紹介
Erlang(アーラン)とは、近年再評価されて注目を集めている関数型プログラミング言語。本書は、並行プログラミングに有効な言語として急速に一般にも認知され始めたプログラミング言語Erlangのバイブル的な解説書を翻訳するもの。原著者はErlangの初期の頃からの開発者の一人。
書誌情報
- 著者: Joe Armstrong(著), 榊原一矢(訳)
- 発行日: 2010-11-17 (紙書籍版発行日: 2009-12-18)
- 最終更新日: 2010-11-17
- バージョン: 1.0.0
- ページ数: 464ページ(PDF版換算)
- 対応フォーマット: PDF
- 出版社: オーム社
対象読者
ソフトウェア開発者 ・学生、研究者
著者について
Joe Armstrong
耐障害性を備えたアプリケーションをより良く作る方法を探る中で、1986年に Erlang の最初のバージョンを設計し、実装した。また、Erlang に関する一番最初の書籍を執筆し、Erlang に関する講座を初めて開催したのも筆者である。筆者が指導したプログラマの数は数百にものぼり、行った講義やキーノートは数え切れない。筆者はスウェーデンのストックホルム王立工科大でコンピュータサイエンスの博士号を取得し、現在は耐障害システム設計の専門家として活躍している。以前には Erlang OTP を生み出したプロジェクトのチーフソフトウェアアーキテクトでもあった。また、最初の Erlang スタートアップ企業の1つである Bluetail には起業家として関わるなど、応用と研究の両面において 30年にわたる経験を持つ。現在は、Erlang を使って耐障害性を高めた交換システムを構築している Ericsson AB に勤務している。
榊原一矢
通信機器や画像処理機器のファームウェア、デバイスドライバなどの開発に携わった後、現在は家庭用ゲームコンソールのオペレーティングシステムを開発している。仕事を離れてもプログラムを書いたり物を作るのは好きだが、1 歳になる長男の面倒を見る合間にしかできないので、Erlang のような軽量プロセススイッチがあればなあと思う毎日。
目次
Joeより
訳者序文
第1章 はじめに
- 1.1 ここからの進め方
- 1.2 もう一度、はじめに
- 1.3 謝辞
第2章 さあ、はじめよう
- 2.1 概要
- 2.2 Erlangのインストール
- 2.3 この本で使われているコード
- 2.4 シェルを起動する
- 2.5 簡単な整数演算
- 2.6 変数
- 2.7 浮動小数点数
- 2.8 アトム
- 2.9 タプル
- 2.10 リスト
- 2.11 文字列
- 2.12 パターン照合をもう一度
第3章 逐次プログラミング
- 3.1 モジュール
- 3.2 買い物に戻る
- 3.3 名前は同じだけれどアリティが異なる関数
- 3.4 fun
- 3.5 簡単なリスト処理
- 3.6 リスト内包表記
- 3.7 算術式
- 3.8 ガード
- 3.9 レコード
- 3.10 case式とif式
- 3.11 自然な順番でリストを作る
- 3.12 アキュムレータ
第4章 例外
- 4.1 例外
- 4.2 例外を起こす
- 4.3 trycatch
- 4.4 catch
- 4.5 エラーメッセージをわかりやすくする
- 4.6 trycatchを使ったプログラミングスタイル
- 4.7 ありうる例外をすべて捕捉する
- 4.8 旧形式と新形式の例外処理
- 4.9 スタックトレース
第5章 高度な逐次プログラミング
- 5.1 BIF
- 5.2 バイナリ
- 5.3 ビット構文
- 5.4 その他の小さな話題
第6章 プログラムのコンパイルと実行
- 6.1 Erlangシェルの起動と終了
- 6.2 開発環境の調整
- 6.3 プログラムを実行するためのさまざまな方法
- 6.4 Makefileを使ってコンパイルを自動化する
- 6.5 Erlangシェルのコマンド編集
- 6.6 トラブルから脱出する
- 6.7 おかしくなってしまったら
- 6.8 ヘルプを見る
- 6.9 環境の調整
- 6.10 クラッシュダンプ
第7章 並行処理
第8章 並行プログラミング
- 8.1 並行処理用プリミティブ
- 8.2 簡単な例
- 8.3 クライアントサーバ―――はじめに
- 8.4 プロセスを1つ作るのに必要な時間は?
- 8.5 タイムアウト付きの受信
- 8.6 選択受信
- 8.7 登録済みプロセス
- 8.8 並行プログラムはどう書く?
- 8.9 末尾再帰について一言
- 8.10 MFAによるプロセス生成
- 8.11 練習問題
第9章 並行プログラムにおけるエラー
- 9.1 プロセスのリンク
- 9.2 on_exitハンドラ
- 9.3 エラーの遠隔処理
- 9.4 エラー処理の詳細
- 9.5 エラー処理用プリミティブ
- 9.6 リンクしたプロセスの集合
- 9.7 モニタ
- 9.8 キープアライブプロセス
第10章 分散プログラミング
- 10.1 名前サーバ
- 10.2 分散プリミティブ
- 10.3 分散プログラミング用のライブラリ
- 10.4 クッキー保護システム
- 10.5 ソケットによる分散
第11章 IRC Lite
- 11.1 メッセージシーケンス図
- 11.2 ユーザインターフェイス
- 11.3 クライアント側のソフトウェア
- 11.4 サーバ側のソフトウェア
- 11.5 アプリケーションの実行
- 11.6 チャットプログラムのソースコード
- 11.7 演習
第12章 外部接続の方法
- 12.1 ポート
- 12.2 外部のCプログラムとの接続
- 12.3 open_port
- 12.4 リンクインドライバ
- 12.5 いくつか注意すること
第13章 ファイルを使ったプログラミング
- 13.1 ライブラリの構成
- 13.2 さまざまな方法によるファイルの読み出し
- 13.3 ファイルに書き込む方法
- 13.4 ディレクトリ操作
- 13.5 ファイルに関する情報を得る
- 13.6 ファイルのコピーと削除
- 13.7 その他もろもろ
- 13.8 find ユーティリティ
第14章 ソケットを使ったプログラミング
- 14.1 TCPの使い方
- 14.2 制御に関する問題
- 14.3 接続はどこから来たか?
- 14.4 ソケットのエラー処理
- 14.5 UDP
- 14.6 複数のマシンへのブロードキャスト
- 14.7 SHOUTcastサーバ
- 14.8 さらに深く
第15章 ETSとDETS:大規模データ記憶機構
- 15.1 テーブルに対する基本操作
- 15.2 テーブルの型
- 15.3 ETSテーブルの効率に関する問題
- 15.4 ETSテーブルを作る
- 15.5 ETSを使ったプログラムの例
- 15.6 DETS
- 15.7 ここでは取り上げなかったこと
- 15.8 ソースコード
第16章 OTP入門
- 16.1 汎用サーバへの道
- 16.2 gen_server事始め
- 16.3 gen_serverのコールバックの構造
- 16.4 コードとテンプレート
- 16.5 さらに深く
第17章 Mnesia:Erlangの標準データベース
- 17.1 データベースの問い合わせ
- 17.2 データベースのデータの追加と削除
- 17.3 Mnesiaのトランザクション
- 17.4 複雑なデータをテーブルに格納する
- 17.5 テーブルの型と置き場所
- 17.6 新品のデータベースを作る
- 17.7 テーブルビューア
- 17.8 さらに深く
- 17.9 ソースコード
第18章 OTP でシステムを作る
- 18.1 汎用イベント処理
- 18.2 エラーロガー
- 18.3 アラームの管理
- 18.4 アプリケーションサーバ
- 18.5 監視ツリー
- 18.6 システムを起動する
- 18.7 アプリケーション
- 18.8 ファイルシステムの構成
- 18.9 アプリケーションモニタ
- 18.10 さらに深く
- 18.11 素数はどうやって作る?
第19章 マルチコアに取り組む前に
第20章 マルチコアCPUのプログラミング
- 20.1 プログラムがマルチコアCPUで効率良く動くようにする方法
- 20.2 逐次コードを並列化する
- 20.3 小さいメッセージで大きい計算をする
- 20.4 mapreduceとディスクの索引
- 20.5 将来の発展に向けて
付録A プログラムのドキュメントを書く
- A.1 Erlangの型記法
- A.2 型を利用したツール
付録B Microsoft WindowsでErlangを使う
- B.1 Erlang
- B.2 MinGWを入手してインストールする
- B.3 MSYSを入手してインストールする
- B.4 MSYS Developer Toolkitをインストールする(任意)
- B.5 Emacs
付録C 参考文献
- C.1 オンラインのドキュメント
- C.2 書籍と論文
- C.3 リンク集
- C.4 ブログ
- C.5 フォーラム、オンラインコミュニティ、交流サイト
- C.6 会議
- C.7 プロジェクト
- C.8 文献目録
付録D ソケットアプリケーション
- D.1 例
- D.2 lib_chan の仕組み
- D.3 lib_chan のコード
付録E その他
- E.1 解析やプロファイリングのためのツール
- E.2 デバッグ
- E.3 トレース
- E.4 コードの動的ロード
付録F モジュールと関数のリファレンス
- F.1 applicationモジュール
- F.2 base64モジュール
- F.3 beam_libモジュール
- F.4 cモジュール
- F.5 calendarモジュール
- F.6 codeモジュール
- F.7 detsモジュール
- F.8 dictモジュール
- F.9 digraphモジュール
- F.10 digraph_utilsモジュール
- F.11 disk_logモジュール
- F.12 eppモジュール
- F.13 erl_evalモジュール
- F.14 erl_parseモジュール
- F.15 erl_ppモジュール
- F.16 erl_scanモジュール
- F.17 erl_tarモジュール
- F.18 erlangモジュール
- F.19 error_handlerモジュール
- F.20 error_loggerモジュール
- F.21 etsモジュール
- F.22 fileモジュール
- F.23 file_sorterモジュール
- F.24 filelibモジュール
- F.25 filenameモジュール
- F.26 gb_setsモジュール
- F.27 gb_treesモジュール
- F.28 gen_eventモジュール
- F.29 gen_fsmモジュール
- F.30 gen_sctpモジュール
- F.31 gen_serverモジュール
- F.32 gen_tcpモジュール
- F.33 gen_udpモジュール
- F.34 globalモジュール
- F.35 inetモジュール
- F.36 initモジュール
- F.37 ioモジュール
- F.38 io_libモジュール
- F.39 libモジュール
- F.40 listsモジュール
- F.41 mathモジュール
- F.42 ms_transformモジュール
- F.43 net_admモジュール
- F.44 net_kernelモジュール
- F.45 osモジュール
- F.46 proc_libモジュール
- F.47 qlcモジュール
- F.48 queueモジュール
- F.49 randomモジュール
- F.50 regexpモジュール
- F.51 rpcモジュール
- F.52 seq_traceモジュール
- F.53 setsモジュール
- F.54 shellモジュール
- F.55 slaveモジュール
- F.56 sofsモジュール
- F.57 stringモジュール
- F.58 supervisorモジュール
- F.59 sysモジュール
- F.60 timerモジュール
- F.61 win32regモジュール
- F.62 zipモジュール
- F.63 zlib