Здравствуйте, FR, Вы писали:
IT>>Анонимные методы тоже не более чем синтаксических сахар, т.е. следуя логике лямбда — это синтаксических сахар даже не по отношению к анонимным методам, а вообще ещё к C# 1.0. Т.е. опять же просто более удобная запись, на самом деле ничего военного.
FR>Опять забываешь про замыкания.
Ни в коем случае. И что значит опять? Замыкания в C# 2.0 — это тоже сахар. Достаточно глянуть рефлектором как они реализуются. Результирующий код не использует ничего из того, чего не было в CLR 1.0 и появилось в CLR 2.0. Это просто сахар.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
FR>>Опять забываешь про замыкания.
IT>Ни в коем случае. И что значит опять? Замыкания в C# 2.0 — это тоже сахар. Достаточно глянуть рефлектором как они реализуются. Результирующий код не использует ничего из того, чего не было в CLR 1.0 и появилось в CLR 2.0. Это просто сахар.
Совершенно согласен, я вот тоже смотрел дизассемлером как классы реализуются в C++, результирующий год не использует ничего из того, чего нельзя сделать в процедурном стиле, так что весь ООП это это просто сахар.
Здравствуйте, IT, Вы писали:
IT>Анонимные методы тоже не более чем синтаксических сахар, т.е. следуя логике лямбда — это синтаксических сахар даже не по отношению к анонимным методам, а вообще ещё к C# 1.0. Т.е. опять же просто более удобная запись, на самом деле ничего военного.
При некоторой общности — да. Но реально в лямбдах имнно подправлен синтаксис, а анонимные методы потребовали серьезной доработки компилятора.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FR, Вы писали:
FR>Совершенно согласен, я вот тоже смотрел дизассемлером как классы реализуются в C++, результирующий год не использует ничего из того, чего нельзя сделать в процедурном стиле, так что весь ООП это это просто сахар.
Самое смешное, что на некотором уровне общьности — да.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FR, Вы писали:
FR>>Опять забываешь про замыкания.
VD>По большому счету они эмулируются классами и методами. Так в общем-то в C# и сделано.
А класссы тоже легко эмулируются через замыкания. В Clisp'е в общем так и сделано
Здравствуйте, FR, Вы писали:
FR>Совершенно согласен, я вот тоже смотрел дизассемлером как классы реализуются в C++, результирующий год не использует ничего из того, чего нельзя сделать в процедурном стиле, так что весь ООП это это просто сахар.
Верно. Я всегда говорил, что ООП — это просто набор удобных паттернов.
Если нам не помогут, то мы тоже никого не пощадим.
IT wrote: > FR>Совершенно согласен, я вот тоже смотрел дизассемлером как классы > реализуются в C++, результирующий год не использует ничего из того, чего > нельзя сделать в процедурном стиле, так что весь ООП это это просто сахар. > Верно. Я всегда говорил, что ООП — это просто набор удобных паттернов.
Осторожно! В этой ветке Gaprton и VladD2, которые оба несогласны с таким
мнением.
Здравствуйте, Cyberax, Вы писали:
>> Верно. Я всегда говорил, что ООП — это просто набор удобных паттернов. C>Осторожно! В этой ветке Gaprton и VladD2, которые оба несогласны с таким мнением.
Если отвечать на твоё замечание в стиле Влада, то получается, что его несогласие не может повлиять на то, что ООП — это просто набор удобных паттернов
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
IT>... IT>Анонимные методы тоже не более чем синтаксических сахар, т.е. следуя логике лямбда — это синтаксических сахар даже не по отношению к анонимным методам, а вообще ещё к C# 1.0. Т.е. опять же просто более удобная запись, на самом деле ничего военного.
Ну вот она основная разница между функциональными языками и не. В функциональном лямбда это самая низкоуровненвая конструкция. И с помощью сахара и комбинаторов эти лямбды стараются запрятать подальше. Но в результате все в эту одну большую лямбду и разворачивается. А в нефункциональных языках лямбда — это сахар.
Здравствуйте, Трурль, Вы писали:
Т>Здравствуйте, Gaperton, Вы писали:
G>>
G>>funct( X, Y, Container ) ->
G>> Z = X + Y,
G>> map( fun( X ) -> X + Z end, Container ).
G>>
G>>Код понятен? Просьба записать то же самое через локальные функции — на поверку.
Т>
Т>function funct( X, Y:integer; Container:TContainer) :TContainer;
Т> var Z:integer;
Т> function local(X:integer):integer;
Т> begin
Т> local:= X + Z
Т> end;
Т>begin
Т> Z := X + Y;
Т> funct:= map(local, Container)
Т>end
Т>
Хм. Не защитываем. А вернуть такую "лямбду" в качестве результата функции у тебя тоже получится (опускаем вызов map)?
Здравствуйте, Gaperton, Вы писали:
G>Хм. Не защитываем. А вернуть такую "лямбду" в качестве результата функции у тебя тоже получится (опускаем вызов map)?
А про вернуть ничего не было.