Boost 1.57.0がリリースされました。
リリースノートの日本語訳を、boostjpのGitHubリポジトリで公開しています。(boostjpのGoogle Siteには未反映)
今回は大きな変更はありませんが、以下の機能拡張がうれしいですね。
- Boost.Moveに、C++03でも使える
unique_ptr
が入った。(元々Interprocessにあったものを正式化) - Boost.Containerに、
std::initializer_list
のサポートが入った。
Boost 1.57.0のBetaがリリースされ、本リリースが近づいてきているので、恒例のリリースノート翻訳を開始します。
現在、boostjpサイトは作業環境をGitHubに移行中のため、まだサイトの方に反映はできないのですが、ひとまずboostjp/siteリポジトリにMarkdownでリリースノートを書き、GitHub上のプレビューで読めるようにしようと思います。
リポジトリは以下です:
Boost 1.57.0のリリースノートは以下です:
push権限を持っていない方は、pull requestをいただければ、そのあとに権限をお渡しします。GitHub上でこのファイルを直接編集するとpull requestを作成できるので、GitとGitHubに慣れていない方でも、気軽に編集していただければと思います。
1文字の誤字修正から、気軽にご参加ください。
これまでC++14の機能は-std=c++1y
オプションで使用できていましたが、Clang 3.5から-std=c++14
オプションが追加されます。(Clang 3.5のリリースブランチにマージされている)
Cinder 0.8.6がリリースされた。
C++14のDIS(Draft International Standard)に対する各国の投票が行われ、満場一致で承認されました。各国から(主に日本から)のコメントによる文面の細かな修正が残っていますが、その作業が完了次第、ISO/IEC 14882:2014(E) Programming Language C++、別名C++14の規格が発行されます。
C++14は、2011年に発行されたC++11に対するマイナーバージョンアップです。小さな機能追加、および文面のバグ修正が含まれます。
C++14の更新内容は、以下のエントリにまとめてあります:
次はC++17です。そちらはメジャーバージョンアップになる予定で、その議論はすでに始まっています。
C++Now! 2014のセッション概要翻訳が完了しました。
C++Now!はBoostの開発者やC++標準化委員会のメンバが多く集まる、C++の最も濃いイベントです。そのセッション内容はどれも有用ですが、その資料全てを翻訳する余裕はありません。
それでもその有用な情報に触れるきっかけになればと思い、boostjpサイトでは、C++Now!のセッション概要を翻訳して公開しています。
この翻訳も、BoostCon時代から続いて5年目になります。これだけの量を毎年よく訳してるなーと自分でも思いつつ、今回も完成に向けてご協力していただいたzakさん、eagle_raptorさん、chichimotsuさんに感謝します。
てきとうに抜粋して書く。
以下のシャッフルアルゴリズムは間違っていて、
def incorrect_shuffle(items): for i in range(len(items)): randomIndex = random.randint(0, len(items)-1) temp = items[randomIndex] items[randomIndex] = items[i] items[i] = temp return items
これには、以下の3つの問題がある:
実は1つだったけど、これは大きな問題だ。
Fisher-Yates Shuffle (Knuth Shuffleとも呼ばれる)の実装は、以下のようになる:
def fisher_yates_shuffle(items): for i in range(len(items)): randomIndex = random.randint(i, len(items)-1) temp = items[randomIndex] items[randomIndex] = items[i] items[i] = temp return items
違いは、以下の1行。
従来のアルゴリズム:
randomIndex = random.randint(0, len(items)-1)
Fisher-Yatesのアルゴリズム:
randomIndex = random.randint(i, len(items)-1)
乱数範囲の開始が0
がi
になっただけだけど、統計をとると偏りがなくなったことがわかる:
ちなみに、C++標準ライブラリに含まれるstd::shuffle()
の実装を調べたところ、GCC 4.9 (libstdc++)、Clang 3.4 (libc++)、MSVC2013のいずれも、Fisher-Yatesを使っていた。([i, size)
ではなく[0, i)
のバージョン)