tomohikoseven/blocking_region :
https://github.com/tomohikoseven/blocking_region
まだ完成していない。
すみません。
2012年5月22日火曜日
2012年5月19日土曜日
ruby rb_exc_fatal を試した
サンプルコードを置いておきます。
GitHub:
https://github.com/tomohikoseven/rb_exc_fatal
メインスレッドとサブスレッド2枚動作中、サブスレッドがfatalの例外を投げて、それをメインスレッドが捕捉します。
サブスレッドもrescueしてるけど、捕捉しない。
GitHub:
https://github.com/tomohikoseven/rb_exc_fatal
メインスレッドとサブスレッド2枚動作中、サブスレッドがfatalの例外を投げて、それをメインスレッドが捕捉します。
サブスレッドもrescueしてるけど、捕捉しない。
2012年4月29日日曜日
ruby 拡張ライブラリ rb_thread_create サンプル
rb_thread_create のサンプル書いてみた。
下記コマンド実行で動くはず。
$ ruby extconf.rb $ make $ ruby fib.rb
test1.c と fib.c が拡張ライブラリで、fib.rb が拡張ライブラリ利用者。
(fib.rb)$LOAD_PATH << "." require "test" include Test Test.thread(fib.c)
#include <stdio.h> int fib( int n ) { if( n < 0 ) return -1; if( n == 0 ) return 1; if( n == 1 ) return 1; if( n > 1 ) return fib( n-1 ) + fib( n-2 ); }(test1.c)
#include "ruby.h"
int fib();
int gloval = 0;
VALUE wrap_fib( VALUE self )
{
int n;
int count = 0;
for( count = 0; count < 30; count++ )
{
n = gloval;
printf( "fib(%d):%d\n", n, fib(n) );
gloval = (n + 1) % 30;
}
return Qnil;
}
VALUE wrap_thread( VALUE self )
{
rb_thread_create( wrap_fib, NULL);
return Qnil;
}
void Init_test()
{
VALUE module;
module = rb_define_module( "Test" );
rb_define_module_function( module, "thread", wrap_thread, 0 );
}
(extconf.rb)
require 'mkmf' create_makefile( "test" )
ruby rvm 拡張ライブラリ 公開ヘッダ ruby.h 場所
拡張ライブラリを作っていろいろ作業をしている。
直接公開ヘッダファイルを見たいけど、どこにあるのかと探した結果を下記に示す。
andre@andre-VirtualBox:/usr$ rvm -v
rvm 1.13.0 () by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
andre@andre-VirtualBox:/usr$ sudo find / -name ruby.h
[sudo] password for andre:
/usr/lib/ruby/1.8/i686-linux/ruby.h
/var/cache/ruby-rvm/rubies/ruby-1.9.3-p194/include/ruby-1.9.1/ruby/ruby.h
/var/cache/ruby-rvm/rubies/ruby-1.9.3-p194/include/ruby-1.9.1/ruby.h
/var/cache/ruby-rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/ruby/ruby.h
/var/cache/ruby-rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/ruby.h
/var/cache/ruby-rvm/src/ruby-1.9.3-p194/include/ruby/ruby.h
/var/cache/ruby-rvm/src/ruby-1.9.3-p194/include/ruby.h
/var/cache/ruby-rvm/src/ruby-1.9.3-p125/include/ruby/ruby.h
/var/cache/ruby-rvm/src/ruby-1.9.3-p125/include/ruby.h
ruby1.9 簡単な拡張ライブラリ 作成時 注意
簡単な拡張ライブラリを作成したとき、
カレントディレクトリに拡張ライブラリと
それを利用するテストrubyを作成すると思う。
ruby1.9になると、テストrubyは拡張ライブラリを取り込むことに失敗することがある。
それは、
カレントディレクトリがLOAD_PATHとして設定されていないからだ。
その一つの対処として、テストrubyに下記を追記する。
カレントディレクトリに拡張ライブラリと
それを利用するテストrubyを作成すると思う。
ruby1.9になると、テストrubyは拡張ライブラリを取り込むことに失敗することがある。
それは、
カレントディレクトリがLOAD_PATHとして設定されていないからだ。
その一つの対処として、テストrubyに下記を追記する。
(テストruby)
$LOAD_PATH << "."
require 'xx"
$LOAD_PATH << "."
require 'xx"
2012年4月15日日曜日
ruby rvm version 切り替えできない 解決法
rubyの勉強中。
ruby 1.9.xの環境がほしくて、インストールしようとしたら、ruby 1.8.7 の環境と共存できるツール rvm あると知って、インストールした。
インストール参考:
複数のRuby環境を共存させられるRVM(Ruby Version Manager)を使う - アインシュタインの電話番号☎ : http://d.hatena.ne.jp/ruedap/20110112/ruby_version_manager_rvm_install
rvm を使って versionの切り替えをしようとしたらできなかった。
原因は、bashrcに追記する設定でした。
上記サイト:
if [[ -s ~/.rvm/scripts/rvm ]] ; then source ~/.rvm/scripts/rvm ; fi
修正
if [[ -s /usr/local/rvm/scripts/rvm ]] ; then source /usr/local/rvm/scripts/rvm ; fi
これで、versionの切り替えができるようになった。
andre@andre-VirtualBox:/$ rvm 1.8.7 andre@andre-VirtualBox:/$ ruby -v ruby 1.8.7 (2012-02-08 patchlevel 358) [i686-linux]
andre@andre-VirtualBox:/$ rvm 1.9.3 andre@andre-VirtualBox:/$ ruby -v ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]
登録:
投稿 (Atom)