
Most
14.03.2018
15:10:14
https://jetbrainsuniverse.timepad.ru/event/682524/


Evgeniy
14.03.2018
15:25:24
Про сложность ФП и F#.
Тут нужно обращаться к мастерам религиозных проповедей. :) Например, к докладу "Simple Made Easy" Рича Хикки.
Ты говоришь, что ФП и F# — это сложно, а потом показываешь пример, который требует понимания "partial application, currying, bind, pipelines". В этом смысле сложность противопоставляется понятию easy/familiarity. Это сложно, потому что непривычно, незнакомо. Kotlin делает ставку на привычность, он хорошо заходит тем, кто знает Java или C#.
Стиль кода на F# изменяется в процессе обучения, ознакомления. Никто не запрещает писать в привычном C# или Python стиле, мутабельно, со стейтфул ООП иерархиями, не задумываясь о сайд-эффектах, внедряя кучи зависимостей. В итоге можно услышать законное "фи" от товарищей. Но кого это волнует, когда нужно решить задачу? ;)
В чем профит? Когда ФП язык становится знакомым и привычным, то сложность (в смысле complexity) уменьшается: композиция, иммутабельность, чистота, dependency rejection, DDD — это действительно хорошие идеи. Все это можно испортить неидиоматичным кодом, бороться можно чтением:
- fsharpforfunandprofit.com
- http://blog.ploeh.dk
@forcewake
Все, я закончил с писаниной на сегодня. :)


Dmitry
14.03.2018
15:26:02
Люди, а что - на F# нет генератора статических сайтов?

Google

Evgeniy
14.03.2018
15:27:05

Vladimir
14.03.2018
15:36:12

Dmitry
14.03.2018
15:39:17
вот какой-то DocFX нашёл
а не, оно в основном для документации

Vasily
14.03.2018
15:40:55
Насчёт dsl, кстати,нормальным путем ещё будет написание type provider, который строит типы на базе простого языка правил, например

Evgeniy
14.03.2018
15:41:24

Vasily
14.03.2018
15:41:53
Но там надо что-то думать с динамической компиляцией сборок

Evgeniy
14.03.2018
15:42:23

Vasily
14.03.2018
15:42:47
Поменял- перекомпилил сборку

Evgeniy
14.03.2018
15:43:16
А часто возникает необходимость?


Roman
14.03.2018
15:43:28
Про сложность ФП и F#.
Тут нужно обращаться к мастерам религиозных проповедей. :) Например, к докладу "Simple Made Easy" Рича Хикки.
Ты говоришь, что ФП и F# — это сложно, а потом показываешь пример, который требует понимания "partial application, currying, bind, pipelines". В этом смысле сложность противопоставляется понятию easy/familiarity. Это сложно, потому что непривычно, незнакомо. Kotlin делает ставку на привычность, он хорошо заходит тем, кто знает Java или C#.
Стиль кода на F# изменяется в процессе обучения, ознакомления. Никто не запрещает писать в привычном C# или Python стиле, мутабельно, со стейтфул ООП иерархиями, не задумываясь о сайд-эффектах, внедряя кучи зависимостей. В итоге можно услышать законное "фи" от товарищей. Но кого это волнует, когда нужно решить задачу? ;)
В чем профит? Когда ФП язык становится знакомым и привычным, то сложность (в смысле complexity) уменьшается: композиция, иммутабельность, чистота, dependency rejection, DDD — это действительно хорошие идеи. Все это можно испортить неидиоматичным кодом, бороться можно чтением:
- fsharpforfunandprofit.com
- http://blog.ploeh.dk
@forcewake
Шикарный пост!

Google


