Re[26]: "LINQ как шаг к ФП". Стиль изложения.
От: Qbit86 Кипр
Дата: 10.02.09 12:42
Оценка:
Здравствуйте, dr.Chaos, Вы писали:

Q>>После того, как набъёшь руку с boost::bind, никакой карринг уже не испугает :)


DC>После того как увидел карринг в Хаскеле, от boost:bind тошнить начинает :).


Не без этого. Поэтому я на C# перешёл. Не хватает паттерн-матчинга и макросов, надо ещё куда-нибудь переходить.

DC>А, вообще, полезно, только язык тебе не помогает, а мешает выражать свои мысли.


Всё что нас не убивает, делает нас... страннее! © :)

DC>"...А теперь попробуй объяснить им (средневековым монахам) что ты муж ведьмы, не используя обороты типа : Толерантное отношение к магическим меньшинствам..."

DC>© Белянин С.
DC>Человек только начал въезжать в С++ с его ООП и прочей фигнёй. Объяснить не трудно, важно дать понять зачем это надо и как использовать.

Я не об этом. Я о том, что человек начинает въезжать в ФП, и объяснить через C++ проще, чем через Карри, Чёрча и Россера :)

DC>В функциональных языках больше времени уходит над работу на программой нежели на борьбу с языком.


Это так.

DC>Я вообще не об этом, я о том, что проще изучать приёмы программирования используя синтаксис, который упрощает его понимание человеком, а не машиной.


Я б не сказал, что синтаксис Хаскеля чего-то там упрощает.
Глаза у меня добрые, но рубашка — смирительная!
Re[26]: "LINQ как шаг к ФП". Стиль изложения.
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.02.09 12:48
Оценка: +2
Здравствуйте, thesz, Вы писали:

T>Для этого человека нет ничего невозможного в написании программы, но всё равно остаются сложности с предметной областью.


T>Для программиста знание языков и внутренностей важно, но не менее (а то и более) важно уметь программировать для разных предметных областей. И чем больше их будет, тем лучше.


Это как следует понимать? Как "владение разными языками облегчает вхождение в разные предметные области"? Или как "разные предметные области облегчают человеку изучение разных языков"?

<offtopic>
Когда-то давно была такая поговорка: настоящий программист должен написать собственный текстовый редактор, компилятор и операционную систему. Поэтому не нужно апелировать к написанию компиляторов, пониманию AST и кодогенерации. Это вещи, которые очень многие программисты считают весьма интересными и готовы заниматься ими ради собственного удовольствия. Гораздо сложнее, на мой взгляд, ответственное отношение к работе, которая не так увлекательна, как создание собственного компилятора. Например, есть необходимость внести за короткое время важные изменения в большую систему, эволюционировавщую в течении восьми лет. И так, чтобы эти изменения заработали сразу, без ошибок. Здесь уже не столь важно ни знание предметной области, ни знание языков и внутренностей, ни даже знание самой модифицируемой системы. А некий баланс всех этих знаний + четкое понимание целей + четкое видение пути их достижения + спокойное отношение к оставшемуся до часа "Ч" времени. Сильно сомневаюсь, что ФП здесь имеет какое-то преимущество перед ИП, и что стиль программирование здесь вообще имеет хоть какое-то значение.
</offtopic>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[27]: "LINQ как шаг к ФП". Стиль изложения.
От: dr.Chaos Россия Украшения HandMade
Дата: 10.02.09 13:17
Оценка: 1 (1)
Здравствуйте, Qbit86, Вы писали:

Q>Я не об этом. Я о том, что человек начинает въезжать в ФП, и объяснить через C++ проще, чем через Карри, Чёрча и Россера 


Даже если у человека большой бекграунд на С++, объяснять приёмы ФП лучше не на С++, т.к. постоянно будешь слышать: "Ну здесь ще проще цикл...?!".

DC>>Я вообще не об этом, я о том, что проще изучать приёмы программирования используя синтаксис, который упрощает его понимание человеком, а не машиной.


Q>Я б не сказал, что синтаксис Хаскеля чего-то там упрощает.


Ну тогда тебе задачка:
есть структуры

struct Foo
{
\\...
std::string name;
\\...
}

struct Bar
{
\\...
long val;
\\...
}


Есть ассоциативный контейнер:

std::map<std::string,Bar> barMap;


Задача по name получить bar.

