Как стать автором
Обновить

Ruby inline

Время на прочтение1 мин
Количество просмотров884
Сегодня понадобилось добавить в проект на Ruby небольшую «числодробилку». Быстро реализовал код, протестировал, но ужаснулся производительности. Вспомнил о модуле inline. Смысл которого заключается в компиляции C кода, и динамическому подключении его к Ruby программе. Происходит это прозрачно.
Для этого необходимо установить библиотеку:
Debian-way:
apt-get install libinline-ruby

RubyGem:
gem install rubyinline

Покажу на примере чисел Фибоначчи:

#!/usr/bin/ruby -w

require 'rubygems'
require 'inline'
require 'benchmark'

class Example
def fib(n)
curr = 0
succ = 1
n.times do |i|
curr, succ = succ, curr + succ
end
return curr
end

inline(:C) do |builder|
builder.c "
unsigned long fastfib(unsigned long n)
{
unsigned int n0 = 0;
unsigned int n1 = 1;
unsigned int naux;
unsigned int i;
if (n == 0)
return 0;
for (i=0; i < n-1; i++) {
naux = n1;
n1 = n0 + n1;
n0 = naux;
}
return n1;
}
"
end
end

t=Example.new;

puts Benchmark.measure {
40.times do |i|
t.fib i
end
}

puts Benchmark.measure {
40.times do |i|
t.fastfib i
end
}

Результат на лицо:

0.000000 0.000000 0.000000 ( 0.001326)
0.000000 0.000000 0.000000 ( 0.000075)


Конечно, используя inline-компиляцию самый первый запуск будет более длительным — в дальнейшем код кешируется

PS: перенесите в Ruby блог
Теги:
Хабы:
Всего голосов 14: ↑11 и ↓3+8
Комментарии1

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн