@Fsharp_chat

Страница 514 из 772
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
Люди, а что - на F# нет генератора статических сайтов?
могу посоветовать nuxt =) https://nuxtjs.org/guide#static-generated-pre-rendering-

Dmitry
14.03.2018
15:39:17
вот какой-то DocFX нашёл

а не, оно в основном для документации

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

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

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
По гайдлайнам ещё кстати не рекомендуется всякие операторы-рыбки добавлять, из-за читаемости и новых людей

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. Но если убрать одно из двух - ругается

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

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
https://github.com/fsharp/fslang-suggestions/issues/456
о, он вот так предлагает https://gist.github.com/dsyme/bfed2eed788c7ba58ccc

Я правда не понял, где там его аргументация против этого предложения

Evgeniy
14.03.2018
17:35:04
о, он вот так предлагает https://gist.github.com/dsyme/bfed2eed788c7ba58ccc
Это не работает для дженериков в определении типов, вон там @blumu пишет

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

?‍?
14.03.2018
17:43:04
> Цель этой заметки — введение в асинхронное программирование и computation expressions в Nemerle ?
> она так же может быть полезна тем, кто изучает F#, так так реализация асинхронного программирования в Nemerle была сделана с оглядкой на него в F#.

Я не понял, в чем вопрос.
Что нужно добавить, чтобы лучше понимать как всё устроено на F# (новичкам ФП, если хотите)

Evgeniy
14.03.2018
17:44:46
Что нужно добавить, чтобы лучше понимать как всё устроено на F# (новичкам ФП, если хотите)
Есть отличная серия статей: https://fsharpforfunandprofit.com/series/computation-expressions.html

Evgeniy
14.03.2018
18:05:49
Спасибо, ознакомлюсь!
Там весь сайт целиком стоит почитать.

Roman
14.03.2018
18:38:27
хорошая замена (new: unit -> 'a) - использовать Unchecked.default<'a> на структурах - -1 условие
Ага, вариант. Но я хотел без грязных приемов, хотя тут достаточно безопасно

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 Наконец ответили, что пофикшено)

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
Мне кажется, что об этом просто не задумывались (struct option, struct choice), когда проектировали.
Option в виде класса тормозной выходит. На C# запилил два вида Option (оба - структуры), один обертывает nullable, второй reference. Универсальный можно, но будет оверхед для ссылочных типов. Над выводом типов и различением перегрузок в C# обрыдался.

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

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

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

Roman
15.03.2018
07:18:38
На нуллаблы переделали
Можно же свой struct option сделать

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
Зачем, если это Nullable?
У Nullable дизайн овно. Value может бросить исключение и этим все сказано

Pavel
15.03.2018
08:32:27
/shrug

Страница 514 из 772