Foo s;
\\...
s.name = "blabla";
\\..
Bar b = barMap[s.name];


Всё вроде просто. А теперь усложнение у нас есть список Foo, надо получить список Bar, используя std::transform и boost::bind.
Ну как монстрик обрисовывается?

В Хаскелле будет что-то вроде (сорри если где слажал):
let bars = map ((\ arr (_,name,_) -> arr!name ) arr) foos
in 
-- ...
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[28]: "LINQ как шаг к ФП". Стиль изложения.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 10.02.09 13:26
Оценка: +1
Здравствуйте, dr.Chaos, Вы писали:

DC>Всё вроде просто. А теперь усложнение у нас есть список Foo, надо получить список Bar, используя std::transform и boost::bind.

DC>Ну как монстрик обрисовывается?

Отсюда вывод — цикл рулит.

DC>В Хаскелле будет что-то вроде (сорри если где слажал):

DC>
DC>let bars = map ((\ arr (_,name,_) -> arr!name ) arr) foos
DC>in 
DC>-- ...
DC>


[ arr!name | (_,name,_) <- foos ]
Re[31]: "LINQ как шаг к ФП". Стиль изложения.
От: thesz Россия http://thesz.livejournal.com
Дата: 10.02.09 13:26
Оценка: -1
LP>>>>>Зато есть гибкость — если критична скорость, используем прямую модификацию, без всяких, как их там, монад.
T>>>>Тебе гибкость иметь или программу писать?
LP>>>Знаешь, что я делаю в данный момент? Сишу с профайлером и выцепляю узкие места, в которых проблемы с производительностью, коих тьма. Потому как программа написана на 90 процентов и она даже работает, но не устраивает то, как она работает.
T>>Кого не устраивает?
LP>Пока — меня. Потом будет не устраивать пользователей.

Ladies and gentleman!

Here we have an extremely revealing case of premature optimization!

You often find it in the wild under the 'perfectionism' disguise.

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

И эти люди запрещают нам ковырять (строка вычеркнута)

И этим людям требуется гибкость.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[27]: "LINQ как шаг к ФП". Стиль изложения.
От: LaPerouse  
Дата: 10.02.09 13:28
Оценка:
Здравствуйте, eao197, Вы писали:

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


T>>Для этого человека нет ничего невозможного в написании программы, но всё равно остаются сложности с предметной областью.


T>>Для программиста знание языков и внутренностей важно, но не менее (а то и более) важно уметь программировать для разных предметных областей. И чем больше их будет, тем лучше.


E>Это как следует понимать? Как "владение разными языками облегчает вхождение в разные предметные области"? Или как "разные предметные области облегчают человеку изучение разных языков"?


E><offtopic>

E>Например, есть необходимость внести за короткое время важные изменения в большую систему, эволюционировавщую в течении восьми лет. И так, чтобы эти изменения заработали сразу, без ошибок. Здесь уже не столь важно ни знание предметной области, ни знание языков и внутренностей, ни даже знание самой модифицируемой системы. А некий баланс всех этих знаний + четкое понимание целей + четкое видение пути их достижения + спокойное отношение к оставшемуся до часа "Ч" времени.

Плюс еще некая уравновешенность нервной системы, чтобы за линейной время установить границы изменений, оценить последсвтия, затем четко внести изменения, не уйдя в процессе этого скучнейшего занятия в зависание или чтение rsdn.


E>Сильно сомневаюсь, что ФП здесь имеет какое-то преимущество перед ИП, и что стиль программирование здесь вообще имеет хоть какое-то значение.

E></offtopic>

ФП здесь вообще не при чем.
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Социализм — это власть трудящихся и централизованная плановая экономика.
Re[28]: "LINQ как шаг к ФП". Стиль изложения.
От: Qbit86 Кипр
Дата: 10.02.09 13:29
Оценка:
Здравствуйте, dr.Chaos, Вы писали:

DC>В Хаскелле будет что-то вроде (сорри если где слажал):

DC>
DC>let bars = map ((\ arr (_,name,_) -> arr!name ) arr) foos
DC>in 
DC>-- ...
DC>


Вот об этом я и говорю. Сравни с C#:
var bars = from foo in foos select map[foo.Name];
Глаза у меня добрые, но рубашка — смирительная!
Re[29]: "LINQ как шаг к ФП". Стиль изложения.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 10.02.09 13:31
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Вот об этом я и говорю. Сравни с C#:

