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

_>>А где здесь изменений контейнера? ) Я вижу только создание нового.

K>
K>d[size]=v;
K>


Контейнер владеет интервалом памяти от d, до d+size. Память вне этого интервала не имеет никакого отношения к данному контейнеру.
Re[111]: Есть ли вещи, которые вы прницпиально не понимаете...
От: alex_public  
Дата: 04.07.14 19:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Нет, это не классическая архитектура. Это веб давности 15-18 лет, когда ты напрямую читаешь из реквеста и пишешь в респонс. то есть, тупо самый нижний уровень


I>Классика нынче вот такая

I>
I>[verb(verbs.POST)]
I>void setLanguage(string language){
I>   UserSvc.updateUser(this.user, language) 

I>   return JsonResult(0);
I>}
I>


I>Ты видишь здесь реквест, респонс ? Что характерно, издержек около нуля, в пересчете на затраты на диспетчеризацию из нижнего уровня в такой вот вид.


И в чём разница? ) Ты просто разделил ту функцию на две, первую из которых не показал (подразумевая что она заложена во фреймворк видимо?). Кстати, а если у нас обрабатывается формочка с десятком полей, то и функция в твоём варианте будет со страшнейшим прототипом? )

I>Из твоего кода не видно, что вы используете шаблоны. Видно что вы изобретаете веб конца прошлого века.


Так а откуда шаблоны в коде ajax реакции? ) Они в выдаче самих страниц. )

I>Судя по коду, вся ваша инновация заключается в бинарном варианте json. Такой фокус есть в питоне, и в ноде и где угодно.


Не, бинарный json это потому что MongoDB, а не потому что D. )
Re[111]: Есть ли вещи, которые вы прницпиально не понимаете...
От: alex_public  
Дата: 04.07.14 20:18
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>В монадическом виде не нужны проверки на нулл. Отсюда надо

I>1. извлечь lang из req.form
I>2. извлечь юзера
I>3. послать все это функции для обновления состояния
I>4. сформировать результат

I>{lang:req.form.lang, user:userFromCookie} | updateUser | resultJson 0


В том коде updateUser вызывается при наличие и lang и user. А resultJson вызывается если есть хотя бы lang. Где эта логика указана в твоём коде?
Re[112]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.07.14 09:04
Оценка:
Здравствуйте, alex_public, Вы писали:

I>>{lang:req.form.lang, user:userFromCookie} | updateUser | resultJson 0


_>В том коде updateUser вызывается при наличие и lang и user. А resultJson вызывается если есть хотя бы lang. Где эта логика указана в твоём коде?


Это несущественные детали. Конвейер при внятной реализации умеет работать с нулевыми значениями и ошибками. Скажем на проверку нулевого значения добавляется комбинатор notNull

В твоём случае на самом деле конвейер не нужен. Если у тебя весь код такой, то конечно конвейеры не нужны. Они хорошо работают в обработке данных. Для твоего примера тебе нужен тот вариант, который я показал в соседнем сообщении.
Re[112]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.07.14 09:11
Оценка:
Здравствуйте, alex_public, Вы писали:

I>>Классика нынче вот такая

I>>
I>>[verb(verbs.POST)]
I>>void setLanguage(string language){
I>>   UserSvc.updateUser(this.user, language) 

I>>   return JsonResult(0);
I>>}
I>>


I>>Ты видишь здесь реквест, респонс ? Что характерно, издержек около нуля, в пересчете на затраты на диспетчеризацию из нижнего уровня в такой вот вид.


_>И в чём разница? ) Ты просто разделил ту функцию на две, первую из которых не показал


Ты для начала ответь на вопрос — где ты видишь реквест и респонс.

>(подразумевая что она заложена во фреймворк видимо?).


Разумеется, фремворк. И если мне, скажем, придется перейти ну скажем на Named Pipe, то у меня будет просто, код практически без изменений. А тебе придется думать, как избавиться от httpRequest и httpResponse. Надо объяснять, что их не будет в случае с пайпами ?

>Кстати, а если у нас обрабатывается формочка с десятком полей, то и функция в твоём варианте будет со страшнейшим прототипом? )


