Mon, 25 Nov 2002 11:36:06 +0900 , 初稿 って? Ruby は、比較的簡単に C による拡張ライブラリが作れるらしいです。 拡張ライブラリというのは、要するに、Ruby から呼べる機械語のメソッド郡と考えていいんじゃないかと思います。つまり、Ruby だと処理速度がどうしても気になってしまう一部のクリティカルセクションを、これにより機械語で書き換える、ということができます。 というわけで、どれくらい簡単か、やってみましょう。 例 Ruby 本に従って、次の C プログラムを書きました。 #include "ruby.h" VALUE test(int n){ volatile int i; for(i=0;i<(FIX2INT(n));i++){ } return Qnil; } Init_test(){ rb_define_global_function(
Ruby用拡張ライブラリをCで作る Rubyは、C(あるいはC++)で書いたコードを動的(あるいは静的)にリンクして利用する事ができる。うまく使えば、Rubyで書くより高速な動作が期待できる。 たとえば、GUIライブラリである「Ruby/GTK」は、描画部分にCで書かれたライブラリを利用する事で、実用的な画面描画速度を確保している。 その、Ruby用拡張ライブラリをCで書く方法である。 ■ 拡張ライブラリ作成の流れ Rubyはオブジェクト指向言語である。オブジェクト指向言語におけるプログラムとは、基本的にクラス定義である(と、少なくとも私は思っている)。そこで、ここではクラス定義に話を絞る。 メソッドの実体となる関数を定義する Init関数を作る rb_define_classで、新しいクラスを作る rb_define_methodで、クラスに1で作成したメソッドを追加する Makefil
C言語で、rubyの拡張モジュールを作成する方法について調べてみました。 とりあえず例として Sample という拡張モジュールを作成し Sample::sample() というメソッドをCで実装 してみました。 このSampleモジュールを使うと、以下のrubyのコードは require "sample" puts Sample::sample("test") コンソールに "test" と表示するようになります 拡張モジュールのソースコード Cで次のようなコードを書きます。 #include <ruby.h> static VALUE rb_sample_sample(VALUE obj, VALUE arg) { Check_Type(arg, T_STRING); return rb_str_new2(RSTRING_PTR(arg)); } void Init_sample()
RubyのソースコードはC言語であってもきちんとRDoc形式のドキュメントが書いている。そこでは、「call-seq:」の後の行に深くインデントを取ってメソッドの使い方が書いてある。つまり、call-seqの後の行を拾っていけば、そのソースコードはどんなメソッドを定義しているかがわかる。たとえば、prec.cに対して実行してみるとこんな感じだ。「-n」、「-H」オプションをつけるとgccの出力のようになる。 $ list-call-seq.rb -nH prec.c prec.c:22: num.prec(klass) => a_klass prec.c:43: num.prec_i => Integer prec.c:60: num.prec_f => Float prec.c:77: Mod.induced_from(number) => a_mod prec.c:99: includ
Posted by nanki Mon, 12 Mar 2007 05:14:00 GMT Rubyコード中にCのコードを埋め込めるRubyInlineを使って、 ボトルネックとなっているメソッドを置き換える。 # rubyinline.rb def benchmark s = "a" * 10000 test = Test.new t = Time.now 1000.times{test.string_xor(s, s)} Time.now - t end class Test def string_xor(str1, str2) result = str1.clone str1.length.times do |i| result[i] ^= str2[i] end result end end b1 = benchmark begin require 'inline' class T
In math, a unary operation is an operation with a single input. In Ruby, a unary operator is an operator which only takes a single ‘argument’ in the form of a receiver. For example, the – on -5 or ! on !true. In contrast, a binary operator, such as in 2 + 3, deals with two arguments. Here, 2 and 3 (which become one receiver and one argument in a method call to +). Ruby only has a handful of unary
大阪にはキャバクラが多い街として「キタ」と「ミナミ」があるんです。 この2つの街にはいろんなキャバクラがあるし、競合店が多いことから他のエリアより時給相場が高い上、新規のお客さんも来店しやすい。 だから、関西のキャバクラで働く上で、キタ、もしくはミナミのキャバクラを選ぶことがすごくおすすめ! けど、そうは言っても「じゃあキタとミナミだったらどっちの方が良いの?」って思う方もいるかもしれませんよね(笑) なのでここでは、大阪のキタとミナミのキャバ嬢目線から見た違いについて解説していきます! 大阪のキャバクラ「キタ」と「ミナミ」の違い では大阪のキタとミナミには、キャバクラにどんな違いがあるのか、各項目に分けて紹介していきます! 大阪のキャバクラで頑張って働いていこうと思ってる方は、自分の目的やキャバ嬢としてのキャリアに合ったお店を選んでくださいね! お給料 まずはお給料について。お給料は、大
This domain may be for sale!
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く