SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
Модули на 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() {
Class test_ = define_class("Test")
.define_method("hello", &hello);
}
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 age) {
m_name = name; m_age = age;
}
void greeting() {
std::cout << "Hello! My name is " << m_name <<
". My age is " << m_age << std::endl;
}
};
Без проблем!
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
Вопросы?

Mais conteúdo relacionado

Mais procurados

CSSO — сжимаем CSS
CSSO — сжимаем CSSCSSO — сжимаем CSS
CSSO — сжимаем CSSFDConf
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 
Top10 доводов против языка Ruby
Top10 доводов против языка RubyTop10 доводов против языка Ruby
Top10 доводов против языка Rubyguest5f907e
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongoekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongoit-people
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in railssergeymoiseev
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). Badoo Development
 
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Unigine Corp.
 
С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)Unigine Corp.
 

Mais procurados (17)

PowerShell
PowerShellPowerShell
PowerShell
 
mri ruby GC
mri ruby GCmri ruby GC
mri ruby GC
 
Foxdevs
FoxdevsFoxdevs
Foxdevs
 
CSSO — сжимаем CSS
CSSO — сжимаем CSSCSSO — сжимаем CSS
CSSO — сжимаем CSS
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Top10 доводов против языка Ruby
Top10 доводов против языка RubyTop10 доводов против языка Ruby
Top10 доводов против языка Ruby
 
Chef
ChefChef
Chef
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongoekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
ekbpy'2012 - Алексей Кирпичников - Я не люблю Mongo
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
 
Performance optimisation in javascript
Performance optimisation in javascriptPerformance optimisation in javascript
Performance optimisation in javascript
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 

Destaque

School Spirit at the University of Denver
School Spirit at the University of DenverSchool Spirit at the University of Denver
School Spirit at the University of DenverConnor Davis
 
Pop up gallery # 7 /Presentación
Pop up gallery # 7 /PresentaciónPop up gallery # 7 /Presentación
Pop up gallery # 7 /PresentaciónMarcela Bellini
 
бэм методология
бэм методология бэм методология
бэм методология racoons
 
Развитие
РазвитиеРазвитие
Развитиеracoons
 
Leadership Awareness - The Role of the Leader
Leadership Awareness - The Role of the LeaderLeadership Awareness - The Role of the Leader
Leadership Awareness - The Role of the LeaderKristy McDonald
 
Ведение переговоров
Ведение переговоровВедение переговоров
Ведение переговоровracoons
 
Itd 546 assgnmt 3 sisson - behaviorism for slideshare
Itd 546 assgnmt 3   sisson - behaviorism for slideshareItd 546 assgnmt 3   sisson - behaviorism for slideshare
Itd 546 assgnmt 3 sisson - behaviorism for slideshareAJSisson
 
Leadership Awareness - The Role of the Leader
Leadership Awareness - The Role of the LeaderLeadership Awareness - The Role of the Leader
Leadership Awareness - The Role of the LeaderKristy McDonald
 
UNICORN vs PUMA
UNICORN vs PUMAUNICORN vs PUMA
UNICORN vs PUMAracoons
 
Документо-ориентированные базы даннах
Документо-ориентированные базы даннахДокументо-ориентированные базы даннах
Документо-ориентированные базы даннахracoons
 
Cчастье и цели
Cчастье и целиCчастье и цели
Cчастье и целиracoons
 
Serie Nadie en Italia 2016
Serie Nadie en Italia 2016Serie Nadie en Italia 2016
Serie Nadie en Italia 2016Marcela Bellini
 

Destaque (14)

School Spirit at the University of Denver
School Spirit at the University of DenverSchool Spirit at the University of Denver
School Spirit at the University of Denver
 
Hdr3
Hdr3Hdr3
Hdr3
 
Pop up gallery # 7 /Presentación
Pop up gallery # 7 /PresentaciónPop up gallery # 7 /Presentación
Pop up gallery # 7 /Presentación
 
бэм методология
бэм методология бэм методология
бэм методология
 
Развитие
РазвитиеРазвитие
Развитие
 
Leadership Awareness - The Role of the Leader
Leadership Awareness - The Role of the LeaderLeadership Awareness - The Role of the Leader
Leadership Awareness - The Role of the Leader
 
Relatório palmeira real
Relatório palmeira realRelatório palmeira real
Relatório palmeira real
 
Ведение переговоров
Ведение переговоровВедение переговоров
Ведение переговоров
 
Itd 546 assgnmt 3 sisson - behaviorism for slideshare
Itd 546 assgnmt 3   sisson - behaviorism for slideshareItd 546 assgnmt 3   sisson - behaviorism for slideshare
Itd 546 assgnmt 3 sisson - behaviorism for slideshare
 
Leadership Awareness - The Role of the Leader
Leadership Awareness - The Role of the LeaderLeadership Awareness - The Role of the Leader
Leadership Awareness - The Role of the Leader
 
UNICORN vs PUMA
UNICORN vs PUMAUNICORN vs PUMA
UNICORN vs PUMA
 
Документо-ориентированные базы даннах
Документо-ориентированные базы даннахДокументо-ориентированные базы даннах
Документо-ориентированные базы даннах
 
Cчастье и цели
Cчастье и целиCчастье и цели
Cчастье и цели
 
Serie Nadie en Italia 2016
Serie Nadie en Italia 2016Serie Nadie en Italia 2016
Serie Nadie en Italia 2016
 

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

Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with JavaAndrei Pangin
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибкиAndrey Karpov
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
 
Scala: что, как и зачем?
Scala: что, как и зачем?Scala: что, как и зачем?
Scala: что, как и зачем?Roman Timushev
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioAndrey Karpov
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo
 
JPoint 2016 - Bytecode
JPoint 2016 - BytecodeJPoint 2016 - Bytecode
JPoint 2016 - BytecodeAnton Arhipov
 
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Open-IT
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Alexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the Beast
Alexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the BeastAlexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the Beast
Alexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the BeastAlexander Dymo
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Sergey Platonov
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101Anton Arhipov
 
Java 8 Support at the JVM Level
Java 8 Support at the JVM LevelJava 8 Support at the JVM Level
Java 8 Support at the JVM LevelNikita Lipsky
 

Semelhante a Модули на C для Ruby (20)

Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Developing highload servers with Java
Developing highload servers with JavaDeveloping highload servers with Java
Developing highload servers with Java
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Цена ошибки
Цена ошибкиЦена ошибки
Цена ошибки
 
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptСергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и Javascript
 
Scala: что, как и зачем?
Scala: что, как и зачем?Scala: что, как и зачем?
Scala: что, как и зачем?
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
 
JPoint 2016 - Bytecode
JPoint 2016 - BytecodeJPoint 2016 - Bytecode
JPoint 2016 - Bytecode
 
Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”Командная разработка “толстых клиентов”
Командная разработка “толстых клиентов”
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Alexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the Beast
Alexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the BeastAlexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the Beast
Alexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the Beast
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++Александр Фокин, Рефлексия в C++
Александр Фокин, Рефлексия в C++
 
бегун
бегунбегун
бегун
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101Joker 2016 - Bytecode 101
Joker 2016 - Bytecode 101
 
Java 8 Support at the JVM Level
Java 8 Support at the JVM LevelJava 8 Support at the JVM Level
Java 8 Support at the JVM Level
 
About Python
About PythonAbout Python
About Python
 

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