Не будет никаких страшных прототипов, а будет ровно один параметр.

_>Так а откуда шаблоны в коде ajax реакции? ) Они в выдаче самих страниц. )


Я и говорю — это изобретение веба. От силы asp.net 1.0, там тоже есть шаблоны, кстати говоря.

_>Не, бинарный json это потому что MongoDB, а не потому что D. )


Значит просто изобретение веба.
Re[108]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Klapaucius  
Дата: 05.07.14 14:01
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ну да, потому что практики в общем то и нет. По вашему же признанию (что в мире хаскеле uml'ем практически не пользуются) кстати.


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

_>Мы же это уже пережёвывали в этой темке не раз. Надо повторять снова про невозможность написания кода для реальных приложений без уродливых монад? )


Но в языке нет таких ограничений. Можно хоть с функторами, хоть со стрелками, хоть с неуродливыми монадами.

_>Совершенно верно. Правда для начала надо доказать полезность подобного.


Вам что-ли?

_>Этот вопрос тут уже обсуждался, но почему-то ответ пытался дать совершенно другой участник. А от вас так ни одного аргумента и не поступило.


Так от вас на обсуждаемую тему тоже ни одного аргумента не поступило.

_>Ага, в страшных монадах. )))


Чем они страшнее передачи лямбд через параметры шаблонов в текстовом виде, например?

_>А можно и вообще обозвать (аналог магии каста в C++) любую внешнюя функцию чистой (даже если она при этом диски форматирует) и вообще никаких проблем. )))


С помощью аналога "магии каста" можно делать все что угодно в любом языке.

_>Это всё понятно. Но я не понял куда собственно делось обсуждение map'а? ) Или вам так неприятно узнавать, что в индустрии обычно подразумевают под этим понятием совсем не то, что вы? )


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

_>UFP относится к замыканиям, а не к лямбдам. Это конечно вещи связанные, но совсем не синонимы. Снова у вас какая-то путаница в терминологии.


Из того, что я пишу никак не следует, что это синонимы.

K>>Да тот же самый, что позиция "курсора" не превышает длины буфера.

_>А у меня был инвариант проверяющий, что грубо говоря не кончилась свободная память (пул в нашем случае)

Про это я и говорю.

_>Ого. Т.е. вы даже не знаете самых элементарных принципов подобного тестирования? Что надо всегда проводить серию тестов и брать минимальное значение для каждого испытуемого.


В отличие от вас, как раз знаю. Минимальное значение можно брать только тогда, когда точность измерения времени достаточно высокая, чтоб ей пренебречь и считать, что любое значение кроме минимального будет просто выбросом. Но с точностью на виндоус серьезные проблемы. time даст точность никак не лучше 0.02сек, так что минимальное значение можно было бы брать если бы мы запускали примеры, работающие десятки, а лучше сотни секунд, но у нас — единицы.
В счастливые времена одноядерных процессоров с не изменяющейся постоянно частотой можно было просто перф. каунтер использовать, но сейчас им такого можно намерять, что мало не покажется.
Самое главное, что эта побочная тема про точность за которую вы ужватились все равно никак не приведет к тому, что разница "в разы" окажется.

_>Даже не знаю теперь о чём вообще говорить ещё при таком раскладе...


Как обычно, о ваших фантазиях.

_>У меня рекурсивный вариант стабильно быстрее. В среднем процентов на 8.


Ну допустим. Взятой вами с потолка разницы "в разы" это все равно не даст.

_>Для чистоты сравнения. Мало ли что там ваш рантайм показывает. )))


И действительно, мало ли что он показывает? Наверное специально заниженные данные выдает, чтоб вас позлить. Замерил перф.каунтером — 2.39сек.

_>Они не совпадают ни с моими результатами (хотя бы в сравнение двух версий кода на D)


Допустим. А ваши результаты не совпадают с моими. И не в порядке они, я думаю, у того, кто постоянно скрывает информацию, необходимую для воспроизведения замеров. И это точно не я.

_>ни с результатами D. Mon'а (у него было вменяемое сравнение кода на D с кодом на Хаскеле), на которые я и ориентировался при своих оценках.


