タグ

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

  • 最初のWebサーバーを保存せよ

    Help save the worlds first webserver. We need to track down a copy of the original tarball WWWDaemon_0.1.tar.Z to preserve in the annals of history. [x-post] : compsci 1991年8月20日、Tim Berners-Leeはcomp.sys.next.announceに対して、歴史に残る告知を投稿した。「info.cern.chから、WorldWideWebアプリケーションのアルファ版リリースをソースコードとバイナリの両方で公開する」 この投稿は、以下の三つのソフトウェアを示し、我々が今知る、いわゆるインターネッツを開始したのだ。 /pub/WWWNeXTStepEditor_0.12.tar.Z NeXT applicati

  • C++11ですみやかにプログラムの実行を終了する方法

    結論:C++11で新しく追加されたstd::quick_exitを使え。 プログラムの終了は、すみやかに行われるべきである。なにしろ、終了なのだ。終了にもたついていてはストレスがたまる。とくに、多くの実行環境では、プログラムの外部から、プログラムを強制終了させる方法がある。強制終了は大抵、プログラムの意志を無視して、強制的に一瞬で行われる。外部からできるのであれば、内部からできてしかるべきである。 なぜプログラムは終了時にもたつくのか。それは、終了時に特別な処理を必要とする場合もあろう。たとえば、数GBものデータを遅いHDDに書きださねばならない場合もあるだろう。これは妥当な理由である。では、確保したメモリやその他のリソースの解放処理はどうか。これは、疑問である。というのも、多くの近代的なOSでは、プログラムは個々に独立している。プログラムには独自の仮想メモリ空間が与えられ、必要に応じて物

  • 本の虫: リチャード・ストールマンは常に正しかった

    Richard Stallman Was Right All Along 去年の年末頃、オバマ大統領はテロリストの容疑者を裁判や令状なしに拘束できる法に署名した。世界中で起こっている平和的なオキュパイ運動家は、権力者からテロリストだとレッテル貼りをされている。通信を監視するSOPAを成立させるような圧力もある。30年前、リチャード・ストールマンがGNUプロジェクトを立ち上げてからこのかた30年間、彼の極端な物の見方は、馬鹿げていてパラノイアじみていると嘲笑されたものだ。しかし、この2012年において、パラノイアだと思われていた予測が、現実のものになろうとしている。 ごく最近まで、リチャード・ストールマンを世間離れしたパラノイアの狂人だと一笑に付すことは簡単であった。まあ、いってみれば、奴は古臭いコンピューターヒッピーだ。地下室に引きこもって自分の世界に浸っているパソコンオタクだ。あのヒゲ、

    Watson
    Watson 2012/01/14
  • DartのFlorian Loitschとのチャット

    IRCのチャットで興味深かったチャットの断片をいくつか。 ezoe: 単項マイナス演算子をユーザー定義するにはnegateを使わないといけないのはちょっと驚きだね。 floitsch:何か代案でも? ezoe:いや、別に不満ってわけでもないけど、理解するのに戸惑ったし、パースでも早くなるのかな? floitsch:-は二項演算子にすでに取られてるからね。 floitsch:もちろん、引数の数を見て判断することもできるけど、それは他ではやってない処理だから、"operator negate"を導入することにした。 ezoe:なるほど、つまり例外的なルールを作りたくなかったのか。 ezoe:そういえば~/演算子ってのもあるけど、他の言語でこの演算子を使ってるのは知らないな。 floitsch:多分ないよ。 floitsch:切り捨ての除算が欲しかったんだ。 TheSheep://?みたいな?

    Watson
    Watson 2011/10/17
  • C++0xのUTF-8対応に問題あり

    今まであまり気にしていなかったのだが、C++0xのUTF-8対応には、非常に深刻な問題があるように思われる。 C++0xでは、u8 encoding prefixを使うことによって、UTF-8でエンコードされた文字列リテラルが使える。 u8"あいうえお" ; しかし、このリテラルの型は、char const [16]なのだ。(UTF-8では、ひらがなは一文字3バイトを要する。null終端を付け加えて、サイズは16となる。) しかし、charという型は、歴史的に、あらゆるマルチバイト文字コードを格納するのに使われている。charを入力に受け取った時点で、それがどんなエンコードを使っているかは分からないのだ。 つまり、以下の様な関数を書いた場合、 // UTF-8の文字列を入力に取る関数 void f( char const * ptr ) { // ptrがUTF-8文字列を参照している保証

  • C++0xの新機能によってユーザーが受ける恩恵

    どうも執筆がはかどらないので、気分転換に、C++0xの新機能によって、一般ユーザーのコードがどのように便利になるかを示してみようと思う。 問題:以下のような仕様の関数printを実装し、また実際に呼び出しなさい。 宣言:関数printは、std::vector< std::string > const &を仮引数に取り、std::vector< std::string >::const_iteratorを戻り値の型として返す。 体:関数printは、仮引数のvectorの要素をすべて標準出力に出力する。 戻り値:v.cbegin()。 C++03の範囲(ただし、cbegin、cendあり)でこれを実装すると、以下のようになる。 std::vector< std::string >::const_iterator print( std::vector< std::string > cons

    Watson
    Watson 2011/01/18
  • Rubyと国際化と英語の問題

    Lucas Nussbaum’s Blog » Blog Archive » Giving up on Ruby packaging Lucas Nussbaumという人は、DebianのRubyパッケージの管理者なのだが、この度、引退するそうだ。やめるにあたって、興味深い内容の意見を出している。 Lucas Nussbaum, who is a Ruby package maintainer on Debian, wrote on his blog he will stop it. He also wrote interesting suggestion. 「Rubyの開発に関する議論は、多くが日語で行われており、さっぱり分からない。Rubyの開発に関する議論は、すべて英語で行うべきである」というものだ。 That is, The development and discussion

    Watson
    Watson 2011/01/03
  • 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は、初期化子が定数式の場合、定数式にな

    Watson
    Watson 2010/11/18
  • 今まで知らなかったswitch文の仕様

    switch文に指定する文は、ブロックでなくてもよい。 int main() { // OK switch(0) ; // OK switch(0) default : std::cout << "hello" << std::endl ; } もちろん、ラベル文がたったのひとつしか書けないので、実用上の意味はない。ブロックでなくてもいいとは知らなかった。てっきり、ブロックを指定するものだと思っていた。知らなかった。まあ、知っていても、全く役に立たない知識ではある。 追記:コメントを素直に実装するとこうなる void f( int const value ) { int i = 0 ; switch( value ) for ( ; i != 10 ; ++i ) { case 1 : case 2 : std::cout << "value is 1 or 2" << std::endl

    Watson
    Watson 2010/07/20
  • 本の虫: IE9のJavascriptの実装について

    IEBlog : The New JavaScript Engine in Internet Explorer 9 要点だけまとめ。 最近は、Javascriptを、物のプログラムとして使うサイトが増えた。ページのCPU使用率の、八割方を、Javascriptが占めているようなページすらある。 そういうわけで、Javascriptをネイティブコードにコンパイルして、最適化するのが、最近の流行である。 動的な言語であるJavascriptを早くするというのは、なかなか難しい。ただに、ネイティブコードを生成すればいいと言うものでもない。Javascriptのような、動的な言語に対して、効率のいいネイティブコードを生成するのは、やはり難しい。が、テクニックは、いくつも考案されている。 問題は、効率のいいネイティブコードを生成するのには、コストがかかるということだ。 多くのサイトでは、Javas

  • MozillaはAppleからコードを借りた

    Asa Dotzler: Firefox and more: mozilla borrowing a bit of code from apple MozillaのJavaScriptエンジンに関する混乱があるようなので、David Mandelinのブログを紹介しておく。David Mandelin's blog » JägerMonkey & Nitro Components。また、a quick note on JavaScript engine components ✩ Mozilla Hacks – the Web developer blogも役に立つ。 俺は技術屋ではないが、まあ、こういうこったろう。 数年前、JavaScriptエンジンはみな、めちゃ遅かった。んでまず、Appleが、SquirrelFish Extremeを作った。これは、Method JITと呼ばれるテク