IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

C++

C++ のグローバル

C++

グローバルでどの程度のことをやっていいんだろう #include <iostream> static const int a = ( std::cout << "hoge" << std::endl, 1); int main(int argc, char** argv) { std::cout << "fuga" << std::endl; return 0; } 宣言の形をしていればどのような式でも書く</iostream>…

Boost::Test で、 teardown や setup をする方法

C++

めもめも #define BOOST_TEST_MODULE "Unit test for hogehoge." #include <boost/test/unit_test.hpp> struct Fixture { Fixture() { // ここに setup 的なことを書く } ~Fixture() { // ここに teardown 的なことを書く } }; BOOST_GLOBAL_FIXTURE( Fixture ); BOOST_AUTO_TEST_SUITE</boost/test/unit_test.hpp>…

サーバー起動用に JavaScript が 1 秒以上実行されなくて alert しないブラウザを作る

はじめに サムネイルサーバーのようなサービスを作るときには、ウェブサーバー上にブラウザを乗せる必要があります。 問題 ただ、そういった用途でブラウザを使う場合。 JavaScript が無限ループに落ち入らないように配慮する必要があります。 ほとんどの場…

Xvfb と WebKit と Gtk と楽しい!

おおおおお めもめも $ export DISPLAY="localhost:1.0" $ Xvfb :1 -screen 0 1024x768x16 & $ WebKitBuild/Debug/Programs/GtkLaunchaer $ xwd > /tmp/hoge.wd && convert /tmp/hoge.wd hoge.gifお コンテンツ部分だけー おおおお $ xwininfo -tree -root x…

テンプレートのメンバ関数がインスタンス化される箇所

C++

以下のエントリで色々と勉強になりました クラステンプレートの具現化の位置 - hattorix0の日記 ありがとうございます! 重要なのは以下の箇所 For a function template specialization, a member function template specialization, or a specialization fo…

C++ 私的めも

C++

クラステンプレート内で frinend 関数を定義した場合の名前の扱い Every name first declared in a namespace is a member of that namespace. If a friend declaration in a non-local class first declares a class or function*1 the friend class or fun…

テンプレートのインスタンス化のタイミングが分からない><

C++

namespace ns { struct B {}; } template <typename T> struct A { void f0(T b) { f(b); } }; int main() { A<ns::B> a; a.f0(ns::B()); // ここで A::f0 のインスタンス化が必要になって return 0; } // この時点で A::f0 がインスタンス化される namespace ns { void f(B b) </ns::b></typename>…

boost::spirit を使ってみる

C++

はじめに boost::spirit の使い方の勉強。ちょっとずつ追記していく形式で書く 基本的なこと hpp ファイルと ipp ファイルの中で実装されているので、何もリンクしなくていい。 とりあえず boost/spirit.hpp を読み込めば使えるみたい。 まず、一番シンプル…

定義 (definition) と宣言 (declaration) とディレクティブ (directive)

C++

http://www.kuzbass.ru:8086/docs/isocpp/basic.html 定義は、スコープ上に実体と名前が出来る。 宣言は、スコープ上に名前が出来る。 ディレクティブは何も出来ないが、名前解決に影響を及ぼす。

gdb で operator<< にブレイクポイントを設定する

C++

break コマンドだと malformed template だと怒られる $ gdb ./a.out (gdb) b std::operator<< malformed template specification in command rbreak で出来た 正規表現で関数名を指定出来るらしい。 $ gdb ./a.out (gdb) rb std::operator<< Breakpoint 1 a…

iostream メモ

C++

とりあえず、何が行われているか知らないと怖くて使えないので bits/char_traits.h namespace __gnu_cxx template<typename _CharT> struct _Char_types { typedef unsigned long int_type; typedef std::streampos pos_type; typedef std::streamoff off_type; typedef std::</typename>…

日本語難しい

C++

「どのような派生クラス(もしくは、データメンバかつ/または(and/or)派生クラスの基底クラス、あるいは、派生クラスのデータメンバのデータメンバの基底クラス、あるいは、派生クラスのデータメンバの基底クラスと基底クラスとデータメンバの再帰的な組…

C++ のお勉強

C++

とりあえず daytime のクライアント ほとんどこれの写経 #include <iostream> #include <boost/asio.hpp> int main () { // io_service を介して OS の IO を使う boost::asio::io_service io_service; // ソケットを作る boost::asio::ip::tcp::socket socket(io_service); // 名前解</boost/asio.hpp></iostream>…

JavaScript 的な考え方で C++ Template に入門してみた

はじめに id:kazuhooku さんが Kazuho@Cybozu Labs: なんとなくリフレクション in C++ という記事を書いていて、なんか凄そう! わくわく! でも、読めません>< Template 怖い>< という訳で C++ Template の勉強をしてみよう! そいえば、ちょっと前に 1…

yasm でオブジェクトファイルのシンボル名の先頭に _ を付ける方法

C++

この記事は間違いでいした>< 見ていたコードが PREFIX が define されてたら、 _ を付けるようなコードになってただけでした>< Mac だと付かないので -DPREFIX で出来るのか $ yasm -DPREFIX hoge.asm

spin_lock を使ってみる(再挑戦)

C++

spin_lock は wait するようなところで使っちゃいけない 以下のエントリで spin_lock とは - IT戦記 id:kosaki さんからコメントを頂きました! たぶん気づいていると思いますが、waitが必要な場合は、そもそもspin_lockが適切じゃないケースなのでspin lock…

pthread でキューを作ってみる(再々挑戦、最終版)

C++

先日の pthread のキューですが pthread でキューを作る(再挑戦)。ついでに dtrace でスレッドの解析 - IT戦記 このエントリのコメント欄でさらに id:n-soda さんにアドバイスを頂いたので、修正したいと思います。 まず、 memory.h は古いらしい string.h…

spin_lock とは

C++

一日一回スレッドの勉強 spin_lock とは 今のところの理解です。間違っているかもしれません。 スレッドが休止状態にならない。 ロックが取得できない場合は、 while (1) trylock() のようにスレッドが無限ループのような状態でロックが取得できるのを待ち続…

pthread でキューを作る(再挑戦)。ついでに dtrace でスレッドの解析

C++

一日、一回 pthread 勉強。 はじめに pthread でキューを書いてみる - IT戦記に関して、id:n-soda さんからとても貴重なアドバイスを沢山頂いたのですべて直しておきたいと思います。 本当にありがとうございます。 指摘が会った点まとめ 再帰呼び出しの問題…

駄文 - アウトオブオーダー実行

C++

アウトオブオーダー実行って、依存関係の無い命令を見つけるコストって無いのかな。 out of order CPU「えーっとこの命令には、この命令の結果が必要で、えーっとえーっと><」 in order CPU「そんなこと考えてる前に、上から順にやったほうが速いぜー!お…

DTrace の D 言語の文法と使い方のメモ

なんか、中途半端になってしまった。。。読まないほうがいいです。 個人的なメモ だらだら書く 動機 pthread の確認するときに dtrace が凄く便利だったので でも、全然使いこなせてない。(特に D 言語の文法が分からない) dtrace のトレースの方法を書く…

最初の一回だけ初期化したいとき

C++

一日一回スレッド勉強 最初の一回だけ初期化したいとき 以下のように書く // まったくセンスのない例ですが #include <stdio.h> #include <pthread.h> // この p を static char* p = NULL; static pthread_mutex_t m; void* f(void* _p) { // 最初にここを通ったときだけ初期化</pthread.h></stdio.h>…

pthread でキューを書いてみる

C++

この記事は全然ダメだったようです。 こちらに新しく書き直しました。 http://d.hatena.ne.jp/amachang/20080617/1213694238 こんな感じになった #include <stdio.h> #include <stdlib.h> #include <memory.h> #include <pthread.h> static int* q; static int n; // 次に入れるインデックス static i</pthread.h></memory.h></stdlib.h></stdio.h>…

JavaScriptCore を自分でビルドして、遊んでみる

http://d.hatena.ne.jp/amachang/20080610/1213099780 の続きです。 どうせなら JavaScriptCore も自分でビルドしようぜ!ってことで JavaScriptCore のソースを持ってくる $ svn co http://svn.webkit.org/repository/webkit/trunk/JavaScriptCore/ A JavaS…

JavaScriptCore (Safari の JavaScript エンジン) を使って C 言語から JavaScript を実行する

はじめに JavaScriptCore (WebKit/Safari の JavaScript エンジン) を C 言語に組込む方法を調べてみました。 解説はソースコード中のコメントを見てください。 まず 以下のコードを hoge.c とかいう名前で保存します。 #include <JavaScriptCore/JavaScriptCore.h> static JSValueRef jsGloba</javascriptcore/javascriptcore.h>…

pthread 勉強

C++

だらだら書くよ 初めてのコード #include <pthread.h> void* f(void* p) { puts("hello"); sleep(1); puts("hello"); sleep(1); puts("hello"); } int main(int argc, char** argv) { pthread_t thread; pthread_create(&thread, NULL, f, (void*)NULL); pthread_join(t</pthread.h>…

駄文

C++

僕は pthread を知らない>< POSIX スレッド

error トークンの挙動

C++

error トークンがどうゆう感じの挙動をするのか細かく知りたい ということで、 bison で生成されたコードを読む エラーが検出される箇所 yybackup: /* Do appropriate processing given the current state. Read a look-ahead token if we need one and don'…

shift/reduce コンフリクトの解決

C++

shift/reduce コンフリクトはルールのほうに優先順位を付けてやるか、左右の結合方向を示してやればいいのか。 ルールに優先順位を付ける方法は以下のような感じ %left UNIMPORTANT_TOK %% selector_list: selector %prec UNIMPORTANT_TOK | selector_list '…

空のルールの取り扱い

C++

空のルールの取り扱いが分かってきた。 空のルールがある場合は、 goto 先の状態が、更に空のルールを含む終端で goto する可能性がある場合、更にその先の先読みトークンをマージする。 つまり、 goto 先の状態が、更に空のルールで goto するものの goto -…