Вы про это http://rsdn.ru/forum/philosophy/5572587.1
Автор: D. Mon
Дата: 22.04.14
что ли? Ну так там сравниваются не те примеры, которые мы сейчас сравниваем.

_>В любом случае он находится явно на более высоком уровне абстракции, чем Хаскель, т.к. у него хотя бы уже есть этот решатель. )))


Решатель есть — вот это да! А у хаскеля тайпчекер и вычислитель есть.
'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
Re[110]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Klapaucius  
Дата: 05.07.14 14:07
Оценка:
Здравствуйте, alex_public, Вы писали:
_>>>А где здесь изменений контейнера? ) Я вижу только создание нового.
K>>
K>>d[size]=v;
K>>


_>Контейнер владеет интервалом памяти от d, до d+size. Память вне этого интервала не имеет никакого отношения к данному контейнеру.


И какая разница? Вы все равно измеряете скорость работы с мутабельным массивом, а не графом неизменяемых объектов.
'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
Re[113]: Есть ли вещи, которые вы прницпиально не понимаете...
От: alex_public  
Дата: 05.07.14 18:33
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>В твоём случае на самом деле конвейер не нужен. Если у тебя весь код такой, то конечно конвейеры не нужны. Они хорошо работают в обработке данных. Для твоего примера тебе нужен тот вариант, который я показал в соседнем сообщении.


Вот вот, я с самого начала и сказал, что не нужны.

Кстати, а в наших основных делах (которые на C++) конвейеры как раз частенько встречаются. Только они выглядят не совсем так банально. В начале настраивается сложный (и очень эффективный) конвейер, а потом через него в реальном времени гонятся гигабайты. )
Re[113]: Есть ли вещи, которые вы прницпиально не понимаете...
От: alex_public  
Дата: 05.07.14 18:40
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Ты для начала ответь на вопрос — где ты видишь реквест и респонс.


Какая разница упакованы параметры в дополнительную структуру или же передаются явно в функцию? )

Да, а по поводу возвращаемого значения вообще подход со спец. структурой (вместо возвращаемого из функции значения) намного удобнее, т.к. можно осуществлять многоразовое добавление в вывод (ну по типу yield).

I>Разумеется, фремворк. И если мне, скажем, придется перейти ну скажем на Named Pipe, то у меня будет просто, код практически без изменений. А тебе придется думать, как избавиться от httpRequest и httpResponse. Надо объяснять, что их не будет в случае с пайпами ?


Какие ещё Named Pipe, если у нас тут веб-фреймвор со встроенным в него (причём это не опционально, а единственный вариант, но зато такой, что уже никакие nginx'ы в качестве фронтенда не нужны) сервером? )

I>Не будет никаких страшных прототипов, а будет ровно один параметр.


Что за параметр? ) Твой пример показывает передачу значения поля формы в виде параметра функции. Так а что будет в случае нескольких полей?

I>Я и говорю — это изобретение веба. От силы asp.net 1.0, там тоже есть шаблоны, кстати говоря.


Шаблоны то и в php есть))) Но не компилируемые (и не на базе статически типизированного нативного языка) в бинарник...
Re[109]: Есть ли вещи, которые вы прницпиально не понимаете...
От: alex_public  
Дата: 05.07.14 20:25
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Практики как раз достаточно. Я про практику применения с языками, в которых есть расширения "классического" ООП. Т.е. почти всеми языками.


Ну так а в Хаскеле то у нас что? ) Там же нечего расширять. )

K>Но в языке нет таких ограничений. Можно хоть с функторами, хоть со стрелками, хоть с неуродливыми монадами.


О да, конечно))) И все примеры работы с мутабельными данными из этой темке это конечно же "подтверждают"... )

_>>Совершенно верно. Правда для начала надо доказать полезность подобного.

K>Вам что-ли?

Ну вот например здесь http://rsdn.ru/forum/philosophy/5420829
Автор: meadow_meal
Дата: 07.01.14
кто-то хотя бы попытался привести примеры. Хотя в итоге продемонстрировать ничего не удалось, но хотя бы была попытка. А вот вы, постоянно кидаясь фразой о "контроле эффектов", так ни разу и не привели ни единого примера.

