Re[2]: функциональное программирование
От: takTak  
Дата: 23.08.19 14:26
Оценка:
HH>P.S. C# это не функциональный язык, это язык с некоторыми функциональными фишками, в плане функциональщины там до Haskell как до Луны.

так с помощью extension methods и https://github.com/louthy/language-ext на C# можно много функционального наваять; проблема с функциональщиной — она редко где нужна и народ, тупо привыкший к enterprise programming, выказывает мало радости, когда брезжит что-то новое и непривычное
Re[3]: функциональное программирование
От: HrorH  
Дата: 23.08.19 15:14
Оценка:
Здравствуйте, takTak, Вы писали:

T>так с помощью extension methods и https://github.com/louthy/language-ext на C# можно много функционального наваять; проблема с функциональщиной — она редко где нужна и народ, тупо привыкший к enterprise programming, выказывает мало радости, когда брезжит что-то новое и непривычное


Про C# я немного знаю, т.к. последние 15 лет в основном на нем и пишу.
Тут вопрос в том, что вам нужно: больше удовольствия и знаний (возможно бесполезных) или больше практики.

Изучать функциональщину по C# можно наверно. Но при этом лесом идут алгебраические типы, GADT, классы типов (пока C# 9 (?) еще нет), higher kinded polymorphism, Type Families и т.д.

И C# конечно просто не удобен для функционального программирования в сравнении с Haskell. Ну в Haskell функции каррированы по умолчанию, оператор композиции точка, типы функций пишутся не так громоздко и т.д.

И всякие функторы, монады, комонады, стрелки и т.д. в C# тоже идут лесом. Хотя в Linq есть конечно синтаксический сахар для монад, но без higher kinded polymorphism это профанация.

Но главное даже не это, главное это все эти научные статьи и выступления гиков, где используется Haskell.
Ну и конечно есть языки, которые мощнее Haskell: Idris, Agda, Coq, Lean Theorem Prover...
P.S. Для практики это все конечно не нужно.
Re[6]: функциональное программирование
От: SkyDance Земля  
Дата: 25.08.19 01:59
Оценка:
KP>Похоже, у тебя просто нет понимания того, что такое диалект. Диалект – это очень маленькое изменение языка, адаптация языка к другой платформе

Ну так как, ты изучил уже, что же такое Elixir?

Или хотя бы посмотрел, как *инсталлировать* Elixir, а?
Re[7]: функциональное программирование
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 25.08.19 03:46
Оценка:
Здравствуйте, SkyDance, Вы писали:

KP>>Похоже, у тебя просто нет понимания того, что такое диалект. Диалект – это очень маленькое изменение языка, адаптация языка к другой платформе


SD>Ну так как, ты изучил уже, что же такое Elixir?

SD>Или хотя бы посмотрел, как *инсталлировать* Elixir, а?

До сих пор подгорает? Может к специалисту обратишься?
Отредактировано 25.08.2019 7:00 kaa.python . Предыдущая версия .
Re[4]: функциональное программирование
От: takTak  
Дата: 25.08.19 14:43
Оценка:
T>>так с помощью extension methods и https://github.com/louthy/language-ext на C# можно много функционального наваять; проблема с функциональщиной — она редко где нужна и народ, тупо привыкший к enterprise programming, выказывает мало радости, когда брезжит что-то новое и непривычное

HH>Про C# я немного знаю, т.к. последние 15 лет в основном на нем и пишу.

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

HH>Изучать функциональщину по C# можно наверно. Но при этом лесом идут алгебраические типы, GADT, классы типов (пока C# 9 (?) еще нет), higher kinded polymorphism, Type Families и т.д.


HH>И C# конечно просто не удобен для функционального программирования в сравнении с Haskell. Ну в Haskell функции каррированы по умолчанию, оператор композиции точка, типы функций пишутся не так громоздко и т.д.


HH>И всякие функторы, монады, комонады, стрелки и т.д. в C# тоже идут лесом. Хотя в Linq есть конечно синтаксический сахар для монад, но без higher kinded polymorphism это профанация.


HH>Но главное даже не это, главное это все эти научные статьи и выступления гиков, где используется Haskell.

HH>Ну и конечно есть языки, которые мощнее Haskell: Idris, Agda, Coq, Lean Theorem Prover...
HH>P.S. Для практики это все конечно не нужно.


