Re[40]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Klapaucius  
Дата: 24.02.14 11:05
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Интересно, тогда что это у нас, например здесь http://ru.wikipedia.org/wiki/Singleton#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80_.D0.BD.D0.B0_C.23?)


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

В приведенном вами примере по ссылке метапрограммирование используется, так о чем мы все-таки говорим?

_>Хы, ну если заменить слово монада на слово процедура, то классический ООП код тоже спокойно будет попадать под такое определение. )))


Нет, потому что про монады, моноиды, функторы, категории можно что-то сказать, как-то определить, у них и свойства есть, так что можно рассуждать о коде. А "процедура" это то же что и "сепулька". Сказать про нее с определенностью ничего нельзя, каких-то свойств у нее нет.

_>Угу, угу. аналога написать нельзя, но пользы от этого не имеющего аналогов нет. Я приблизительно так себе и представлял... )


В данном случае разговор о том, что аналог написать нельзя — только и всего.

_>Польза в виде борьбы с проблемами, вызванными неудачным дизайном язык — это конечно очень интересно. )))


Неудачность дизайна вовсе ниоткуда не следует. Вы ее вводите исключительно потому, что в плюсах дизайн совсем другой, ну и для оправдания монадофобии. Иммутабельность как прием вполне полезна и рекомендуется даже в языках, где вовсе никак не поддерживается (т.е. с дизайном "удачным" по вашему, иммутабельность не поощряющем). В хаскеле она поддерживается, в том числе имеются и обсуждаемые средства уменьшения издержек.

_>Ууу, там много всего. Хотя первоисточник проблемы общий. Ну если взять этот наш конкретный код... Как насчёт записать его в виде чего-то типа "M.write a 1 (M.read a 1)^2"? )


Вы все таки имеете в виду
M.write a 1 (M.read a 1 ^2)
-- или
M.write a 1 $ M.read a 1 ^2

ну, как сделать ^2 я уже писал в соседних ветках, а $ заменяется на =<< и получаем
M.write a 1 =<< M.read a 1 ^2


синтаксические затраты на лифтинг безусловно есть, я их не отрицаю, я утверждаю, что они компенсируются синтаксической легковесностью остального. Т.е. применений и определений функций, лямбд, сечениями, паттерн мэтчингом и т.д.
К примеру, можно определить функцию
over v i f = M.write v i =<< f (M.read v i)

и писать
over v 1 (^2)
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.