Вопрос про параллельное присваивание


(Romaboy) #1

Просто из любопытства.
Читаю книгу The Ruby Way, там есть пример “Ханойская башня”, и стало интересно сравнить решение на любимом lua и ruby, код получился идентичный, а разница выполнения около 50 раз.
Главный подозреваемый вор времени в руби:

a, b, c = d, e, f

Неужели, правда, что для этого руби создает временный массив? Или даже 2?


#2

Да, параллельное присваивание это медленная операция.
Точно также медленным является puts “text” (по сравнению с print “text\n”).


(Kvokka) #3

дык вы поглядите как это работает. когда присмотритесь, то заметите, где прячется массив и сплат.
и вот они-то скорость и жрут
при том, что скорость руби ныне только ленивый не хает


#4

Вот репозиторий на эту тему с примерами и замерами: https://github.com/JuanitoFatas/fast-ruby
Хотя там относительно низкая активность, но в обсуждении люди предлагают уточнения и дополнения.
Быстрое ПО рождается в профилировщике.


(Павел) #5

jruby.org - добро пожаловать