Насколько важна конструкция unless в Ruby? Ни насколько. Но она позволяет сделать язык более простым и выразительным. Наглядно увидеть преимущества и простоту создания макросов можно в [1], или же их первое применение в третей главе.
Я говорю о макросах, а не о конкретных фичах. Ты попросил привести пример того, что eval и method_missing недостаточны, я его привёл пример ограниченности макропрограммирование в Ruby. CAPI это не макропрограммирование.Твои слова:
1. "Попробуйте сделать так в Scheme, там такое с лямбдой сделать нельзя: x=1; y=2; lambda{x+y}.call -> 3, x==1, y==2"
(let ((x 1) (y 2))
((lambda () (+ x y)))
(and (eq? x 1) (eq? y 2)))
; > #t
2. "Куда делись объявление и передача параметров? И куда делся вообще итератор? А теперь сделайте так, с приваиванием: x=1; y=2; lambda{x=x+y}.call -> 3, x==3, y==2"
Не понял при чём здесь итератор. Наверное, ты, случайно, опечатался и имел в виду аргумент.
(let ((x 1) (y 2))
((lambda () (set! x (+ x y))))
(and (eq? x 3) (eq? y 2)))
; > #t
Теперь же снова к коду на Ruby 1.8.7:
p n=3
lambda { |n| 0 }[1]
p n
# => 3\n1
lambda { |y| 0 }[1]
p y
# => undefined local variable or method `y' for main:Object (NameError)
Объясни такое поведение для Ruby 1.8.7. Почему в 1.9 оно другое? Какую парадигму использует Ruby 1.8.7? Какую парадигму использует Ruby 1.9?
Значения по умолчанию не имеют отношения ни к императивному, ни к функциональному программированию. Не пудри мне мозги словами: "API", "смесь", "ширпотрёб". Если тебе не нужны похожие возможности, то почему ты не используешь Brainfuck, который так же является Тьюринг-полным языком?
Вернёмся к началу дискуссии о множественном наследовании. Мои слова были буквально следующими: "Множественное наследование в Ruby не реализовано в чистом виде". После чего я показал, что использование примесей порождает сущности, которые не требуются при классическом множественном наследовании. Пусть, во множественном наследовании есть свои проблемы, однако Matz полностью от него отказался, хотя мог бы сочетать два подхода: иметь множественное наследование и примеси.
Сейчас же ты приведи пример, который потребует меньшего количества сущностей для реализации множественного наследования в Ruby, нежели при использовании классического множественного наследования.
Область применения языка это следствие его ограниченности. На каких важных свойствах языка Matz был сконцентрирован? Что Ruby привнёс нового в программирование?
--
[1] Peter Seibel. Practical Common Lisp. Apress. 2005
[2] The Lisp defined in McCarthy's 1960 paper. http://lib.store.yahoo.net/lib/paulgraham/jmc.lisp. Проверено 17.08.2008
[3] John McCarthy. Lisp 1.5 Programmer's Manual. M.I.T. Press. 1985.