Форум
Философия программирования
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, Ikemefula, Вы писали: I>Здравствуйте, vdimas, Вы писали: I>>>Ты использовал для аргумента локальные функции == без пяти минут лямбды, это и есть функциональщина. I>>>Указатель на функцию - снова поддержка ФП. V>>Блин, да ты код из 5 строк прочесть уже не в состоянии? V>>Ты сейчас имел ввиду локальные ф-ии наподобии паскалевских вложенных? Покажешь в моих примерах аналогичное, не? ))) V>>Ес-но в Паскале вложенные ф-ии являются полноценными замыканиями сами по себе. Но из-за b[ ограничений в подробностях Паскаля хрен ты подашь AddressOf этой вложенной ф-ии куда-то вне вышестоящей ф-ии, в которой она объявлена - будет маленький бумц с большими последствиями. I>Вот-вот. А отсутствие локальных функций означает количество кода примерно в 10 раз больше того, что ты показал. V>>Это указатель на алгоритм. Да, алгоритмы можно привязать к данным. А ты думал, ООП с луны свалилось? Оно уже вовсю использовалось в модульном программировании, только ручками. I>То есть, указатель на функцию не есть данные, потому что не хватает привязки. Опаньки ! V>>Или тебя смущает именно указатель? :))) V>>Ноу проблема, пронумеруй алгоритмы и диспатч их на switch/case. Та же фигня, вид в профиль. То бишь, появление адреса ничего не меняет в дизайне, просто дает более эффективный способ переключения алгоритмов. I>Со свичем тебе понадобится кода почти в 100 раз больше :)) >>>>Сравни с ООП - это совсем другая вселенная. В этом смысле ФП фундаментально недалеко ускакало от процедурного подхода, что я и заметил упомянув [b]дизайн[/b]. I>>>В твоей трактовке это так потому что в процедурное ты записываешь фичи из ФП. V>>Это с каких пор ФП оперирует адресом ф-ии??? В ФП ф-ия представлена малость сложнее, чем просто адрес. Собсно, всю механику я тебе уже показал. I>ФП реализовано в С чз указатели на функции. V>>>>Гы, ты еще и контекст теряешь... Имеет значение там, где ты говорил о разнице в 10-100 раз для последнего своего примера на лямбдах, будь он переписан без них. Сорри, но такой прогноз можно дать только от непонимания механики работы ФП. I>>>Нет, не имеет. V>>Будь мужиком, скажи прямо - насчет своей оценки в 10 раз ты откровенно лажанул. I>Ни в коем случае. Ниже ты подтвердил именно то, о чем я говорил в самом начале I>1. тебе надо описывать структуру для захвата + делать поддержку этого в инфраструктуре I>2. описывать функцию для работы со структуриной - кода в любом случае больеш чем для лямбды I>3. выполнять сам захват I>4. эмулировать GC I>Теперь представь, изменились требования а с ними контекст... Тебе придется переписать вообще всё, кроме инфраструктуры. Мне - только лямбды. V>>Такое резкое сокращение кода вообще способны дать только макросы или обобщенное программирование, но не разница в парадигмах. Они им перпендикулярны. I>Макры и обобщенное программирование это тоже парадигмы. I>>>Тогда покажи аналог моего кода на языке СИ. V>>У тебя в коде используется обобщенное программирование, поэтому я тоже применил обобщенное программирование для аналога. Но я не использовал никакого ООП. Обобщенное программирование было применено к структурам и свободным процедурам/ф-ям. Если ваять на чистом С, то моя инфраструктура переползет на макросы. И то и то - кодогенерация, но обобщенное программирование типобезопасно, поэтому показалось мне более интересным для демонстрации. I>То есть, твои примеры можно выбрасывать в топку, поскольку язык не умеет захвата переменных и это придется реализовывать руками - именно это у тебя и отсутствует. А следовательно количетсво локального кода увеличивается в разы, и количество кода в инфраструктуре увеличивается так же в разы. I>>>Нет, это не локальная функция. В Си вообще нет локальных фунций, этот язык не умеет захватывать свободные переменные. В итоге тебе нужно V>>Мне и не надо ничего захватывать. Захватить я могу явно. I>Чушь. Покажи полноценный пример, который можно скомпилировать. Я сделаю тоже самое, результат сравним. Идёт ? I>>>1. описать структуру для захвата V>>Можно. А в 99% случаев хватит некоего обобщенного Tuple. I>ФП тебе не помогло, ты решил взять в помощь парадигму обобщенного программирования ? I>>>2. описать функцию которая будет работать с этой структурой V>>Дык и в ФП целевую ф-ию описывать надо. I>Тебе мягко говоря надо писать полноценную функцию, а мне только лямбда выражение. Вместе это значит, что количетсво кода у тебя минимум на порядок больше. I>>>3. выполнить захват, то есть создать экземпляр, инициализировать V>>В C/С++ это выполняется в человеческом синтаксисе: V>>[ccode] V>>struct { int a; int b; } context1 = { 42, 43 }; V>>TUPLE((int, float)) context2 = { 42, 43.44 }; V>>[/ccode] I>А у меня здесь будет одно лямбда выражение. I>>>4. освободить память (хрен знает когда) V>>Да. Но техника GC, оп-па, тоже нейтральна к парадигмам. I>То есть, тебе и здесь надо руками пихать ? I>>>Внезапно оказывается что qsort принимает указатель на обычные функции, а про твой захват ничего не знает, опаньки, для различных коллекций надо писать свою функцию сортировки. V>>Дык, в STL ф-ия qsort - это внешняя свободная ф-ия, а не метод объекта. И работает над любыми итераторами произвольного доступа и с любыми предикатами сравнения. I>STL это ни структурное, ни процедурное, это совершенно иная парадигма, точнее целых три - ООП + ФП + обобщенное.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …