自分で作ったC言語の関数をRubyで使えたら便利だが、拡張ライブラリを作るのは少々敷居が高い。しかし、SWIGというアプリケーションを使うと、C言語のヘッダーから自動的に拡張ライブラリを作ることができる。
Ubuntu で SWIG を利用するための準備としては、SWIGのインストールと、拡張ライブラリを作るためのRubyのヘッダファイルのインストールが必要だ。どちらも、Synaptic で行うことができる。swig パッケージと libruby-dev パッケージをインストールしておく。 次に使いたい関数をCで記述した example.c を作り、gcc -c example.c でオブジェクトファイル example.o を作る。 /* File : example.c */ /* Compute factorial of n */ int fact(int n) { if (n <= 1) return 1; else return n * fact(n-1); } /* Compute n mod m */ int my_mod(int n, int m) { return(n % m); } 次に、example.c のヘッダーファイルにSWIGのディレクティブを付け加えた example.i を作る。 /* File : example 1 */ %module example %{ /* Put headers and other declarations here */ %} extern int fact(int); extern int my_mod(int n, int m); このファイルを使って、swig -ruby example.i でラッパープログラムのファイル example_wrap.c を作る。さらに、gcc -c example_wrap.c -I/usr/lib/ruby/1.8/i486-linux でコンパイルしてオブジェクトファイル example_wrap.o をつくる。 最後に、gcc -shared -o example.so example.o example_wrap.o で shared library の example.so を作る。 この、example.so を require すると、Example モジュールの関数、fact() と my_mod() が使えるようになる。 $ irb irb(main):001:0> require 'example.so' => true irb(main):002:0> include Example => Object irb(main):003:0> fact 5 => 120 irb(main):004:0> my_mod 5,3 => 2 これで、ユーザインターフェースはRubyで記述し、速度の必要な処理はC言語でプログラムするという使い勝手の良いプログラミングが誰にでもできるようになる。 C#にしても、SWIGにしても、だんだん共通に使う部品は単に組み合わせるだけで作れるようにして、本当に必要な部分だけをプログラミングできるという開発効率の高い手段が得られるようになってきている。 この傾向を見て分かるのは、プログラムを作るときに、ユーザーインターフェースのように、共通な部分がひどく多く、ユニークな部分は実は少ししかない場合が多いということだ。この、共通な部分の部品化がだんだん進んできたために、少ない労力でプログラムを作ることができるようになってきている。 これからは、プログラム言語のどれが優れているという議論ではなく、部品化されたモジュールを活用して、本当に必要な部分にだけ力を集中するにはどうしたら良いかという議論がなされていくのではないだろうか。 C#の良いところは、このような部品の利用と、低レベルのプログラミングがシームレスに行われるということだろう。これからC#が普及していくのかどうかは予測できないが、魅力のあるプログラミング言語だと思う。
by tnomura9
| 2009-12-30 03:32
| Ruby
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||