Roman
14.03.2018
15:43:59
Про сложность ФП и F#.
Тут нужно обращаться к мастерам религиозных проповедей. :) Например, к докладу "Simple Made Easy" Рича Хикки.
Ты говоришь, что ФП и F# — это сложно, а потом показываешь пример, который требует понимания "partial application, currying, bind, pipelines". В этом смысле сложность противопоставляется понятию easy/familiarity. Это сложно, потому что непривычно, незнакомо. Kotlin делает ставку на привычность, он хорошо заходит тем, кто знает Java или C#.
Стиль кода на F# изменяется в процессе обучения, ознакомления. Никто не запрещает писать в привычном C# или Python стиле, мутабельно, со стейтфул ООП иерархиями, не задумываясь о сайд-эффектах, внедряя кучи зависимостей. В итоге можно услышать законное "фи" от товарищей. Но кого это волнует, когда нужно решить задачу? ;)
В чем профит? Когда ФП язык становится знакомым и привычным, то сложность (в смысле complexity) уменьшается: композиция, иммутабельность, чистота, dependency rejection, DDD — это действительно хорошие идеи. Все это можно испортить неидиоматичным кодом, бороться можно чтением:
- fsharpforfunandprofit.com
- http://blog.ploeh.dk
@forcewake
Мне нравится что дискуссия переходит уже в формат блог постов)


Vasily
14.03.2018
15:45:16
А часто возникает необходимость?
Ну тут фиг знает, на самом деле. Но из более-менее практических задач,в которых это может потребоваться, например, построение воркфлы
Идея в том, что, изменяя метаданные, получаем кусок кода, который эти данные нормально процессит
Но это больше в скриптинге нужно

Evgeniy
14.03.2018
16:10:14
И правда модный сайт сделали.
http://websharper.com/
Только сейчас посмотрел. :)
И скриншоты из vscode. Отлично!


Vlad
14.03.2018
16:12:29
Про сложность ФП и F#.
Тут нужно обращаться к мастерам религиозных проповедей. :) Например, к докладу "Simple Made Easy" Рича Хикки.
Ты говоришь, что ФП и F# — это сложно, а потом показываешь пример, который требует понимания "partial application, currying, bind, pipelines". В этом смысле сложность противопоставляется понятию easy/familiarity. Это сложно, потому что непривычно, незнакомо. Kotlin делает ставку на привычность, он хорошо заходит тем, кто знает Java или C#.
Стиль кода на F# изменяется в процессе обучения, ознакомления. Никто не запрещает писать в привычном C# или Python стиле, мутабельно, со стейтфул ООП иерархиями, не задумываясь о сайд-эффектах, внедряя кучи зависимостей. В итоге можно услышать законное "фи" от товарищей. Но кого это волнует, когда нужно решить задачу? ;)
В чем профит? Когда ФП язык становится знакомым и привычным, то сложность (в смысле complexity) уменьшается: композиция, иммутабельность, чистота, dependency rejection, DDD — это действительно хорошие идеи. Все это можно испортить неидиоматичным кодом, бороться можно чтением:
- fsharpforfunandprofit.com
- http://blog.ploeh.dk
@forcewake
По гайдлайнам ещё кстати не рекомендуется всякие операторы-рыбки добавлять, из-за читаемости и новых людей


Roman
14.03.2018
16:13:09

Evgeniy
14.03.2018
16:52:31
Чем там Антон Молдован пользовался на докладе, чтобы сайт нетфеста свалить? :)

Roman
14.03.2018
16:53:02
Но надо же референсное железо и все такое
Я больше про перформанс вебшарпера, чем про конкретный сайт)

Evgeniy
14.03.2018
16:54:01
А, тю.
Неправильно понял.

Roman
14.03.2018
17:11:44
А есть какой-нить способ создания, не знаю, именнованных дженерик констрейнтов или че-нить такого? У меня есть вот такая лапша:
let get<'ResourceId when 'ResourceId: struct
and 'ResourceId: comparison
and 'ResourceId: (new: unit -> 'ResourceId)
and 'ResourceId:> ValueType> connectionString (resourceId: 'ResourceId) =
И ровно такая же пачка констрейнтов используется еще в паре мест. Можно как-нить избежать копипасты?
также, имхо, странно, что компилятор заставляет указывать и 'a: struct и a:> ValueType. Но если убрать одно из двух - ругается

Roman
14.03.2018
17:15:00

Google

Roman
14.03.2018
17:15:55
Это не баг?
ну я не знаю. Для меня выглядит багом, но можт я чего не догоняю. Вот с вами удивлением и поделился)

Evgeniy
14.03.2018
17:17:03

