воскресенье, 16 декабря 2012 г.

RDot v0.9.6

  • Пофиксил очередные проблемы, которые всплывали при использовании Ruby 1.9.3, вроде бы осталось только невнятное предупреждение... Которое, скорее всего доживет до полной переработки программы, до которой, в свою очередь, фиг знает, когда руки дойдут.
  • Добавил ключик, позволяющий указать пути поиска для require.

Взять, как и прежде, можно с GitHub'а или BitBucket'а.

суббота, 15 декабря 2012 г.

Снова о странном поведении

Вкратце: super всегда получает блок, заданный при вызове метода потомка, даже если явно указаны аргументы без него. На примере:

class Alpha

  def initialize name, &block
    @name = name
    if block_given?
      self.instance_eval &block
    end
  end

end

class Beta < Alpha

  def initialize name, family, &block
    super(name)
    @family = family
    if block_given?
      self.instance_eval &block
    end
  end

end

b = Beta.new 'John', 'Bull' do
  p self
end

Выдаст примерно следующее:

#<Beta:0x00000001733560 @name="John">
#<Beta:0x00000001733560 @name="John", @family="Bull">

Т.е. сначала блок отрабатывает в super, а затем в непосредственном методе... И что-то мне это не нравится.

upd: Да, явное указание пустого блока помогает:

super(name) do
end

пятница, 7 декабря 2012 г.

Just for Fun: «ленивые» и параллельные вычисления для Ruby

Набросал простенькую библиотеку, которая делает следующее: блок кода сохраняется в переменной или же выполняется в отдельном потоке, но при этом почти любое обращение к переменной ждет результата выполнения и в дальнейшем ведет себя уже как вычисленное значение.

Спасибо Ruby 1.9 за класс BasicObject — перекрывать всю массу методов Object я бы поленился.

Брать с ГитХаба — https://github.com/shikhalev/lazy.

upd: Проект перенесен, см. пост от 2013-04-18.

вторник, 4 декабря 2012 г.

Блоки и управление потоком в Ruby 1.9

Захотелось сделать некоторое обобщение по теме управления потоком выполнения в Ruby. Вся необходимая информация есть в документации, но несколько размазана по описаниям различных конструкций. А я попробую кратенько и плотно изложить именно этот аспект.

Дело в том, что Ruby — очень гибкий язык, а где гибкость, там и неочевидные тонкости...

понедельник, 26 ноября 2012 г.

Ruby 1.9 — изменения внутренностей

Начал разбираться, что нужно исправить в ppRuby, чтобы заработало с Ruby 1.9. Думал — мелочи какие-нибудь... Оказывается, ничего подобного: во-первых, существенные изменения из-за многопоточности, что хотя бы понятно; а вот во-вторых — зачем-то перетасованы значения констант типов, и это крайне неприятно... И времени-то толком нет...

пятница, 31 августа 2012 г.

Ruby: класс Time — немного о грустном

Обнаружил не очень правильное поведение Ruby при преобразовании времени между поясным и универсальным — следующий код:

local = Time.now

puts "local\t= #{local}"

utc = local.utc

puts "utc\t= #{utc}"
puts "local\t= #{local}"

выводит:

local   = 2012-08-31 05:53:48 +0600
utc     = 2012-08-30 23:53:48 UTC
local   = 2012-08-30 23:53:48 UTC

Т.е. метод utc не только выдает соответствующее универсальное время, но и приводит к нему задействованный объект. Причем, восклицательного знака в имени метода нет... Проблема, естественно, обходится методом dup.

воскресенье, 26 августа 2012 г.

FPC-Notes: И с чем его едят...

Программное обеспечение используется нами не в вакууме, а в некотором окружении. Одни программы необходимы для работы других, третьи могут быть полезны для совместного использования, четвертые позволяют решать смежные задачи...

Давайте рассмотрим различный софт, с которым нам, возможно, придется взаимодействовать при программировании на Free Pascal.

Ruby'шное

Из нового в Ruby 1.9 самое вкусное, пожалуй — это именованные группы в регулярных выражениях. Остальное — сахар. Кроме, разве что локальных переменных в блоках — тут скорее исправление бага.

upd: Про многопоточность забыл...

Gentoo'шное

После долгого периода необновления малость посыпались оверлеи... В частности отказался отзываться xwing, из которого у меня стоял DeaDBeeF, а версия 2ГИСа (это сейчас так называется) в оверлее sumrise устарела до неудобоваримости...

Решить проблему удалось только сейчас, поскольку до вчерашнего дня временно не работал сервис gpo.zugaina.org (зело рекомендую). Что особенно приятно — оба недостающих пакета нашлись в одном оверлее — miramir (есть и в других, но не оба сразу).

пятница, 20 января 2012 г.

Моя реализация JSON для Ruby

Можете считать велосипедом...

Лежит, как всегда, на  GitHub и  BitBucket.