K>Так от вас на обсуждаемую тему тоже ни одного аргумента не поступило.


Эммм, а какие аргументы от меня требуются? ) Я же ничего не утверждаю, а наоборот прошу показать мне правильные примеры. Вот если никто так и не приведёт ни одного реального, тогда я наверное уже начнут утверждать, что это всё сомнительная и не нужная на практике вещь... )

K>Чем они страшнее передачи лямбд через параметры шаблонов в текстовом виде, например?


1. А какая разница, если всё это компилируется статически и соответственно сообщение об ошибке будет как и для обычной функции?
2. Можно и не текстом (так просто короче на несколько символов). Но компилируется это в тот же самый код.)))

K>Обсуждение мапа продолжается. Вы утвеждали, что в "индустрии" недомап называют мапом потому, что нормальный мап никто не видел. Я же привел контрпример, когда даже узнав что такое лямбда продолжают называть лямбдой недолямбду. Т.е. это никак не связано с неизведанностью чего-то для мейнстрима, а связано с желанием убедить себя в том, что у вас есть то, чего у вас на самом деле нет и не будет.


Нет, в индустрии называют map'ом определённую конструкцию (которая с вашей точки зрения не настоящий map) потому, что она такова в наиболее популярных языках. Вот и всё.

K>В отличие от вас, как раз знаю. Минимальное значение можно брать только тогда, когда точность измерения времени достаточно высокая, чтоб ей пренебречь и считать, что любое значение кроме минимального будет просто выбросом. Но с точностью на виндоус серьезные проблемы. time даст точность никак не лучше 0.02сек, так что минимальное значение можно было бы брать если бы мы запускали примеры, работающие десятки, а лучше сотни секунд, но у нас — единицы.


Из вашего потока слов я так и не понял, как факт наличия погрешности измерения времени в несколько процентов (хотя на самом деле меньше, но это не принципиально) обосновывает необходимость усреднять результаты (и тем самым учитывать влияние каких-нибудь там сервисных процессов ОС, включившихся не вовремя).

K>Самое главное, что эта побочная тема про точность за которую вы ужватились все равно никак не приведет к тому, что разница "в разы" окажется.


Согласен. Но это является для меня существенным маркером на тему доверия вашим измерениям. )

K>Допустим. А ваши результаты не совпадают с моими. И не в порядке они, я думаю, у того, кто постоянно скрывает информацию, необходимую для воспроизведения замеров. И это точно не я.


О да, я так скрываю, что специально собрал и выложил exe для теста. )))

K>Вы про это http://rsdn.ru/forum/philosophy/5572587.1
Автор: D. Mon
Дата: 22.04.14
что ли? Ну так там сравниваются не те примеры, которые мы сейчас сравниваем.


Не те, но я абсолютно точно знаю во сколько раз обсуждаемая версия кода на D быстрее измеренной там версии с until.all. А так же вы сами выкладывали тут свои измерения о том, во сколько раз мутабельный код на хаскеле быстрее иммутабельного. Соответственно простейшая пропорция даёт нам преимущество у D кода где-то в 1,8 раза.

K>Решатель есть — вот это да! А у хаскеля тайпчекер и вычислитель есть.


Этого добра везде полно. )))
Re[111]: Есть ли вещи, которые вы прницпиально не понимаете...
От: alex_public  
Дата: 05.07.14 20:33
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>И какая разница? Вы все равно измеряете скорость работы с мутабельным массивом, а не графом неизменяемых объектов.


Набор не изменяемых объектов создаётся в данном примере в другом месте (на стеке), но вы его в упор не замечаете. А пул используется исключительно для хранения int'ов, а не иммутабельных объектов.
Re[114]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.07.14 20:34
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Кстати, а в наших основных делах (которые на C++) конвейеры как раз частенько встречаются. Только они выглядят не совсем так банально. В начале настраивается сложный (и очень эффективный) конвейер, а потом через него в реальном времени гонятся гигабайты. )


То есть всё таки нужны ? Не пойму чтото.
Re[114]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 05.07.14 20:40
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Ikemefula, Вы писали:


I>>Ты для начала ответь на вопрос — где ты видишь реквест и респонс.