Roman
14.03.2018
17:17:59
Это не баг?
я еще думал, что (new: unit -> 'a) должен поглощаться страктом. Но, видимо, хоть для платформы это равнозначно, для фшарпа не всегда справедливо, например, в случае [<Struct>] DU

Evgeniy
14.03.2018
17:27:55

Roman
14.03.2018
17:34:32
Я правда не понял, где там его аргументация против этого предложения

Evgeniy
14.03.2018
17:35:04

??
14.03.2018
17:36:05
Подскажите, чего не хватает в старенькой статье о вышеупомянутых *Computation Expressions* и *монадах* ? https://habrahabr.ru/post/108184/ [выдерска из статьи: "Помимо асинхронных вычислений монады позволяют реализовать другие вкусности, такие как list comprehension, continuation, превращение грязных функций в чистый блок, через который неявно протаскивается состояние, и множество других. " ]

Evgeniy
14.03.2018
17:37:20
> Цель этой заметки — введение в асинхронное программирование и computation expressions в Nemerle
?

??
14.03.2018
17:43:04

Roman
14.03.2018
17:44:28

Evgeniy
14.03.2018
17:44:46

??
14.03.2018
17:45:03

Evgeniy
14.03.2018
18:05:49

Ivan
14.03.2018
18:29:28

Roman
14.03.2018
18:38:27

Evgeniy
14.03.2018
19:16:28
Привет.

Google

Влад
14.03.2018
19:16:40
Привет!

Roman
14.03.2018
19:32:08

Влад
14.03.2018
19:34:08
Хех, я глянул, что сюда всякие интересности выкладывают, вот и присоединился)

Roman
14.03.2018
19:54:50
https://twitter.com/jrlarsen/status/973883266729168896?s=09

Evgeniy
14.03.2018
20:03:13
https://github.com/fsharp/fslang-design/commit/4e3c03cd7a46227cc291d2cd334e4bf721a483d3

Vladimir
15.03.2018
04:46:21
https://github.com/dotnet/cli/issues/8697
Наконец ответили, что пофикшено)

Roman
15.03.2018
04:48:25

Evgeniy
15.03.2018
06:09:56
Привет.

Вячеслав
15.03.2018
06:10:17
Здравствуй

Pavel
15.03.2018
06:20:12
Почему в F# discriminated unions (и в частности Option) реализованы как классы, а не как структуры?
Nullable в C# - структура

Evgeniy
15.03.2018
06:22:03
Это хороший вопрос.

Klei
15.03.2018
06:22:24
Потому что раньше F# вообще не умел в создание структур. К тому же когда вышел 4.1 у некоторых бурлило от того, что структурный Result в ряде случаев оказался медленее Choice.

Evgeniy
15.03.2018
06:22:24
Мне кажется, что об этом просто не задумывались (struct option, struct choice), когда проектировали.
Но профит от смены ref на value не всегда очевидный, иногда его может и не быть.
Я тут RFC писал, частично захватывающий этот вопрос (про Option).
https://github.com/fsharp/fslang-design/blob/master/RFCs/FS-1039-struct-representation-for-active-patterns.md

A64m
15.03.2018
06:24:42
потому что в общем случае DU рекурсивные

Klei
15.03.2018
06:24:43
Не знал.

Google

Bonart
15.03.2018
06:43:16

Evgeniy
15.03.2018
06:44:35

Bonart
15.03.2018
06:45:33
На нынешней работе аллокации без нужды есть абсолютное зло :)

Pavel
15.03.2018
07:11:32
Я столкнулся первый раз с этой проблемой, когда коллега 50 лярдов опшнов в памяти держал (нада)

Roman
15.03.2018
07:12:35

Pavel
15.03.2018
07:12:50
На нуллаблы переделали

Roman
15.03.2018
07:18:38

Pavel
15.03.2018
07:20:27
Зачем, если это Nullable?

Vladimir
15.03.2018
07:22:41
Nullable менее удобен

Roman
15.03.2018
07:23:06
Потому что можно! Чтоб матчинг использовать и все такое
Да просто для единообразия, на самом деле

Bonart
15.03.2018
08:21:43

Roman
15.03.2018
08:32:09

Pavel
15.03.2018
08:32:27
/shrug