Biblioteka FFI - łączymy Ruby z C
18 komentarzy | Kategorie: C, JRuby, Ruby, Techblog | trackbackTagi: c extension ffi inline rozszerzenie ruby ruby/dl
Przez ostatnie dni miałem okazję zapoznać się z biblioteką FFI. (Swoją drogą, kenai.com, czyli strona na której jest hostowany projekt, to próba stworzenia przez firmę Sun systemu, podobnego do sourceforge, githuba itp. Całość zupełnie za darmo, o pełnych możliwościach można poczytać na stronie projektu. Aplikacja jest oparta o framework Ruby on Rails i uruchamiana przy pomocy JRubiego.) Biblioteka FFI służy do łatwego łączenia kodu Rubiego z bibliotekami C.
Rozszerzenia w C - różne podejścia
Zanim opiszę zalety i sposób wykorzystania FFI, chciałbym napisać kilka zdań na temat samych rozszerzeń C dla Rubiego. Otóż istnieje kilka możliwości w tej kwestii. Jedną z podstawowych jest wykorzystanie wewnętrznego API interpretera Rubiego napisanego w C (popularnie zwanego MRI lub cRuby). Jeśli zaglądałeś kiedykolwiek w kod źródłowy MRI i widziałeś źródła np. pliku array.c, to kod takiego rozszerzenia pisze się praktycznie tak samo. Z tego też powodu jesteśmy zmuszeni do poznania, choćby w minimalnym stopniu, wewnętrznego API C Rubiego (zobacz http://www.eqqon.com/index.php/Ruby_C_Extension).
Aby ułatwić choć trochę tworzenie takich rozszerzeń powstał projekt RubyInline. Jego dwoma największymi zaletami jest możliwość osadzania kodu bezpośrednio w kodzie Rubiego, a także automatyczna kompilacja takiego kodu dopiero w momencie odpalenia (skompilowane rozszerzenie jest zapisywane w katalogu ~/.ruby_inline/ by nie kompilować go za każdym uruchomieniem). Pozostałe zasady zostają takie same (ciągle operujemy na tym samym API).
~ ext_ruby_inline01.rbrequire "rubygems"
require "inline"
class MyMath
inline do |builder|
builder.c "
long add(int a, int b) {
return a + b;
}"
end
end
math = MyMath.new
puts math.add(100, 300)
Wyjście:400
Programiści Rubiego zapewne śledzą losy tego języka na arenie międzynarodowej. Prawdopodobnie słyszeli o zainteresowaniu Rubym ze strony firmy Sun (tak, tak, to ta od Javy :-)), ostatnio także nawet Microsoft. Ci pierwsi zainwestowali w czołowych programistów projektu