_>Какая разница упакованы параметры в дополнительную структуру или же передаются явно в функцию? )


Нет никакой упаковки и ничего из этого явно не передается в функцию. Так понятно ?

_>Какие ещё Named Pipe, если у нас тут веб-фреймвор со встроенным в него (причём это не опционально, а единственный вариант, но зато такой, что уже никакие nginx'ы в качестве фронтенда не нужны) сервером? )


Вот я и говорю — изобретаете веб.

I>>Не будет никаких страшных прототипов, а будет ровно один параметр.


_>Что за параметр? ) Твой пример показывает передачу значения поля формы в виде параметра функции. Так а что будет в случае нескольких полей?


Обычный объект.

I>>Я и говорю — это изобретение веба. От силы asp.net 1.0, там тоже есть шаблоны, кстати говоря.


_>Шаблоны то и в php есть))) Но не компилируемые (и не на базе статически типизированного нативного языка) в бинарник...


Судя по коду, что ты показал, в тех шаблонах ничего интересного не будет.
Re[115]: Есть ли вещи, которые вы прницпиально не понимаете...
От: alex_public  
Дата: 06.07.14 00:48
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, alex_public, Вы писали:


_>>Кстати, а в наших основных делах (которые на C++) конвейеры как раз частенько встречаются. Только они выглядят не совсем так банально. В начале настраивается сложный (и очень эффективный) конвейер, а потом через него в реальном времени гонятся гигабайты. )


I>То есть всё таки нужны ? Не пойму чтото.


В том тестовом проекте на D ни разу не понадобилось. ) Хотя средства организации таких дел в D отличные.

А в наших обычных делах на C++ конвейеры частенько встречаются. Только выглядят несколько иначе — это не какая-то фигня с банальными контейнерами и алгоритмами, а что-то вроде: "renderer<<recorder<<recognizer<<filter<<source; source.play();". Причём это всё работает в нескольких параллельных потока и обрабатывает гигабайты в реальном времени. )
Re[115]: Есть ли вещи, которые вы прницпиально не понимаете...
От: alex_public  
Дата: 06.07.14 00:54
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Вот я и говорю — изобретаете веб.


У того же node.js всё буквально точно такое же, только заметно медленее.

I>Обычный объект.


В твоём примере не было никаких объектов, а передавался сразу string. Ну хорошо, пусть будет некий объект. И чем он тогда принципиально отличается от объекта HTTPRequest? )

I>Судя по коду, что ты показал, в тех шаблонах ничего интересного не будет.


Я вообще ничего не показывал на тему шаблонов. Ну а если уж говорить о них, то они опять же точно такие же (потому как просто скопированы оттуда) как в node.js (jade), только вместо JS там D.
Re[116]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 06.07.14 21:04
Оценка:
Здравствуйте, alex_public, Вы писали:

I>>Вот я и говорю — изобретаете веб.


_>У того же node.js всё буквально точно такое же, только заметно медленее.


Здесь целых три утверждения и все ложные.

I>>Обычный объект.


_>В твоём примере не было никаких объектов, а передавался сразу string. Ну хорошо, пусть будет некий объект. И чем он тогда принципиально отличается от объекта HTTPRequest? )


Про то и речь — string. Где ты в стринге хочешь найти HTTPRequest ?

_>Я вообще ничего не показывал на тему шаблонов. Ну а если уж говорить о них, то они опять же точно такие же (потому как просто скопированы оттуда) как в node.js (jade), только вместо JS там D.


Jade это аккурат asp.net 1.0, только синтаксического шума меньше — странная идея работать с декларативным представлением императивным способом.

Современные темплейты в JS это, в частности, Angular или Knockout.
Re[117]: Есть ли вещи, которые вы прницпиально не понимаете...
От: alex_public  
Дата: 06.07.14 21:56
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Про то и речь — string. Где ты в стринге хочешь найти HTTPRequest ?


Ну так я тебя и спрашиваю, что будет если у нас в форме не одно поле, а десять — функция, у которой в прототипе десять string'ов? )

I>Jade это аккурат asp.net 1.0, только синтаксического шума меньше — странная идея работать с декларативным представлением императивным способом.