Q>
Q>var bars = from foo in foos select map[foo.Name];
Q>


Лукавишь. Ты вёл речь о с++.
Re[30]: "LINQ как шаг к ФП". Стиль изложения.
От: Qbit86 Кипр
Дата: 10.02.09 13:37
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Лукавишь. Ты вёл речь о с++.


Не понял. Мне пытались показать, что C++ плохо пригоден для программирования в функциональном стиле? Так я это сам кому угодно могу продемонстрировать. Недавно в какой-то ветке (луркать по запросу «Рефакторинг „Повышение Декларативности“») я даже привёл здоровый коммент с объяснениями, почему на C++ программировать в функциональном стиле непросто.
Глаза у меня добрые, но рубашка — смирительная!
Re[27]: "LINQ как шаг к ФП". Стиль изложения.
От: thesz Россия http://thesz.livejournal.com
Дата: 10.02.09 13:48
Оценка:
T>>Для этого человека нет ничего невозможного в написании программы, но всё равно остаются сложности с предметной областью.
T>>Для программиста знание языков и внутренностей важно, но не менее (а то и более) важно уметь программировать для разных предметных областей. И чем больше их будет, тем лучше.
E>Это как следует понимать? Как "владение разными языками облегчает вхождение в разные предметные области"? Или как "разные предметные области облегчают человеку изучение разных языков"?

Не могу никак ограничивать ваше понимание моих слов.

E><offtopic>

E>Когда-то давно была такая поговорка: настоящий программист должен написать собственный текстовый редактор, компилятор и операционную систему. Поэтому не нужно апелировать к написанию компиляторов, пониманию AST и кодогенерации. Это вещи, которые очень многие программисты считают весьма интересными и готовы заниматься ими ради собственного удовольствия.
E>Гораздо сложнее, на мой взгляд, ответственное отношение к работе, которая не так увлекательна, как создание собственного компилятора.

Написание таких слов — оно ведь создаёт внутри такое тёплое приятное чувство, так?

E>Например, есть необходимость внести за короткое время важные изменения в большую систему, эволюционировавщую в течении восьми лет. И так, чтобы эти изменения заработали сразу, без ошибок. Здесь уже не столь важно ни знание предметной области, ни знание языков и внутренностей, ни даже знание самой модифицируемой системы. А некий баланс всех этих знаний + четкое понимание целей + четкое видение пути их достижения + спокойное отношение к оставшемуся до часа "Ч" времени.


Да! Да! ДДаа!!!

Ещё-о-о!

(скрючившись над столом, судорожно дёргает правой рукой; производимое действие сокрыто столешницей, поэтому смысл его ускользает от наблюдателя)

Если серьёзно, то всё, что вы написали, обсалютно (C) бессмысленно, ибо лишено критериев проверки.

Как, например, проверить "баланс знаний"? Или "чёткость понимания целей"?

E>Сильно сомневаюсь, что ФП здесь имеет какое-то преимущество перед ИП, и что стиль программирование здесь вообще имеет хоть какое-то значение.


Стиль программирования исходной системы, конечно же, имеет значение. В случае ФП нам гарантирован фиксированный объём изменений и фиксированный объём мест, где могут появиться внесённые ошибки. Nes pa?
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Re[31]: "LINQ как шаг к ФП". Стиль изложения.
От: dr.Chaos Россия Украшения HandMade
Дата: 10.02.09 13:57
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Не понял. Мне пытались показать, что C++ плохо пригоден для программирования в функциональном стиле? Так я это сам кому угодно могу продемонстрировать. Недавно в какой-то ветке (луркать по запросу «Рефакторинг „Повышение Декларативности“») я даже привёл здоровый коммент с объяснениями, почему на C++ программировать в функциональном стиле непросто.


Q>Я б не сказал, что синтаксис Хаскеля чего-то там упрощает.


Я тебе привёл пример что упрощает синтаксис Хаскеля в сравнении с С++ для простой лямбды (можно было бы и просто скомбинировать доступ name и обращение по индексу). Для С#, я думаю, можно найти не меньше примеров когда синтаксис мешает, воспринимать какой либо приём(паттерн матчинг например), причём не только в сравнении с Хаскелом.

