ffi library: use c extensions in ruby

Post on 16-Jan-2017

2.430 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

FFI:Библиотека FFI:

Использование расширенийC в Ruby

Александр Косс6 июня 2009

C + Ruby == ' ' ?

Зачем?

Скорость выполнения

● Интерпретируемые языки медленнее компилируемых

Функциональность

● Большие возможности● Готовый функционал на языке C

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

Pythonapplication

Camllib

Ruby FFI

● Автор — Wayne Meissner (+ 42 участника)● http://kenai.com/projects/ruby-ffi● sudo gem install ffi

AppС.so

Matz's Ruby

Rubinius

jRuby

Пример работы с Ruby FFI

Описание C функций

Типы данных

Описание C-struct

Проблемы с C-struct

Проблемы

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

Решения

● Явное указание размера указателя (4 / 8 бит)● «Деструкторы»

Ruby/DL

Почему FFI?

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

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

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

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

Как проводились тесты

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

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

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

10 000 000 x

a×ba

a−ba

C vs Ruby

C Ruby0

5

10

15

20

25

30

35

40

4540,12

Вызов одной функции C

applicationС.so

● Из C и Ruby (FFI / DL) приложения вызывается «медленная» функция.

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

C vs Ruby FFI vs Ruby/DL

C Ruby FFI Ruby/DL0,35

0,36

0,36

0,37

0,37

0,38

0,38

0,36 0,36

0,38

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

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

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

application10 000 000 С

.so

C vs Ruby FFI vs Ruby/DL

C Ruby FFI Ruby/DL0

10

20

30

40

50

60

70

4,83

16,38

65,97

Ruby/DL действительно

медлителен!

C + Ruby = ?

C + Ruby = ' ' !

top related