0
Модули на C
для Ruby

Протасевич Владимир
Racoons Group
Зачем?
Скорость
• Порты библиотек(yaml)
•
hello_world.c
#include ruby.h
!

void init_hello_world() {
printf("Hello World!");
}
build_ext.rb
require «mkmf»
!

create_makefile("hello_world")
Done!
2.0.0-p353 :001 > require_relative ‘hello_world'
=> "Hello World!"
C++(Rice)
require "mkmf" → require "mkmf-rice"
rb_define_method → define_method
rb_define_class → define_class
hello_world.cpp
#include "rice/Class.hpp"
void hello() {
std::cout << "Hello World!";
}
extern "C"
void Init_hello_world()...
from_ruby() и to_ruby()
•
•

Для многих встроенных типов уже есть
Если нет:

!

template<>
Foo from_ruby<Foo>(Object x) {}
А если надо портировать
класс?
class Racoon {
private:
std::string m_name;
int m_age;
public:
Racoon(std::string name, int...
Без проблем!
extern "C"
void Init_test() {
Class rb_cRacoon = define_class<Racoon>("Racoon")
.define_constructor(Constructor...
Вопросы?
Upcoming SlideShare
Loading in...5
×

Модули на C для Ruby

81

Published on

Протасевич Владимир в данной презентации познакомит вас поближе с возможностями и способами применения модулей на С для Ruby

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
81
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Модули на C для Ruby"

  1. 1. Модули на C для Ruby Протасевич Владимир Racoons Group
  2. 2. Зачем? Скорость • Порты библиотек(yaml) •
  3. 3. hello_world.c #include ruby.h ! void init_hello_world() { printf("Hello World!"); }
  4. 4. build_ext.rb require «mkmf» ! create_makefile("hello_world")
  5. 5. Done! 2.0.0-p353 :001 > require_relative ‘hello_world' => "Hello World!"
  6. 6. C++(Rice) require "mkmf" → require "mkmf-rice" rb_define_method → define_method rb_define_class → define_class
  7. 7. hello_world.cpp #include "rice/Class.hpp" void hello() { std::cout << "Hello World!"; } extern "C" void Init_hello_world() { Class test_ = define_class("Test") .define_method("hello", &hello); }
  8. 8. from_ruby() и to_ruby() • • Для многих встроенных типов уже есть Если нет: ! template<> Foo from_ruby<Foo>(Object x) {}
  9. 9. А если надо портировать класс? class Racoon { private: std::string m_name; int m_age; public: Racoon(std::string name, int age) { m_name = name; m_age = age; } void greeting() { std::cout << "Hello! My name is " << m_name << ". My age is " << m_age << std::endl; } };
  10. 10. Без проблем! extern "C" void Init_test() { Class rb_cRacoon = define_class<Racoon>("Racoon") .define_constructor(Constructor<Racoon, std::string, int>()) .define_method("greeting", &Racoon::greeting); } ! ! Ruby: 2.0.0-p353 :001 > Racoon.new('Vasya', 2).greeting Hello! My name is Vasya. My age is 2 => nil
  11. 11. Вопросы?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×