タグ

ブックマーク / cpplover.blogspot.com (14)

  • OpenGLでムカつくこと

    Rich Geldreich's Blog: Things that drive me nuts about OpenGL Valve社員のRich Geldreichが、OpenGLの設計が古臭すぎることについて不満を爆発させている。 OpenGLについてムカつくことを脳内ダンプしてみる(これは個人的な件秋であって、Valveや同僚の見解ではない。あと、ここ数年、OpenGLと格闘してきたので、今日は機嫌が悪い)。これを投稿する理由はこうだ。GL APIには再設計が必要だ。というのも、思うに、MantleやD3D12がどうせ昼飯前にOpenGL APIを駆逐してしまうだろうから、この問題については、今考える必要があるのだ。 ここに見れば些細な問題もある。単にAPIのトレースの問題というのもある。しかし、それらの問題が積み重なって、他の開発者にGL APIという環境に飛び込むよう誘うのを躊

    mntone
    mntone 2015/01/25
  • C++0xにおけるPODの定義

    C++0xのPODの定義をまとめてみた。ただし、C++0xでは、memcpyでコピーして、各データメンバーの状態が保証されるためには、、trivially copyable classであればいい。 PODは、trivial classかつstandard-layout classであること。 さらに、非PODな非staticデータメンバーを持たないこと。 trivially copyable class ユーザー定義のコピー、ムーブのコンストラクタと代入演算子がないこと。 デストラクタがtrivialであること。 trivial class trivially copyable classに加えて、コンストラクタもtrivialであること。 trivialであるということは、ユーザー定義ではないことと、delete化(C++0xの新しい機能)されていないこと。 コピー、ムーブコンストラク

    mntone
    mntone 2015/01/21
  • getAttributeの実装が規格通りではない

    W3Cの規格では、getAttributeの戻り値は、以下のように規定されている。 The Attr value as a string, or the empty string if that attribute does not have a specified or default value. なるほど、指定された属性が場合は、empty stringを返すのだな。と思って、ある属性があるかどうかを判断するコードを、そのように書いた所、何故か動かなかった。不思議に思って調べてみると、どうやら、すべてのブラウザで、nullを返している。何故だろう。W3Cの規格では、nullを返すべき所は、ちゃんとnullを返すように書かれている。何故ここは、empty stringを返すと規定されていて、しかもすべてのブラウザで、nullを返すように実装されているのか。不思議だ。 こうなってくると、

    mntone
    mntone 2014/12/12
  • cpで大量のファイルをコピーした(4億3200万件、39TB)

    GNUのcpを使って大量のファイルをコピーしたところ、cpの設計上の問題で、極めてコピーが遅かったというお話。 My experience with using cp to copy a lot of files (432 millions, 39 TB) よう。俺は最近、大量のファイルをコピーする必要があったんだが、UNIXは20年もやってきた俺の経験からも、cpの挙動には驚かされたし、俺の意見はコミュニティに共有されるべきだと思う。 環境:古いDellのサーバー(2コア、初期メモリ2GB、追加して10GB、Ubuntu Trusty)と、新しいDellのストレージ格納機(MD 1200)にある、12個の4TBディスクでRAID 6が設定してあって、全体で40TBの要領を持ち、二つのドライブが同時に失敗しても問題ない環境。サーバーは遠隔地バックアップに使われていて、ディスクへの書き込みし

    mntone
    mntone 2014/09/12
  • ドワンゴのC++勉強会で発表した

    歌舞伎座.tech#2でC++14について発表した。 今回、ドワンゴ側から、交通費ぐらいは出すから、C++11かC++14について話してくれと言われた。正直、C++14が出てくるとは思わなかった。まさか、日の企業にそんな気概のあるところが残っていようとは期待していなかった。ともかく、C++14について話してくれと言われたので、C++14に新しく追加されるコア言語機能をすべて解説することにした。 当日使ったスライドは、GitHubにあげてある。 EzoeRyou/kabukiza-tech2-slide また、GitHub Pagesも有効にしてあるので、Web上で閲覧できる。 http://ezoeryou.github.io/kabukiza-tech2-slide/index.html 。 当日はそれなりに盛り上がったようだ。 私は普段酒は飲まないのだが、今日、たまたまビールがあるの

    mntone
    mntone 2013/11/15
  • 本の虫: rvalue reference 完全解説

    目的 この記事は、C++0xのrvalue referenceを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からrvalue referenceを恐れることなく使う物のC++0xプログラマになれるだろう。 lvalueとrvalueについて Cの時代では、lvalueとrvalueの違いは、代入演算子の左側か右側かという違いだけであった。つまり、left hand value, right hand valueの略である。従って、訳語も、左辺値、右辺値であった。C++においては、これはもはや正しくはない。従って、右辺値、左辺値というのも、誤訳である。それ故に、ここでは、これ以上、左辺値、右辺値という名称を使用しない。 誤解を恐れずにいえば、lvalueとは、明示的に実体のある、名前付きのオブジェクトであり、rvalue

    mntone
    mntone 2013/09/18
  • クッキー・クリッカーについて

    昨日、筆者はクッキー・クリッカーなるゲームを体験した。このゲームは、ゲーム質を非常によく抽象化している。ここではそのゲームについて述べるが、読者には実感のため、並行してゲームを行なってもらいたい。 このゲームのプログラムはHTML/CSS/JavaScriptと、その他のリソースで構成されていて、ストールマンの自由四原則に合致する自由ソフトウェアではないが、一応は、制限的ながら、forkや改変を許諾している。このプログラムを動作させるには、まともなブラウザーが必要である。 Cookie Clicker まずみると、左に素晴らしくうまそうなクッキー、中央によくわからない列、右によくわからない小物が並んでいる。操作方法がよくわからない。まず、左にこれみよがしに配置してある、うまそうなクッキーをクリックしてみよう。 +1 なんと、クッキーが一枚得られた。続けてどんどんクリックしていくと、数十

    mntone
    mntone 2013/09/17
  • Intelのドキュメント化されていないマイクロコードアップデート用のバイナリの考察

    Notes on Intel Microcode Updates 最近のIntelの(AMDにもあるが)CPUには、マイクロコードをアップデートする機能が付いている。これにより一部のCPUの不具合を修正することができる。 このアップデートは、通常、マザーボードのファームウェアがOSに制御を渡す前に行うが、OSが行うこともできる。 マイクロコードアップデート用のバイナリは、Intelが公開している。このバイナリのフォーマットはドキュメント化されていない。アップデート用のバイナリが更新される際も、どのCPUのどのような不具合を直したなどという情報は公開されていない。 一体どんなフォーマットなのかということを外部から観測できる挙動によって考察した内容が公開されている。なかなか暗号解読のような趣があり面白い。 一見したところ、バイナリはほとんどランダムで、構造らしきものが見当たらない。 まず行なっ

    mntone
    mntone 2013/09/13
  • C++1yに提案されている不透明エイリアス(opaque alias)

    [PDF注意] N3741では、C++1yに向けて、不透明エイリアス(opaque alias)が提案されている。 不透明エイリアスとは、Strong typedefなどとも呼ばれてきた機能で、typedefに似ているが、別の型として認識される別名の宣言機能だ。 C++には、Cから受け継いだtypedef指定子という機能がある。また、最近はもう少しまともな文法の、エイリアス宣言がある。どちらも機能も、「typedef名」という型に対する別名を宣言する。 typedef int Integer ; // typedef指定子 using Number = int ; // エイリアス宣言 typedef名は、ソースコード中に、型名で意味を記述させることができる。例えば、年齢とかお金とか身長とかだ。 using Age = int ; using JPY = int ; using Heigh

    mntone
    mntone 2013/09/09
  • 本の虫: GNU/LinuxのC++11でプログラミングの常識がひっくりかえった

    C++11のコア言語を詳細に解説するを書いている。ライブラリについては書の範疇ではないし、どちらかと言えばコア言語の方が好きなのだが、ライブラリの解説だってやってやれないことはない。せっかくなのでC++11の範囲で非同期処理について書くことにしよう。 例えばあるファイルを全部メモリ上に読み込むような処理を考えよう。ファイルの読み込みは時間がかかる。残念ながら、まだmmapのようなmemory mapped fileは標準ライブラリにないし(あったとしてもこの問題には不適だし)、非同期I/Oもない。そのため、ファイルの読み込みは別のスレッドで行い、結果を元のスレッドに返したい。 これは非常に難しい問題である。別のスレッドを作ってその終了を待たなければならないどころか、その別のスレッドから何とかしてデータのやり取りをしなければならないのだ。それだけではなく、ファイルを読み込むという処理も書

    mntone
    mntone 2013/04/09
  • 本の虫: lambda 完全解説

    目的 この記事は、C++0xのlambdaを完全に解説せんとする目的を以て書かれた。サンプルコードは最小に留め、エラー処理等は省いた。この記事さえ読めば、今日からlambdaを恐れることなく使う物のC++0xプログラマになれるだろう。 lambdaとは何ぞや lambdaである。あるものは、lambda関数、あるいは無名関数という名称を使っている。いったいlambdaとは何なのか。 lambdaは関数である。また、特に名前はない。したがって、lambda関数、無名関数と呼ぶのは、間違ってはいない。しかしここでは、単にlambdaと呼ぶことにする。 lambdaを定義しよう lambdaは関数オブジェクトである。lambdaは関数オブジェクトである。これはとても大事なので二度書いた。lambdaは関数オブジェクト以外の何物でもない。ところが不思議なことに、皆lambdaが単なる関数オブジェ

    mntone
    mntone 2013/03/22
  • Linux財団が自前軽量ブートローダーをMSのUEFI鍵で署名してもらうのに四苦八苦

    [Phoronix] Linux Foundation Struggles With Microsoft UEFI Signing Linux財団が過去に発表したUEFIに対する方針とは、自前の軽量ブートローダーを用意し、それをMS鍵で署名して、その軽量ブートローダーが実際のブートローダーをブートするという仕組みを作るというものだ。問題は、その軽量ブートローダーの署名プロセスに手間取っている。 まず、ブートローダーを署名してもらうためには、VerisignかSymantecの認証局による署名鍵が必要だ。それを超えたらMSの秘密鍵でブートローダーを署名してもらうために、マイクロソフトのWebサイトでブートローダーをアップロードするのだが、このWebサイトのアップローダーが、こともあろうかSilverlightで実装されている。MonoベースのMoonlightでは正しく動作せず、結局、ブート

    mntone
    mntone 2012/11/22
  • DNSの終焉が垣間見える、ぶっ飛んでて危険すぎるお名前.comの検閲事件

    忍者ツールズ全サービスが表示不可となる障害につきまして | ドメイン取るなら お名前.com ドメイン取得 年間280円~ 忍者TOOLSは、お名前.comというドメイン名レジストラにninja.co.jpのドメイン情報を管理させていた。忍者TOOLSは、ninja.co.jpというドメインを、自社の様々なサービスに使っていた。そのサービスは、忍者TOOLSのユーザーが使うものである。 さて、お名前.comの主張では、忍者TOOLSのユーザーがお名前.comの規約違反を起こしたために、ユーザーの規約違反は、すなわちそのユーザーのサービス提供元の規約違反であるとし、事前の協議や警告すらなしに、一方的にninja.co.jpのドメイン情報を消したそうだ。 これは恐ろしく危険な事件である。問題は、DNSが階層的な中央管理をされたシステムである以上、この問題は仕組み上どうしようもないという事である

    mntone
    mntone 2012/07/16
  • gccにconstexprが実装された

    GCC 4.6に、constexprが実装された。constexprについては、特に難しいことはない。単に、関数やクラスを、コンパイル時定数にできるというだけの話である。ともかく、せっかくなので使ってみる。この機能は、細々と解説するより、実際にコードを示したほうが分かりやすいであろう。 まずは、constexprな変数である。 int main() { constexpr int a = 0 ; // OK int value = 0 ; constexpr int b = value ; // エラー const int c = value ; // OK } constexpr指定された変数は、必ずコンパイル時定数になる。変数の初期化子は、定数式でなければならない。constとの違いは、constはコンパイル時定数でなくてもよいのである。constは、初期化子が定数式の場合、定数式にな

    mntone
    mntone 2012/05/25
  • 1