Ну расскажи тогда какие сейчас существуют современные способы формирования страниц на сервере.

I>Современные темплейты в JS это, в частности, Angular или Knockout.


Что-то у тебя какая-то каша в голове. Angular и т.п. — это браузерные фреймворки, работающие на клиентских машинах. А мы здесь обсуждаем серверный код. Кстати, в том проекте на D у нас естественно тоже используются некие js фреймворки (только заметно более легковесные, чем Angular) для работы на клиентской машине. Только непонятно какое это всё имеет отношение к серверному коду на D. )
Re[111]: Есть ли вещи, которые вы прницпиально не понимаете...
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 07.07.14 06:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Нет, это не классическая архитектура. Это веб давности 15-18 лет, когда ты напрямую читаешь из реквеста и пишешь в респонс. то есть, тупо самый нижний уровень


I>Классика нынче вот такая

I>
I>[verb(verbs.POST)]
I>void setLanguage(string language){
I>   UserSvc.updateUser(this.user, language) 

I>   return JsonResult(0);
I>}
I>


I>Ты видишь здесь реквест, респонс ? Что характерно, издержек около нуля, в пересчете на затраты на диспетчеризацию из нижнего уровня в такой вот вид.


Подобные вещи в vibe.d тоже давно есть, когда из простого класса/интерфейса с аннотациями автоматически генерится REST сервис, просто alex_public их не использует у себя.
Пример использования такой генерации клиента и сервера:
https://github.com/rejectedsoftware/vibe.d/blob/master/tests/restclient/source/app.d
Re[110]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Klapaucius  
Дата: 07.07.14 10:32
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Ну так а в Хаскеле то у нас что? )


А в хаскеле у нас вот что: если делать выводы из опыта использования UML с ООЯ с расширениями, то никаких проблем с использованием UML и для хаскеля не будет. Если, конечно, кто-нибудь захочет это сделать.

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


Ну да. В том и дело, что все примеры кода на хаскеле в этой теме, где работа с мутабельными данными есть, смотрятся не хуже, а даже лучше, чем код на C++/D. Именно потому, что в последних языках полно как всякой синтаксической шелухи, так и костылей, которые в нормальных языках не нужны.
Если сравнивать хаскель с каким-нибудь нормальным языком без контроля эффектов вроде окамла, то там хаскель-код будет хуже выглядеть из-за синтаксического штрафа за монадический/аппликативный код там, где на окамле можно без него обойтись. Но C++-образные языки обычно настолько страшные, что этот самый "синтаксический штраф" все равно погоды не сделает.

_>>>Правда для начала надо доказать полезность подобного.

K>>Вам что-ли?
_>Ну вот например здесь http://rsdn.ru/forum/philosophy/5420829
Автор: meadow_meal
Дата: 07.01.14
кто-то хотя бы попытался привести примеры. Хотя в итоге продемонстрировать ничего не удалось, но хотя бы была попытка. А вот вы, постоянно кидаясь фразой о "контроле эффектов", так ни разу и не привели ни единого примера.


Я, например, приводил примеры преобразований кода, доступных благодаря контролю эффектов. 1) Правда вы забывали о них через два-три поста и утверждали что не было ничего, ничего не было. 2) После многочисленных повторов все-таки называли их выдуманными, что следовало из некоего "отставания в разы", которое никто не измерял. 3) Когда замеры показали, что отставания в разы нет, утверждали что замеры проведены неправильно, потому что должно же быть отставание в разы. 4) В конце концов выяснилось что оптимизации не нужны, потому что комбинации комбинаторов вы никогда не используете. 5) А потом из буфера в n сообщений последние мои посты вытиснились и опять оказалось , что не было ничего, ничего не было.
С учетом этого опыта, я могу только констатировать что ничего ни доказать, ни продемонстрировать я вам не смогу.

K>>Так от вас на обсуждаемую тему тоже ни одного аргумента не поступило.


_>Эммм, а какие аргументы от меня требуются? )


