【宣伝】C85にて「きつねさんとおぼえる!Clang おかわり」を頒布します【取り置きもあるよ】








皆様お久しぶりです。
餅です。
C85に参加するので宣伝エントリです。

スペース/頒布価格

最初にスペース情報と頒布価格から記載しますね。
風ちゃんの暴走を止める立場の私ですが、
今回は風ちゃんの超強気に乗ってしまって200部と相成りました。
たまには余った本を持って帰るのもいいですよね。

  • 頒布物その1:きつねさんとおぼえる!Clang おかわり
  • ページ数:110ページ
  • 価格:1部 800円
  • ※部数制限なし(200部持込)
  • 頒布物その2(再版):きつねさんとおぼえる!Clang
  • 価格:1部 700円
  • ※部数制限なし(50部持込)

内容紹介

内容についてですが、
今回も表紙とイラストは矢上先生(web)にお願いしています。
冬らしく素晴らしい絵を描いて頂きました。狐さまさまです。もふもふ。
本文の方は私と風薬(id:sabottenda)で分担していて
3章(LibClang AST の概要)、4章(LibClang チュートリアル)を風薬が、
2章(環境構築)と5章(LibTooling おかわり! )を自分が書いています。

自分の担当箇所についてもう少し。。。

今まであまりにもツールの紹介をさらっと済ませていましたが、
今回は2章において、clang-formatやclang-modernizeについて
オプションや指定できるスタイルも含め、使用方法を実行例を交えて記載しています。
特に、clang-formatについてはvim拡張の紹介として、
公式で配布されている「clang-format.py」と
rhysdさん(id:rhysd)が作成された「vim-clang-format」を紹介しています。
本文には書き損ねたのですが、実際に使ってみた感想としては
vim-clang-formatのオペレータマッピングが便利で使いやすいです。
本文で利用したコードにフォーマットをかけるときにもお世話になりました。
あとclang-format.pyの紹介では公式に従ってに割り当てるように書いたのですが
色々被って使いにくいので正直あまりお勧めできません。。。
(何で公式はあれにふっているんだろう?)
ちなみに本当は巻末か別紙でclangのオプション一覧をつけたくて
少し前から一つずつ整理してたのですが、
量が多いこともあり、普段使わないオプションを調べるのが間に合わなくて断念しました。
いつか全てが纏まったらエントリにでも書きますかねぇ。。。

5章はc84頒布物の内容をおさらいしつつ、
新たに機能を追加する形で改めてLibToolingの利用方法を解説しています。
今回新たに追加した機能は
・Replacementsの内容をYAML形式で出力する
・オプションで指定した範囲をリファクタリングする
です。
どちらも特別複雑というわけではありませんが、
その他LibToolingの紹介とあわせて読むことで
LibToolingを利用してツールを作成する際のヒント情報にはなるかな?
と思っています。

取り置きについて

今回も前回に引き続き,取り置きの受付をしてみます.
200部もあるから取り置きしなくてもあまりそうですけどね!

とりあえず。。。前回同様取り置きのルールは以下の通りです。

  • 取り置き専用エントリ(こちら)にて名前と必要な部数を申請してください
  • C85 当日は専用エントリに記入した名前をスペースでつげてください
  • 取り置きは最大14時頃までとし,14時までにいらっしゃらなかった場合は通常頒布分にまわします

ご希望の方は取り置き用エントリの方にコメントをお願いします!

目次

目次は以下の様な感じです。
興味がありましたら是非是非おこしください!

  • はしがき
  • 第1 章 はじめに
    • 1.1 本書の構成
    • 1.2 本書の目的
    • 1.3 本書内の記載について
    • 1.4 お断り
  • 第2 章 環境構築とClang の使い方
    • 2.1 本章の概要と構成
    • 2.2 環境
    • 2.3 インストール
    • 2.3.1 ビルドに必要なパッケージのインストール
    • 2.3.2 LLVM/Clang のビルド/インストール
    • 2.3.3 パスの設定
    • 2.4 ツールの種類と確認
      • 2.4.1 clang
      • 2.4.2 clang-check
      • 2.4.3 clang-format
      • 2.4.4 clang-modernize
  • 第3 章 LibClang AST の概要
    • 3.1 Clang の抽象構文木
    • 3.2 LibClang とは
    • 3.3 LibClang における抽象構文木の構造
    • 3.4 抽象構文木の操作関数
    • 3.4.1 インデックスと翻訳単位の操作
      • 3.4.2 翻訳単位とカーソル間の操作
      • 3.4.3 ソース位置と物理ファイル位置間の操作
      • 3.4.4 ソース位置とカーソル間の操作
      • 3.4.5 ソース位置とソース範囲間の操作
      • 3.4.6 カーソル間の移動
      • 3.4.7 カーソルの文字列表現
      • 3.4.8 カーソルの種類
      • 3.4.9 型に関する操作
      • 3.4.10 コメントの取得
  • 第4 章 LibClang チュートリアル
    • 4.1 LibClang の言語バインディングについて
    • 4.2 LibClang のクラスとRuby のクラスの対応
    • 4.3 翻訳単位を作成する
    • 4.4 抽象構文木を走査する
    • 4.5 注釈関数を作ってみる
    • 4.6 ファイル位置を指定してカーソルを取得する
    • 4.7 定義と宣言を取得する
    • 4.8 typedef された型を参照する
    • 4.9 マクロ展開の情報を取得する
    • 4.10 コメントを取得する
  • 第5 章 LibTooling おかわり!
    • 5.1 まえおき
    • 5.2 復習しましょう
      • 5.2.1 LibTooling ってなんだっけ?
      • 5.2.2 前回のおさらい
    • 5.3 今回は何するの?
    • 5.4 リファクタリング情報をファイル出力する
      • 5.4.1 YAML::Output で出力を試す
      • 5.4.2 TranslationUnitReplacements に変更する
      • 5.4.3 MatchCallback とNullptrDegrader の定義
      • 5.4.4 main 関数とoutputRepacementsYAML の修正
      • 5.4.5 コンパイルと実行
    • 5.5 指定した範囲のみ適用する
      • 5.5.1 Degrader クラスとFixer クラスの修正
      • 5.5.2 CommandLine ライブラリ
      • 5.5.3 オプションのパース
      • 5.5.4 コンパイルと実行
  • 目次
  • あとがき
  • 著者/関係者一覧