4. Что такое эф эф ай?
FFI — foreign function interface — это
интерфейс вызова функционала написанного
на языке отличном от используемого
Python Caml
application lib
5. Ruby FFI
● Автор — Wayne Meissner (+ 42 участника)
● http://kenai.com/projects/ruby-ffi
● sudo gem install ffi
Matz's Ruby
App
С
Rubinius
.so
jRuby
10. Проблемы с C-struct
Проблемы
● Различие между 32-bit и 64-bit платформами
● Утечки памяти
Решения
● Явное указание размера указателя (4 / 8 бит)
● «Деструкторы»
14. Как проводились тесты
● Сравнение быстродействия C и Ruby
●Сравнение вызова одной «медленной»
функции
●Тест производительности вызова функции из
динамической библиотеки
16. C vs Ruby
45
40,12
40
35
30
25
20
15
10
5
0
C Ruby
17.
18. Вызов одной функции C
●Из C и Ruby (FFI / DL) приложения
вызывается «медленная» функция.
●Наглядно показывает нам потери скорости
при вызове одной функции C
application
С
.so
19. 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
20. Большое количество вызовов
● 10 000 000 вызовов C функции
●Наглядно показывает задержку во время
обращения к функции
application
10 000 000 С
.so
21. 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