Ruby Extended Library Howto

Slides:



Advertisements
Similar presentations
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
Advertisements

オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
プログラミング第5回 1 while ループ 文字列の操作
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
なぜ今Pythonか? Pythonをお薦めする18の理由
他言語ライブラリの利用 立石 孝彰 本資料はなるべく偽りがないように努めていますが、内容の正確さ・実現性については十分な推敲ができておりません。2次利用の際には各自の責任で行ってください。
アルゴリズムとデータ構造 第2回 線形リスト(復習).
第3回参考文献発表 PHP言語 岩永逸平.
自社製ミドルウエアをDalvikと連携させることが可能になる
Java I 第2回 (4/18)
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
読んだもの P0254R0: Integrating std::string_view and std::string およびその関連スレッド 稲葉 一浩.
Chapter 11 Queues 行列.
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
2008/03/01 D-BOF k.inaba はじめての initial D 2008/03/01 D-BOF k.inaba
Step-by-Step Guide on How to Start ALICE Analysis
実行時のメモリ構造(1) Jasminの基礎とフレーム内動作
Ruby Extended Library Howto
吉田和弘 株式会社ミッタシステム Rubyのすすめ 吉田和弘 株式会社ミッタシステム
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
Ruby勉強会(第1回) 2006/06/29 竹内豪.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
日本人の英語文章の中で「ENJOY」はどういうふうに使われているのか
Androidソースコード公開後のJNI
社会人学習講座 「Javaプログラミング概論」
の まとめ 2007/04/02 (Mon) / d;id:hzkr
Linuxカーネルについて 2014/01.
Windows Summit /8/2017 © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be.
C#とC++とオブジェクト指向 上甲 健史.
ピカチュウによる オブジェクト指向入門 (新版)
コンパイラの解析 (2) GCJのデータ構造 - 1.
プログラミング言語入門 手続き型言語としてのJava
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
コンパイラの解析 (3) クラスとインスタンスの初期化.
プログラミング言語論 第9回 Hoare論理の練習問題 手続きの引数機構 変数の有効範囲
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
プログラミング言語入門.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
Windows Summit /24/2019 © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
Windows Summit 2010 © 2010 Microsoft Corporation.All rights reserved.Microsoft、Windows、Windows Vista およびその他の製品名は、米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です。
ー生命倫理の授業を通して生徒の意識に何が生じたかー
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
同期処理のモジュール化を 可能にする アスペクト指向言語
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
Javaによる Webアプリケーション入門 第4回
せつぞくし 接続詞 Conjunctions.
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
第6回放送授業.
18. Case Study : Imperative Objects
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
就職活動.
Presentation transcript:

Ruby Extended Library Howto arton also not so known as Akio Tajima

arton (Akio Rubyist Tajima ONline) ActiveScriptRuby (Windows Installer Package with Ruby ActiveScript Interface) http://arton.hp.infoseek.co.jp/ Rjb(Ruby Java Bridge) http://rjb.rubyforge.org diary http://arton.no-ip.info/diary

Agenda Ruby拡張ライブラリとは? 何が嬉しいの? 情報源 簡単な拡張ライブラリのデモ 特徴を生かすには? それなりの拡張ライブラリのデモ 代替案 まとめ Q&A

拡張ライブラリとはCまたはC++言語で記述されていて、Rubyに組み込むことのできるライブラリです。 オブジェクト指向スクリプト言語Ruby P.428

何が嬉しいの? 拡張ライブラリによる部品を上手に設計し、重い処理の本質的な部分をそれらの部品に任せることができれば、コンパイラ型言語によるプログラムと大差ない実行速度と、比較にならない開発効率を両立させることも可能です。 上掲書 P.428

高速化の例 1.upto(10) { |x| puts x } for i in 1..10; puts i; end for (i = 0; i < 10; i++) { rb_funcall(rb_stdout, rb_intern(“puts”), 1, INT2FIX(i)); }

情報源 README.EXT、README.EXT.ja (1995) オブジェクト指向スクリプト言語Ruby (1999) http://www.loveruby.net/w/RubyExtensionProgrammingGuide.html RHG

一次情報 ruby.h intern.h rubyio.h rubysig.h version.h st.h 主要クラスの公開API (多分) rubysig.h スレッド操作 version.h st.h ハッシュ

要求される技術 ポインタ 全部ポインタ ソースコードリーディング Rubyのソースを読む セキュアコーディング

配布 setup.rb Gem Binary http://www.loveruby.net/archive/setup/ gem & rake Binary MSI,apt,dmg

デモ extrails http://svn.arton.no-ip.info/raa/trunk/extrails Project generation extrails HelloWorld with Rakefile for creating Gem Skeleton generation ruby script/generate scaffold Hello say_hello say_bye with sample code for defining variable, calling method

拡張ライブラリの決まり void Init_ファイル名() モジュール、クラスの登録 定数、グローバル変数の作成

定数、グローバル変数 定数 グローバル変数 rb_define_const(モジュール, “名前”, VALUE); rb_define_global_const(“名前”, VALUE); グローバル変数 rb_define_variable(“名前”, VALUE*); (GC防御の基本: cf. rb_gc_register_address(VALUE*)) rb_define_virtual_variable(“名前”, getter, setter);

モジュール、クラス、メソッド モジュール = rb_define_module(“名前”); rb_define_module_function(モジュール, “名前”, メソッド, arity); 項数情報: 0  …… 無引数 -1 …… 可変引数 クラス = rb_define_class(“名前”, super); クラス = rb_define_class_under(モジュール, “名前”, super); rb_define_method(クラス, “名前”, メソッド, arity);

特徴を生かす × テキスト処理 × ネットワーク処理 × ファイル操作

特徴を生かす ○ アドレス操作 ○ 割り込み処理 ○ ネイティブAPI

from the article on the old magazin (bit) デモ inspired by prof. Nakanishi’s Apple Lisp from the article on the old magazin (bit) HeapShow http://svn.arton.no-ip.info/raa/trunk/HeapShow

memory block : “abcdefg……” RVALUE VALUE VALUE HEAPS_SLOT …… RVALUE (T_STRING) RVALUE memory block : “abcdefg……”

苦労したところ=考慮点 gc.cのstatic変数やstatic関数 externにするのは簡単 でも、それでOK? どうせ、依存性あるし…… なぜ拡張ライブラリにするのかを考える Do you need yet another Ruby ? or you only need some other (maybe temporary) feature ?

代替案 dl COM component Java class native API for any external libraries win32ole Windows only Java class Rjb etc JRuby

dl sample require 'dl/win32‘ GetShortPathName = Win32API.new('Kernel32.dll', 'GetShortPathNameA', 'SSI', 'I') olen = 200 begin buff = ' ' * olen len = GetShortPathName.call(realpath.to_s, buff, buff.size) if olen < len olen = len end end while olen == len buff.rstrip.chomp("\0") // note: it seems bit buggy, but it’s correct.

tips 拡張ライブラリをrequireするRubyスクリプトを同時配布する バージョン番号を埋め込む 前処理 後処理(自動実行の制御など) バージョン番号を埋め込む

まとめ C programing is fun !

Q&A