Mac OS X 上に rustfmt を install しようとした際にコンパイルエラーが発生する問題の回避法

要約

Mac OS X にて,homebrew を使って rust をインストールしていると,cargo install rustfmt を実行した際に失敗する. これは,homebrew 経由でインストールした rust コンパイラが,予期せぬ LC_ID_DYLIB の値を渡されるために発生する. この問題の回避方法は,homebrew 経由でインストールした rust を一旦アンインストールし,rustup 経由で rust をインストールした上で,cargo install rustfmtを実行し直すことである(2017/6/4現在).

経緯

rustfmt があることを知って,早速インストールしようとしたら失敗した.

$ rust install rustfmt
...(中略)...
   Compiling env_logger v0.4.3
error: proc-macro derive panicked
   --> /Users/ozawa/.cargo/registry/src/github.com-1ecc6299db9ec823/rustfmt-0.8.4/src/config.rs:213:18
    |
213 |         #[derive(Deserialize, Clone)]
    |                  ^^^^^^^^^^^
...
329 | create_config! {
    | - in this macro invocation
    |
    = help: message: proc_macro::__internal::with_parse_sess() called before set_parse_sess()!

error: failed to compile `rustfmt v0.8.4`, intermediate artifacts can be found at `/var/folders/59/5_yyjdc92zzfjsvrhz46x2mc0000gn/T/cargo-install.EsADzsGoPlu6`

コンパイルエラーの内容で検索をしたところ以下の github issue を発見. github.com

github.com

上記コメントを見て,rustup 経由で rust の再インストールを行うことで,正常に動作させることができた:

$ cargo install rustfmt
...(中略)...
   Compiling env_logger v0.4.3
    Finished release [optimized] target(s) in 269.78 secs
  Installing /Users/ozawa/.cargo/bin/cargo-fmt
  Installing /Users/ozawa/.cargo/bin/rustfmt

動的計画法

ここ数日,動的計画法の練習をしている.漸化式の立て方のコツが分からず苦戦していたのだが,kinaba 先生の動的計画法の考え方を読んだことがきっかけで,大分理解が進み,漸化式の立て方が分かってきた.漸化式も,問題から自明に導くというよりも,計算結果のキャッシュを使うように部分問題を展開するという点がポイントであると思った.一旦キャッシュをりようできるように漸化式を立ててしまえば,その通りにループを記述するだけなので,シンプルに記述できる.

Code Complete の上巻を読んだ

Code Complete の上巻を読み終えた.本書は,設計,コーディングの際に,保守性高く,かつバグが減らせるようにプログラムを書くにはどのようにしたら良いか,ということをテーマにした本である.

これまで自分が暗黙のうちに行っていた,もしくは(恥ずかしながら)全く意識できていなかったクラス設計や構文に関する bad practice,best practice が書いてあり,大変参考になった.コーディングやレビューを行う際に大変有用であるように思う.

コーディングやレビューは,感覚や好みがあるため,筆者の思いが入りがちだが,この本は可能な限り客観的に書こうとしているところが良い.また,深いテーマ(例えば,オブジェクト指向を用いたソフトウェア設計に関してなど,)については,深入りしすぎず,参照元を明らかにして必要最低限の量の説明にとどめている点も気に入った.(おかげさまで,何冊か本を購入することとなった.)

この記事を書くにあたって気付いたのだが,Kindle で上下巻セットになった電子書籍版がでている.これから購入する場合はこちらの方がお買い得のようだ(2016/9/20 現在).

輪講と Timeline Server

Timeline Server の Writer に実装が完成して投稿.よくよくみたら設計が決まっていたので作るだけだった.Reader はどうもインタフェース自体が存在しないように見える...これから設計しないとかな.

輪講に備えて Designing Distributed Systems Using Approximate Synchrony in Data Center Networksを読む.アプリケーションを Datacenter topology-aware にすることで paxos が高速になるという内容.非常に面白い.