Ладно аргументы — это громко сказано. Вы так ни разу не сказали чем конкретно вам не нравится монадический код и так ни разу и не показали, как такой код по-вашему должен выглядеть. Монады по вашим утверждениям всегда ужасны потому, что ужасны. (на самом деле, наверное, все-таки хаскельная система контроля за эффектами, потому что говоря "монады" вы подразумеваете именно ее)

_>Я же ничего не утверждаю


Вы много чего утверждаете.

K>>Чем они страшнее передачи лямбд через параметры шаблонов в текстовом виде, например?

_>1. А какая разница, если всё это компилируется статически и соответственно сообщение об ошибке будет как и для обычной функции?

Разница такая, что это требует "технической обвязки" гораздо более навороченной и страшной, чем контроль эффектов a-la хаскель, который вы считаете абсолютным злом.

_>2. Можно и не текстом (так просто короче на несколько символов). Но компилируется это в тот же самый код.)))


Видимо вы так пишите чтоб мне подыграть и сделать код на ди пострашнее. Понятно-понятно.

_>Нет, в индустрии называют map'ом определённую конструкцию (которая с вашей точки зрения не настоящий map) потому, что она такова в наиболее популярных языках. Вот и всё.


Ну да. В индустрии некоторые виды недомапов называют мапами (а некоторые — не называют) если таковые недомапы вообще есть (в некоторых популярных языках их нет/не было в самом недавнем времени), потому что в индустриальных языках настоящий мап в настоящий момент нереализуем. Это нормальный подход, пока индустриальный разработчик осознает подводные грабли недомапа (и нормальный разработчик как раз их осознает). Похожая история, например с недосложением плавучки, которое из-за неассоциативности строго говоря сложением не является но называется таковым, а прилагающиеся к нему подводные грабли полностью осознаются.

_>Из вашего потока слов я так и не понял, как факт наличия погрешности измерения времени в несколько процентов (хотя на самом деле меньше, но это не принципиально) обосновывает необходимость усреднять результаты


Действительно, откуда следует, что при сравнении интервалов времени, отличающихся на единицы процентов нужно учитывать погрешность измерения времени в единицы процентов? Непонятно.

_>и тем самым учитывать влияние каких-нибудь там сервисных процессов ОС, включившихся не вовремя).


Разумеется, "выбросы" учитывать не надо.

_>Согласен. Но это является для меня существенным маркером на тему доверия вашим измерениям. )


Пока мои факты не совпадают с вашими теориями, моим фактам ничего доверия не добавит. Наоборот, все что угодно будет только убавлять.

K>>Допустим. А ваши результаты не совпадают с моими. И не в порядке они, я думаю, у того, кто постоянно скрывает информацию, необходимую для воспроизведения замеров. И это точно не я.

_>О да, я так скрываю, что специально собрал и выложил exe для теста. )))

Который никак не поможет воспроизвести замер.

_>Не те, но я абсолютно точно знаю во сколько раз обсуждаемая версия кода на D быстрее измеренной там версии с until.all.


Вы знаете, насколько 64-х битная версия примера написанная так, чтоб побольше памяти выделять медленнее дишной версии, которая этого не делает. 64-х битная версия по понятным причинам выделяет существенно больше памяти, чем 32-х бинтая, время которой измерял я. С очевидными последствиями для времени выполнения. Кстати, сколько байтов в дишном int на x64? В хаскельном Int — 8.

K>>Решатель есть — вот это да! А у хаскеля тайпчекер и вычислитель есть.

_>Этого добра везде полно. )))

Кое-где есть, да. Но в прологе с этим добром дела обстоят очень плохо.
'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
Re[112]: Есть ли вещи, которые вы прницпиально не понимаете...
От: Klapaucius  
Дата: 07.07.14 10:36
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Набор не изменяемых объектов создаётся в данном примере в другом месте (на стеке), но вы его в упор не замечаете.


Про то, что я это не замечаю — это, конечно, неправда. Мы даже уже осудили смехотворный объем этих размещений выше по ветке.

_>А пул используется исключительно для хранения int'ов, а не иммутабельных объектов.


Замечательно. Как насчет того, чтоб перейти наконец к написанию примера, адекватного поставленной задаче? А то это ваше лирическое отступление уже порядком затянулось.
'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...
Пока на собственное сообщение не было ответов, его можно удалить.