алгебраические типы есть в F#, так как это .NET, то может это перекочует когда-то и в C#,
насчёт GADT, HKTs и прочего- непонятно, нужно ли это вообще: не знаю, насколько просто код со сложными и вложенными типами читается,
C# неудобен с точки зрения написания функций, это так, но зато он довольно быстро понятен тем, кто функциональным программированием не увлекается,
насчёт "функторы, монады, комонады" — я не понял... меня функциональность интересует, в первую очередь, как инструмент для написания понятного кода без try catch, null reference exceptio, if else etc., —
для всех этих задач соответствующие механизмы, функторы, монады в C# есть, тот же Linq во многом по такому принципу и устроен, немного стрёмно, что в майкрософте напридумывали своих служебных слов: Select, selectMany, aggegate вместо общепринятых map, fold ..., но это, наверное, тоже дело привычки с этим как-то примириться или просто использовать свои или чужие расширения с более общепринятым обозначением
Отредактировано 25.08.2019 14:45 takTak . Предыдущая версия .
Re[5]: функциональное программирование
От: HrorH  
Дата: 25.08.19 20:38
Оценка:
Здравствуйте, takTak, Вы писали:

Я не спорю по поводу достоинств C# как языка для практического программирования.
Речь идет о том, какой язык больше подходит для изучения функционального программирования.

F# тут немного получше, но в нем также не хватает HKT, и потом F# это обрезанный OCaml, откуда вырезали самое интересное -систему модулей. Одна из мощных фишек в системе модулей этого языка это функторы Functors (слово функтор в OCaml я так понимаю имеет другой смысл, также как слово функтор в C++ имеет третий смысл).

Что касается Linq, то там есть query expression pattern, который интересен тем, что его можно реализовывать для своих классов.

Но функторы в C# определить нельзя, так же как нельзя сделать код, который например будет работать с любой монадой.

Longing for higher-kinded C#

interface IFunctor<T> {
T<B> FMap<A, B>(Func<A, B> f, T<A> a);
}
This won’t compile. We can’t refer to T in the typing of FMap as T<B> and T<A>: it’s not expressible in C# and .NET’s type system.


И к тому времени, как в C# появятся алгебраические типы, Haskell уже будет поддерживать зависимые типы.
Re[8]: функциональное программирование
От: SkyDance Земля  
Дата: 26.08.19 04:42
Оценка:
KP>До сих пор подгорает? Может к специалисту обратишься?

Ага. Мы тут просто с Jose обсуждаем, как бы упростить все эти не шибко удобные процедуры, ибо нету у Elixir'а никого вроде Erlang Solutions, кто выпускал бы бинарные пакеты, и потому язык сложнее продвигать.

(надеюсь, ты знаешь, кто есть Jose Valim, один из директоров Erlang Ecosystem Foundation и изобретатель Elixir'а).
Re[9]: функциональное программирование
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 26.08.19 05:20
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Ага. Мы тут просто с Jose обсуждаем, как бы упростить все эти не шибко удобные процедуры, ибо нету у Elixir'а никого вроде Erlang Solutions, кто выпускал бы бинарные пакеты, и потому язык сложнее продвигать.


SD>(надеюсь, ты знаешь, кто есть Jose Valim, один из директоров Erlang Ecosystem Foundation и изобретатель Elixir'а).


А ты еще более смешной и нелепый, чем кажешься на первый взгляд. С кем бы ты там не обсуждал упрощения "все эти не шибко удобные процедуры" – это мало что меняет. Ну а гопник-ориентированная модель доказательства своей позиции через "кого на районе знаешь" делает аргументированный спор с тобой вообще бессмысленным. Извини, но у меня нет желания что-то тебе доказывать и объяснять, так как идея опускаться на твой уровень мне не кажется привлекательной.
Re[7]: функциональное программирование
От: bexab  
Дата: 26.08.19 06:47
Оценка: +1
Здравствуйте, SkyDance, Вы писали:

SD>Как много кода ты написал на Erlang и Elixir? Как думаешь, откуда в Elixir названия вроде GenServer или GenEvent?

Если под словом 'Erlang' понимать только язык — то Elixir не является диалектом Эрланга, явно же другой синтаксис (например — rebind).
Если же под 'Эрлангом' понимать способ построения систем — то конечно, Elixir это просто другой способ использывания типовых решений из Эрланга (gen_server, ...).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.