SlideShare a Scribd company logo
1 of 24
Download to read offline
FFI:
  Библиотека FFI:
Использование расширений
        C в Ruby


   Александр Косс
       6 июня 2009
C + Ruby == '   '?
Зачем?
Скорость выполнения
●Интерпретируемые языки медленнее
компилируемых


Функциональность
● Большие возможности
● Готовый функционал на языке C
Что такое эф эф ай?
FFI — foreign function interface — это
интерфейс вызова функционала написанного
на языке отличном от используемого



          Python          Caml
          application      lib
Ruby FFI
● Автор — Wayne Meissner (+ 42 участника)
● http://kenai.com/projects/ruby-ffi

● sudo gem install ffi




     Matz's Ruby

                     App
                                    С
       Rubinius
                                   .so
        jRuby
Пример работы с Ruby FFI
Описание C функций
Типы данных
Описание C-struct
Проблемы с C-struct

Проблемы
● Различие между 32-bit и 64-bit платформами
● Утечки памяти




Решения
● Явное указание размера указателя (4 / 8 бит)
● «Деструкторы»
Ruby/DL
Почему FFI?

●   Более красивый синтаксис

●   Более быстрое обращение к библиотеке

●Несравнимо быстрый вызов функций из
динамической библиотеки
Сравнение быстродействия
Как проводились тесты

●   Сравнение быстродействия C и Ruby

●Сравнение вызова одной «медленной»
функции

●Тест производительности вызова функции из
динамической библиотеки
10 000 000 x


a×b     b
    a−
 a      a
C vs Ruby
45
                     40,12
40
35
30
25
20
15
10
 5
 0
     C               Ruby
Вызов одной функции C
●Из C и Ruby (FFI / DL) приложения
вызывается «медленная» функция.

●Наглядно показывает нам потери скорости
при вызове одной функции C



           application
                              С
                              .so
C vs Ruby FFI vs Ruby/DL
0,38
                             0,38

0,38


0,37


0,37

         0,36      0,36
0,36


0,36


0,35
          C      Ruby FFI   Ruby/DL
Большое количество вызовов

●   10 000 000 вызовов C функции

●Наглядно показывает задержку во время
обращения к функции



             application
                           10 000 000   С
                                        .so
C vs Ruby FFI vs Ruby/DL
70                         65,97

60

50

40

30

20              16,38

10
       4,83
 0
        C      Ruby FFI   Ruby/DL
Ruby/DL
действительно
 медлителен!
C + Ruby = ?
C + Ruby = '   '!

More Related Content

Viewers also liked

Команда для стартапа: как искать специалистов
Команда для стартапа: как искать специалистовКоманда для стартапа: как искать специалистов
Команда для стартапа: как искать специалистовKaterina Gavrilova
 
Persuasive design presentationd3=r1
Persuasive design presentationd3=r1Persuasive design presentationd3=r1
Persuasive design presentationd3=r1Sebastian Daum
 
Step-by-Step Guide to Creating your Marketing Plan
Step-by-Step Guide to Creating your Marketing PlanStep-by-Step Guide to Creating your Marketing Plan
Step-by-Step Guide to Creating your Marketing PlanBusinessPlanTemplate
 
World Class Self-eduction
World Class Self-eductionWorld Class Self-eduction
World Class Self-eductionAlexei Kapterev
 
Startup Business Plan: Keys to a Successful Launch
Startup Business Plan: Keys to a Successful Launch Startup Business Plan: Keys to a Successful Launch
Startup Business Plan: Keys to a Successful Launch BusinessPlanTemplate
 
Planning the Migration to the Cloud - AWS India Summit 2012
Planning the Migration to the Cloud - AWS India Summit 2012Planning the Migration to the Cloud - AWS India Summit 2012
Planning the Migration to the Cloud - AWS India Summit 2012Amazon Web Services
 
(Legado 2016) Capacitação em planejamento estratégico Dia 3
(Legado 2016) Capacitação em planejamento estratégico Dia 3(Legado 2016) Capacitação em planejamento estratégico Dia 3
(Legado 2016) Capacitação em planejamento estratégico Dia 3Ink_conteudos
 
Ansible使ってみて
Ansible使ってみてAnsible使ってみて
Ansible使ってみて亮吾 守屋
 

Viewers also liked (10)

Команда для стартапа: как искать специалистов
Команда для стартапа: как искать специалистовКоманда для стартапа: как искать специалистов
Команда для стартапа: как искать специалистов
 
Persuasive design presentationd3=r1
Persuasive design presentationd3=r1Persuasive design presentationd3=r1
Persuasive design presentationd3=r1
 
Core os dna_automacon
Core os dna_automaconCore os dna_automacon
Core os dna_automacon
 
Step-by-Step Guide to Creating your Marketing Plan
Step-by-Step Guide to Creating your Marketing PlanStep-by-Step Guide to Creating your Marketing Plan
Step-by-Step Guide to Creating your Marketing Plan
 
World Class Self-eduction
World Class Self-eductionWorld Class Self-eduction
World Class Self-eduction
 
Startup Business Plan: Keys to a Successful Launch
Startup Business Plan: Keys to a Successful Launch Startup Business Plan: Keys to a Successful Launch
Startup Business Plan: Keys to a Successful Launch
 
Planning the Migration to the Cloud - AWS India Summit 2012
Planning the Migration to the Cloud - AWS India Summit 2012Planning the Migration to the Cloud - AWS India Summit 2012
Planning the Migration to the Cloud - AWS India Summit 2012
 
8 Retail Trends You Cannot Ignore
8 Retail Trends You Cannot Ignore8 Retail Trends You Cannot Ignore
8 Retail Trends You Cannot Ignore
 
(Legado 2016) Capacitação em planejamento estratégico Dia 3
(Legado 2016) Capacitação em planejamento estratégico Dia 3(Legado 2016) Capacitação em planejamento estratégico Dia 3
(Legado 2016) Capacitação em planejamento estratégico Dia 3
 
Ansible使ってみて
Ansible使ってみてAnsible使ってみて
Ansible使ってみて
 

FFI Library: use C extensions in Ruby