アメリカ時間の昼ごろにTwitter上が一つのニュースで埋め尽くされました。 PHPをC++に変換して高速化する技術をFacebookが公開したというものです。世界中のPHPハッカーが注目する興味深いリリースという事でちょっと長いですが、リリースノートの和訳を行いました。 原文 http://developers.facebook.com/news.php?blog=1&story=358 Facebookにおいて重要なことのひとつが動作の速さです。過去6年間にわたって、PHPが提供する高速な開発ペースによって多くを成し遂げてきました。プログラミング言語としてみると、PHPはシンプルです。簡単に習得し、簡単に書き、簡単に読み、簡単にデバッグする事ができます。我々は他の言語よりも早くエンジニアを獲得し、それによってより早いイノベーションをすることができます。 今日、私は2年に渡って作業して
ネットを、ぼ〜っと回っていると、面白いネタが紹介されていました。 革命の日々! Cプリプロセッサの文字列化まじっく http://mkosaki.blog46.fc2.com/blog-entry-167.html __FUNC__マクロというのが使えるようです。 で、どのバージョンから使えるのだろう?ってんで、少し関係する情報をかき集めてみる事にしました。 7.3 前定義識別名 __func__ http://seclan.dll.jp/c99d/c99d07.htm フリーソフトウェア徹底活用講座(9) : 定義済みマクロ__func__と可変長引き数マクロ http://www.cqpub.co.jp/interface/column/freesoft/2003/200305/2.htm デバッグ出力 http://www.doumo.jp/aon-java/jsp/postgret
ここでは,C++の中でも特に高度な2つの機能,テンプレートと例外処理について学ぶ.これらの機能を用いると,再利用可能で,堅牢なプログラムコードを作成することができる. テンプレート(template)は具体的なコードを作り出すための抽象的な処方(ひな形)を提供する.テンプレートは汎用関数やクラスを作ることに用いることもできる.コンパイラはテンプレートを用いて関数やクラスのコードを生成する.テンプレートを用いて生成された汎用関数やクラスはテンプレートのインスタンス(instance)とよばれる. また,同じテンプレートからいろいろ異なるインスタンスを生成することができる.これはパラメタが関数に対して行う役割をまねたテンプレートパラメタにより行われる.だたし,テンプレートパラメタは型やクラスを引数として扱うことができる.そこで,テンプレートパラメタを汎用型(generic type)とい
(2006.1.28の日記を修正、加筆。) (2006.10.8 新規公開。) Rubyの生産性の高さの理由のひとつクロージャ (closure; 閉包) と、関数・クロージャの単位で再利用できるようにするカリー化について。 コールバック関数 Rubyの話のまえに、クロージャのないC/C++で関数を再利用する方法、その問題点を見ていく。 まずは、単純なコールバックについて。コールバックといえばqsort()関数。引数として二つの値を比較する関数を渡す。 #include <stdlib.h> #include <stdio.h> int compare(const void* a, const void* b) { return *(const int*)a - *(const int*)b; } int main() { int a[] = {3, 4, 1, 2}; int i; qs
C++0xでは、可変引数テンプレートという機能が追加されます。 これを使うと、テンプレートパラメータを可変個受け取ることができ、 template <class... Args> // ...と書くと可変引数テンプレートになる class tuple; 可変引数テンプレートは型のリストと見なすことができます。 tuple<int> t1; // 要素1つ(int)の型リスト tuple<int, char> t2; // 要素2つ(int, char)の型リスト tuple<int, char, long> t3; // 要素3つ(int, char, long)の型リスト ということで、型リストがどこまでできるか試すために リスト処理を作ってみました。 headとtail - 先頭と後部 length - 長さ at - I番目の型を取得 concat - 型リストの連結 cons -
Google が公開しているソフトウェアの解説シリーズ(→その1 , その2)の続きです。今回は google-glog を使ってスタックトレースを表示する方法についてご紹介します。 C++ でプログラムを書いているとよく遭遇するのがセグメンテーション違反というエラーです。不正なアドレスへのアクセスなどによりセグメンテーション違反が起きると、通常、 UNIX 系の OS では SIGSEGV というシグナルによってプログラムが終了するとともに、 core というファイルが作られます。 core ファイルにはデバッガから参照できるいろいろな情報が残っていますが、多くの場合に役に立つのは、スタックトレースという情報です。スタックトレースを見れば、プログラムがどこでクラッシュしたのか、どのような関数を経由してそこにたどり着いたのかがわかります。プログラムがクラッシュした箇所を特定できれば、単純な
Win32のデバッグ Win32アプリケーションでは、デバッグ情報をコンソールに出力するようなこともできません。手軽なMessageBox関数を使う方法と、デバッグをサポートするAPIについて解説していきます。 MessageBoxを使う MessageBox関数は簡単なデバッグには便利です。例えば MessageBox( NULL, "呼ばれたよ", "title", MB_OK); とすれば、次のようなダイアログが表示されます。 メッセージボックスの例 MessageBoxで現れるダイアログはモーダルなので、ダイアログを閉じるまで制御は帰ってきません。例えば、アプリケーションが異常終了してしまう場合は、原因となりそうな周辺に1行づつMessageBox関数を挿入すれば、どこで異常終了が発生しているかを判断できます。 ただし、MessageBoxには、printf関数のように変数の値を表
このページについて C++関係の話に出てくる言葉で、「読んで字の如し」 とはいかない難解語の簡単な解説を並べてみました。Glossaryというより、 むしろ略語辞典になってしまいました。巷で見かけた単語を並べているだけなので、 実際の所ほとんど使われない略語もあったりするかもしれません。 ちゃんとした用語集は Bjarne Stroustrup's C++ Glossary などをご覧になることをオススメします。 用語集 ADL (Argument Dependent name Lookup) 引数に依存した名前の探索。 Argument Based Lookup, Koenig Lookup とも呼ばれる。 #include <iostream> #include <string> ... std::string s; std::cout << s << std::endl; // os
Perlの謎APIをwrapして、Perlスクリプトの関数をC++から簡単に呼び出せるようにしてみた。 てか、 リファレンスカウントを透過的に行えるようpimpl形式のコンテナを使ってみる mortalを透過的に行えるようcall_sv()による関数呼び出しを完全にブラックボックス化する って実験をやりたかっただけなのにDevel::BindPPとは完全に別プロダクトになっちゃいました。 test1() は、任意の数の引数を取り、引数の合計値を返す add()という関数 *1 を C++ から呼び出す例。 test2() は、MIME::Base64::encode_base64() を呼び出す例。 test3() は、複数個の値を返す関数を処理する例。 test4() は、perl::value() の演算子オーバロードのテスト。 #include <iostream> #include
構造体って? C 言語で、いくつかの変数をひとまとまりにしたものを構造体といいます。例えば、下のように struct を使って定義します。 typedef struct Item { int code; /* 商品コード */ int name; /* 商品名 */ int price; /* 価格 */ } ITEM, *LPITEM ; 商品コードと商品名と価格を管理する場合、code, name, price の変数をそれそれ作るよりも商品( Item) でひとまとめすることでプログラムがわかりやすくなります。こういったまとまったデータをレコードともいいます。プログラムが小さいと大げさなように感じされますが、複雑になるにまし、struct のありがたみがわかります。 では C++ の構造体はというと、同じように使えます。C++ はCのソースコードをそのままコンパイルできるようになって
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く