![Write Great Code〈Vol.2〉 低いレベルで考え、高いレベルで書く Write Great Code〈Vol.2〉 低いレベルで考え、高いレベルで書く](/images/books/299/cover_s.jpg)
関連サイト
本書の関連ページが用意されています。
内容紹介
※本書は『Write Great Code〈Vol.2〉』(2006年12月日本語版刊行)の復刊です。
本書では効率的なコードの書き方を説明しますが、本書の主題は最適化ではありません。最適化はソフトウェア開発サイクルの終盤近くに行うべき「調整」であり、適切なパフォーマンスを確保する時期は、開発の設計と実装の段階なのです。本書で紹介している概念の多くは最適化フェーズでも適用できますが、テクニックの大半は最初のコーディング時に行う必要があります。
最新の最適化コンパイラによって効率的なマシンコードに変換される適切な高級言語ステートメントを選択する方法を説明しています。これは、高級言語構文のコストを理解することにほかなりません。多くの高級言語では、特定の結果を得るためにさまざまなステートメントの利用が可能ですが、それよってマシンレベルでは効率の差が発生します。その際に、根拠を持ってステートメントを選択できるようにすることが、本書の目標です。
一般には、パフォーマンスを求めるためには、アセンブリ言語を習得する必要があると言われることが多いのですが、これは必ずしも正しいとは言えません。重要なのは、高級言語がステートメントをマシンコードに変換する仕組みを理解し、適切な高級言語のステートメントを選択できるようになることです。これこそが、「低いレベルで考え、高いレベルで書く」ということなのです。
「本書の主なテーマはパフォーマンスです。パフォーマンスはプログラマーにとって永遠のテーマの1つと呼んでもよいでしょう。近年見られない妥協ない姿勢でパフォーマンスを追求した本書は、凡庸なプログラマーにとどまりたくない皆さんが、もう一段高いレベルに到達する上で役に立つに違いありません。」(まつもとゆきひろ 「監訳者のことば」より)
書誌情報
- 著者: Randall Hyde, (株)トップスタジオ(訳), 鵜飼文敏(監訳), 後藤正徳(監訳), まつもとゆきひろ(監訳), 八重樫剛史(監訳)
- 発行日: 2014-06-03 (紙書籍版発行日: 2014-06-03)
- 最終更新日: 2014-06-03
- バージョン: 1.0.0
- ページ数: 657ページ(PDF版換算)
- 対応フォーマット: PDF
- 出版社: マイナビ出版
対象読者
著者について
Randall Hyde
![](/images/authors/photo573.jpg)
『The Art of Assembly Language』(No Starch Press)の著者で、同書はアセンブラ言語に関する書籍として最も推奨できるものの1つである。
また共著に『The Waite Group's MASM 6.0 Bible』がある。専門誌のほか『Dr. Dobb's Journal』『Byte』にも執筆している。他の著書に『Write Great Code〈Vol.2〉 低いレベルで考え、高いレベルで書く』(マイナビ)。
鵜飼文敏
![](/images/authors/photo575.jpg)
Debian Projectオフィシャルメンバー、元Debian JP Projectリーダー、日本Linux協会前会長、The Free Software Initiative of Japan 副理事長、平成15年度16年度「未踏ソフトウェア創造事業」プロジェクトマネージャー。大学院在籍中に386BSDやLinuxをPC98アーキテクチャで動かして以来、フリーなオペレーティングシステムの世界にはまる。Debian JP Project創設時のメンバーで以後Debianを中心に活動。debian.or.jpおよびlinux.or.jpなどの運用管理を行っている。
後藤正徳
![](/images/authors/photo576.jpg)
コンピュータ全般の中でも、特にDebian、GNU C LibraryやLinuxカーネルなどオープンソースソフトウェア開発プロジェクトに関心を持って活動。Debian Projectオフィシャル開発者、YLUG発起人。現在、メーカー研究所にてデータストレージ・PCクラスタなどの研究開発に携わる。
まつもとゆきひろ
![](/images/authors/photo577.jpg)
高校生時代からのプログラミング言語おたく、オブジェクト指向おたく。1993年からRubyを開発。1997年から(株)ネットワーク応用通信研究所特別研究員としてRubyの開発をメインとして雇われている。オープンソース/フリーソフトウェアにはうるさい、自称オープンソースエバンジェリスト。最近はRubyの開発よりも文章を書いている時間のほうが長いのが悩み。鳥取県米子市出身。
八重樫剛史
![](/images/authors/photo578.jpg)
Debian Projectオフィシャルメンバー。大手ゲームメーカーでネットワーク・サーバ運用を行うかたわら、GNU/Linux組み込みシステムの開発に従事している。近年さらに磨きがかかった深追い体質が災いして佳境続きの日々。
目次
第 1 章 低いレベルで考え、高いレベルで書く
- 1.1 コンパイラの品質に関する誤解
- 1.2 アセンブリ言語の習得が今でも有益である理由
- 1.3 アセンブリ言語の習得が必須ではない理由
- 1.4 低いレベルで考える
- 1.5 高いレベルで書く
- 1.6 前提
- 1.7 言語に依存しない手法
- 1.8 グレートコードを特徴付けるもの
- 1.9 本書で使用する環境
- 1.1 さらなる知識のために
第 2 章 アセンブリ言語習得の勧め
- 2.1 アセンブリ言語の習得を妨げるもの
- 2.2 本書を役立てる
- 2.3 高級アセンブラを役立てる
- 2.4 High-Level Assembler(HLA)
- 2.5 高いレベルで考え、低いレベルで書く
- 2.6 アセンブリ言語プログラミングパラダイム(低いレベルで考える)
- 2.7 『The Art of Assembly Language』およびその他の情報源
第 3 章 高級言語プログラマーのための80x86アセンブリ言語
- 3.1 複数のアセンブリ言語習得の勧め
- 3.2 80x86アセンブリ言語の構文
- 3.3 80x86の基本アーキテクチャ
- 3.4 リテラル定数
- 3.5 アセンブリ言語のシンボル定数
- 3.6 80x86のアドレス指定モード
- 3.7 アセンブリ言語のデータ宣言
- 3.8 アセンブリ言語でのオペランドサイズの指定
- 3.9 最小限の80x86命令セット
- 3.1 さらなる知識のために
第 4 章 高級言語プログラマーのためのPowerPCアセンブリ
- 4.1 複数のアセンブリ言語の習得
- 4.2 アセンブリ構文
- 4.3 基本的なPowerPCマシンアーキテクチャ
- 4.4 リテラル定数
- 4.5 アセンブリ言語の宣言(シンボル)定数
- 4.6 PowerPCのアドレス指定モード
- 4.7 アセンブリ言語でのデータの宣言
- 4.8 アセンブリ言語でのオペランドサイズの指定
- 4.1 最小限の命令セット
- 4.11 さらなる知識のために
第 5 章 コンパイラによる処理とコード生成
- 5.1 プログラミング言語で使用される各種ファイルタイプ
- 5.2 プログラミング言語のソースファイル
- 5.3 コンピュータ言語処理システムの種類
- 5.4 変換プロセス
- 5.5 コンパイラ出力
- 5.6 オブジェクトファイル形式
- 5.7 実行可能ファイル形式
- 5.8 オブジェクトファイル内のデータとコードのアライメント
- 5.9 リンカがコードに与える影響
- 5.1 さらなる知識のために
第 6 章 コンパイラ出力を分析するためのツール
- 6.1 基礎知識
- 6.2 アセンブリコードを出力するためのコンパイラオプション
- 6.3 オブジェクトコードユーティリティを使用したコンパイラ出力の分析
- 6.4 逆アセンブラを使用したコンパイラ出力の分析
- 6.5 デバッガを使用したコンパイラ出力の分析
- 6.6 2回のコンパイル出力の比較
- 6.7 さらなる知識のために
第 7 章 定数と高級言語
- 7.1 リテラル定数とプログラムの効率
- 7.2 リテラル定数とマニフェスト定数
- 7.3 定数式
- 7.4 マニフェスト定数と読み取り専用メモリオブジェクト
- 7.5 列挙型
- 7.6 ブール定数
- 7.7 浮動小数点定数
- 7.8 文字列定数
- 7.9 複合データ型定数
- 7.1 さらなる知識のために
第 8 章 高級言語の変数
- 8.1 実行時メモリの構成
- 8.2 変数とは
- 8.3 変数の記憶領域
- 8.4 一般的な基本データ型
- 8.5 変数のアドレスと高級言語
- 8.6 メモリ内の変数割り当て
- 8.7 さらなる知識のために
第 9 章 配列データ型
- 9.1 配列とは
- 9.2 さらなる知識のために
第 10 章 文字列データ型
- 10.1 文字列の形式
- 10.2 静的文字列、疑似動的文字列、動的文字列
- 10.3 文字列の参照カウント
- 10.4 Delphi/Kylix文字列
- 10.5 高級言語での文字列の使用
- 10.6 文字列内の文字データ
- 10.7 さらなる知識のために
第 11 章 ポインタデータ型
- 11.1 ポインタの定義(ポインタの神話的要素の除去)
- 11.2 高級言語でのポインタの実装
- 11.3 ポインタと動的メモリ割り当て
- 11.4 ポインタの操作とポインタ演算
- 11.5 シンプルなメモリアロケータの例
- 11.6 ガーベジコレクション
- 11.7 オペレーティングシステムとメモリ割り当て
- 11.8 ヒープメモリのオーバーヘッド
- 11.9 ポインタにおける一般的な問題
- 11.1 さらなる知識のために
第 12 章 レコード、共用体、クラスの各データ型
- 12.1 レコード
- 12.2 判別共用体
- 12.3 各種言語における共用体の宣言
- 12.4 共用体のメモリ記憶域
- 12.5 共用体のその他の用途
- 12.6 バリアント型
- 12.7 名前空間
- 12.8 クラスとオブジェクト
- 12.9 さらなる知識のために
第 13 章 算術式と論理式
- 13.1 算術式とコンピュータアーキテクチャの関係
- 13.2 算術ステートメントの最適化
- 13.3 算術式の副作用
- 13.4 副作用を取り入れる:シーケンスポイント
- 13.5 副作用によって生じる問題を回避する
- 13.6 特定の評価順序を強制的に設定する
- 13.7 短絡評価
- 13.8 算術演算の相対的なコスト
- 13.9 さらなる知識のために
第 14 章 制御構造とプログラム内での条件判断
- 14.1 制御構造は演算より低速
- 14.2 低レベルな制御構造の概要
- 14.3 gotoステートメント
- 14.4 break、continue、next、returnなど、機能を限定したgotoステートメント
- 14.5 ifステートメント
- 14.6 switch/caseステートメント
- 14.7 さらなる知識のために
第 15 章 反復制御構造
- 15.1 whileループ
- 15.2 repeat..until(do..until/do..while)ループ
- 15.3 forever..endforループ
- 15.4 確定ループ(forループ)
- 15.5 さらなる知識のために
第 16 章 関数とプロシージャ
- 16.1 単純な関数およびプロシージャの呼び出し
- 16.2 リーフ関数とリーフプロシージャ
- 16.3 マクロとインライン関数
- 16.4 関数やプロシージャへの引数渡し
- 16.5 アクティブ化レコードとスタック
- 16.6 引数渡しの仕組み
- 16.7 関数の戻り値
- 16.8 さらなる知識のために