ruby overlay and building
Jul 29 2008В Gentoo до недавнего времени насладиться прелестями ruby ветки 1.9 могли только разработчики самого дистрибутива (ну и постоянные читатели багзиллы). Но буквально на днях overlay был выпущен для всеобщего использования. Точнее, сегодня, потому что сразу после объявления в списке мне его найти не удалось, даже пришлось писать письмо ответсвенному человеку.
Теперь можно просто добавить оверлей, размаскировать пакет и обновиться:
layman -L && layman -a ruby
echo >=dev-lang/ruby-1.9.0 >> /etc/portage/package.unmask
Установку необходимо проводить с FEATURES=”-sandbox”, иначе рискуете не собрать, получив ошибку:
./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb -I. -rrbconfig ./tool/compile_prelude.rb ./prelude.rb ./enc/prelude.rb ./gem_prelude.rb prelude.c
:0:in `require': no such file to load -- rbconfig (LoadError)
make: *** [prelude.c] Ошибка 1
make: *** Ожидание завершения заданий...
rbconfig.rb updated
Впрочем, ошибку можно и не получить, тут от погоды зависит. В дождь вот и без этого костыля как-то собралось. Правда, на том же терминале, видимо, запомнило переменные.
Ruby будет установлен в новый слот, так что останется ещё и ветка 1.8.
Со сборкой стандартного ruby из portage у меня были проблемы, если указан USE флаг doc. При сборке скрипт создания документации съедал всю память. Видимо, старые, уже сгенерированные документы не высвобождали память. С новым рубином такого замечено не было, что приятно.
Ну и немножно приятного, чего мне и хотелось от нового ruby. Имеем файл test-unicode.rb следующего содержания:
# coding:utf-8
str = "Руби - отличный язык высокого уровня!"
puts str.length
puts str[3]
puts str.split('').inspect
Заметили костыль в виде # coding:utf-8? Он и будет заниматься тем, что все символы будут корректно обрабатываться. Немножко не так просто, как хотелось бы, но уже что-то :)
Выполнение ruby18 test-unicode.rb выдаст нам следующую лабуду:
67
131
["\320", "\240", "\321", "\203", "\320", "\261", "\320", "\270", " ", "-", " ", "\320", "\276", "\321", "\202", "\320", "\273", "\320", "\270", "\321", "\207", "\320", "\275", "\321", "\213", "\320", "\271", " ", "\321", "\217", "\320", "\267", "\321", "\213", "\320", "\272", " ", "\320", "\262", "\321", "\213", "\321", "\201", "\320", "\276", "\320", "\272", "\320", "\276", "\320", "\263", "\320", "\276", " ", "\321", "\203", "\321", "\200", "\320", "\276", "\320", "\262", "\320", "\275", "\321", "\217", "!"]
Запуск же свежесобранного ruby19 test-unicode.rb покажет следующее:
37
и
["Р", "у", "б", "и", " ", "-", " ", "о", "т", "л", "и", "ч", "н", "ы", "й", " ", "я", "з", "ы", "к", " ", "в", "ы", "с", "о", "к", "о", "г", "о", " ", "у", "р", "о", "в", "н", "я", "!"]
Что ж, куда лучше, не правда ли? :) Очень советую тем, кто ищет что изучить, попробовать ruby, будете приятно удивлены элегантностью и гибкостью ;)
p.s.: заметки по портированию с 1.8 на 1.9 (англ.)




Мммм… Спасибо, буду пробовать.
ага, вот оно как делается… У меня из-за кодировки все скрипты падали.
руби – отличный язык, скорости бы ему еще добавить. В 1.9 версии вроде должны, наравне с питоном идет