Короче: Размер... тьфу... Синтаксис таки имеет значение. И мало того синтаксис Хаскеля помогает понять концепции/парадигмы/приёмы заложенные в этот Язык. А синтаксис С++ хоть и позволяет нам работать с замыканиями или строить семейства типов, но понимание этих концепций человеком затрудняет.
Побеждающий других — силен,
Побеждающий себя — Могущественен.
Лао Цзы
Re[29]: "LINQ как шаг к ФП". Стиль изложения.
От: VoidEx  
Дата: 10.02.09 14:09
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Вот об этом я и говорю. Сравни с C#:

Q>
Q>var bars = from foo in foos select map[foo.Name];
Q>

О чём?

Распечатать максимальное чётное из 25 рандомных чисел
print.maximum.filter even.take 25.randoms
Re[31]: "LINQ как шаг к ФП". Стиль изложения.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 10.02.09 14:09
Оценка:
Здравствуйте, Qbit86, Вы писали:

L>>Лукавишь. Ты вёл речь о с++.


Q>Не понял. Мне пытались показать, что C++ плохо пригоден для программирования в функциональном стиле? Так я это сам кому угодно могу продемонстрировать. Недавно в какой-то ветке (луркать по запросу «Рефакторинг „Повышение Декларативности“») я даже привёл здоровый коммент с объяснениями, почему на C++ программировать в функциональном стиле непросто.


А вы там намешали — объяснять надо на примере с++ и прочее. Сбили меня с толку. Приношу свои извинения.
Что касается синтаксиса, то map примитивный пример, на котором мощь синтаксиса Хаскеля для программирования в фп стиле незаметна.
Твой код на LINQ — это аналог list comprehension. Выглядеть будет практически так же. Уже есть везде
Re[32]: "LINQ как шаг к ФП". Стиль изложения.
От: Qbit86 Кипр
Дата: 10.02.09 14:13
Оценка:
Здравствуйте, dr.Chaos, Вы писали:

DC>Я тебе привёл пример что упрощает синтаксис Хаскеля в сравнении с С++.


Вот это достижение — сделать синтаксис проще, чем в C++!

DC>Я тебе привёл пример что упрощает синтаксис Хаскеля в сравнении с С++.


А я привёл пример синтаксиса C# 3.0 в сравнении с Хаскелем.

DC>Короче: Размер... тьфу... Синтаксис таки имеет значение.


Таки да.

DC>И мало того синтаксис Хаскеля помогает понять концепции/парадигмы/приёмы заложенные в этот Язык.


Синтаксис
var bars = from foo in foos select map[foo.Name];

Способен понять не то что начинающий в ФП — даже новичок в программировании вообще. В отличие от
let bars = map ((\ arr (_,name,_) -> arr!name ) arr) foos

или
[ arr!name | (_,name,_) <- foos ]


DC>А синтаксис С++ хоть и позволяет нам работать с замыканиями или строить семейства типов, но понимание этих концепций человеком затрудняет.


Синтаксис C++ страшен, но опыт вынужденного написания своих замыканий или комбинаторов упрощает понимание реализации «этих концепций». Это позволяет делать правдоподобные априорные заключения о скорости и асимптотической сложности вычислений, о специфике взаимодействия с GC и ресурсами системы, и многих других вещей.
Глаза у меня добрые, но рубашка — смирительная!
Re[32]: "LINQ как шаг к ФП". Стиль изложения.
От: Qbit86 Кипр
Дата: 10.02.09 14:17
Оценка:
Здравствуйте, lomeo, Вы писали:

L>Твой код на LINQ — это аналог list comprehension.


Можно без SQL-like синтаксиса:
var bars = foos.Select(foo => map[foo.Name]);


L>Уже есть везде :-)


Если так, то это здорово!
Глаза у меня добрые, но рубашка — смирительная!
Re[28]: "LINQ как шаг к ФП". Стиль изложения.
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.02.09 14:18
Оценка:
Здравствуйте, thesz, Вы писали:

T>>>Для этого человека нет ничего невозможного в написании программы, но всё равно остаются сложности с предметной областью.

T>>>Для программиста знание языков и внутренностей важно, но не менее (а то и более) важно уметь программировать для разных предметных областей. И чем больше их будет, тем лучше.
E>>Это как следует понимать? Как "владение разными языками облегчает вхождение в разные предметные области"? Или как "разные предметные области облегчают человеку изучение разных языков"?

T>Не могу никак ограничивать ваше понимание моих слов.


Очень отрадно, что вы сторонник "свободы сновидений". Однако, очень бы хотелось узнать именно ваш вывод.

E>>Гораздо сложнее, на мой взгляд, ответственное отношение к работе, которая не так увлекательна, как создание собственного компилятора.


T>Написание таких слов — оно ведь создаёт внутри такое тёплое приятное чувство, так?


Нет.

T>Если серьёзно, то всё, что вы написали, обсалютно (C) бессмысленно, ибо лишено критериев проверки.


T>Как, например, проверить "баланс знаний"? Или "чёткость понимания целей"?


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

Или же вы разделяете философию Лапласа о том, что все в нашем мире детерминировано?

E>>Сильно сомневаюсь, что ФП здесь имеет какое-то преимущество перед ИП, и что стиль программирование здесь вообще имеет хоть какое-то значение.


T>Стиль программирования исходной системы, конечно же, имеет значение. В случае ФП нам гарантирован фиксированный объём изменений и фиксированный объём мест, где могут появиться внесённые ошибки. Nes pa?


Очень наивная точка зрения, имхо.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[33]: "LINQ как шаг к ФП". Стиль изложения.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 10.02.09 14:33
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Синтаксис

Q>
Q>var bars = from foo in foos select map[foo.Name];
Q>

Q>Способен понять не то что начинающий в ФП — даже новичок в программировании вообще. В отличие от
Q>
Q>let bars = map ((\ arr (_,name,_) -> arr!name ) arr) foos
Q>

Q>или
Q>
Q>[ arr!name | (_,name,_) <- foos ]
Q>


Я вот сейчас новичку в программировании показал, он ни то ни другое не понимает. Как думаешь, стоит показывать начинающему в ФП, или примем за факт, что он и то и другое поймёт?

Чего ты к линку привязался? линк хороший DSL и хорошо делает свою маленькую работу, что же он теперь покрывает всё ФП программирование? Кстати, даже если коснутся потоков — он так же хорош как и хаскелевский LH?

Честно, не пойму, чем from foo in foos select map[foo.Name] отличается от [ arr ! name foo | foo <- foos] или даже, раз мы уж говорим о том, что синтаксис помогает писать в ФП стиле, map ((arr!) . name) foos. И не надо глупостей про новичков, синтаксис программистам помогать должен программы писать, а не язык учить.
Re[33]: "LINQ как шаг к ФП". Стиль изложения.
От: lomeo Россия http://lomeo.livejournal.com/
Дата: 10.02.09 14:39
Оценка:
Здравствуйте, Qbit86, Вы писали:

L>>Твой код на LINQ — это аналог list comprehension.

Q>Можно без SQL-like синтаксиса:
Q>
Q>var bars = foos.Select(foo => map[foo.Name]);
Q>


Согласен — нечего здесь сравнивать, абсолютно аналогично

map (\foo -> bars ! name foo) foos


L>>Уже есть везде

Q>Если так, то это здорово!

Это далеко не весь ФП
Re[26]: "LINQ как шаг к ФП". Стиль изложения.
От: IT Россия linq2db.com
Дата: 10.02.09 14:42
Оценка:
Здравствуйте, thesz, Вы писали:

T>Для программиста знание языков и внутренностей важно, но не менее (а то и более) важно уметь программировать для разных предметных областей. И чем больше их будет, тем лучше.


И как, интересно, знание разных предметных областей помогает в освоении того же ФП? Как мне в этом поможет, ну скажем, написанный отчёт по заработной плате?
Если нам не помогут, то мы тоже никого не пощадим.
Re[34]: "LINQ как шаг к ФП". Стиль изложения.
От: Qbit86 Кипр
Дата: 10.02.09 14:45
Оценка: :))
Здравствуйте, lomeo, Вы писали:

L>Как думаешь, стоит показывать начинающему в ФП, или примем за факт, что он и то и другое поймёт?


То, что он код на Хаскеле не поймёт — это факт. А вот код типа
var bars = foos.Select(foo => map[foo.Name]);

поймёт с большой вероятностью.

L>Чего ты к линку привязался?


Это не я к Линку привязался, могу и без SQL-like синтаксиса прожить.

L>Честно, не пойму, чем from foo in foos select map[foo.Name] отличается от...


Слова человеческие.

L>И не надо глупостей про новичков, синтаксис программистам помогать должен программы писать, а не язык учить.


По прежнему не вижу оснований считать синтаксис Хаскеля «помогающим».
Глаза у меня добрые, но рубашка — смирительная!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.