FFI:
  Библиотека FFI:
Использование расширений
        C в Ruby


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


Функциональность
● Большие возможности
● Гото...
Что такое эф эф ай?
FFI — foreign function interface — это
интерфейс вызова функционала написанного
на языке отличном от и...
Ruby FFI
● Автор — Wayne Meissner (+ 42 участника)
● http://kenai.com/projects/ruby-ffi

● sudo gem install ffi




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

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




Решения
● Явное указание ра...
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 vs Ruby FFI vs Ruby/DL
0,38
                             0,38

0,38


0,37


0,37

         0,36      0,36
0,36


0,36

...
Большое количество вызовов

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

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

...
C vs Ruby FFI vs Ruby/DL
70                         65,97

60

50

40

30

20              16,38

10
       4,83
 0
      ...
Ruby/DL
действительно
 медлителен!
C + Ruby = ?
C + Ruby = '   '!
FFI Library: use C extensions in Ruby
Upcoming SlideShare
Loading in...5
×

FFI Library: use C extensions in Ruby

2,204

Published on

Report at RuPyRu 2009 conference

Sorry guys, this presentation in Russian! :(

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

No Downloads
Views
Total Views
2,204
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

FFI Library: use C extensions in Ruby

  1. 1. FFI: Библиотека FFI: Использование расширений C в Ruby Александр Косс 6 июня 2009
  2. 2. C + Ruby == ' '?
  3. 3. Зачем? Скорость выполнения ●Интерпретируемые языки медленнее компилируемых Функциональность ● Большие возможности ● Готовый функционал на языке C
  4. 4. Что такое эф эф ай? FFI — foreign function interface — это интерфейс вызова функционала написанного на языке отличном от используемого Python Caml application lib
  5. 5. Ruby FFI ● Автор — Wayne Meissner (+ 42 участника) ● http://kenai.com/projects/ruby-ffi ● sudo gem install ffi Matz's Ruby App С Rubinius .so jRuby
  6. 6. Пример работы с Ruby FFI
  7. 7. Описание C функций
  8. 8. Типы данных
  9. 9. Описание C-struct
  10. 10. Проблемы с C-struct Проблемы ● Различие между 32-bit и 64-bit платформами ● Утечки памяти Решения ● Явное указание размера указателя (4 / 8 бит) ● «Деструкторы»
  11. 11. Ruby/DL
  12. 12. Почему FFI? ● Более красивый синтаксис ● Более быстрое обращение к библиотеке ●Несравнимо быстрый вызов функций из динамической библиотеки
  13. 13. Сравнение быстродействия
  14. 14. Как проводились тесты ● Сравнение быстродействия C и Ruby ●Сравнение вызова одной «медленной» функции ●Тест производительности вызова функции из динамической библиотеки
  15. 15. 10 000 000 x a×b b a− a a
  16. 16. C vs Ruby 45 40,12 40 35 30 25 20 15 10 5 0 C Ruby
  17. 17. Вызов одной функции C ●Из C и Ruby (FFI / DL) приложения вызывается «медленная» функция. ●Наглядно показывает нам потери скорости при вызове одной функции C application С .so
  18. 18. 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
  19. 19. Большое количество вызовов ● 10 000 000 вызовов C функции ●Наглядно показывает задержку во время обращения к функции application 10 000 000 С .so
  20. 20. 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
  21. 21. Ruby/DL действительно медлителен!
  22. 22. C + Ruby = ?
  23. 23. C + Ruby = ' '!
  1. A particular slide catching your eye?

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

×