
Enhed
17.09.2017
12:56:06
У меня в проекте требовалось частичная реализация абстрактных методов. Что в сш я бы сделал как публичный метод с вызовом абстрактного защищенного. В фш эта концепция сменилась на реализацию абстрактного мембера по умолчанию, а в наследнике можно сначала или потом вызвать эту базовую дефолтную реализацию. Так даже удобней получается.

Evgeniy
17.09.2017
13:54:15
Мне интересно, как поменяются подходы в F#, когда появятся default interfaces.

Pawel
17.09.2017
18:36:27

Evgeniy
17.09.2017
18:37:02
а что это?
Когда в интерфейсе можно написать реализацию для метода по умолчанию.

Google

Evgeniy
17.09.2017
18:37:08
Планируется в C#8.
Вместе с изменениями в CLR.

Pawel
17.09.2017
18:58:07
имхо лучше бы они сделали duck typing с неявной реализацие йинтерфейса в случае соответсвия ему сигнатур методов класса, а не занимались изобретением костылей.

Evgeniy
17.09.2017
19:09:40

Pawel
17.09.2017
19:12:29

Evgeniy
17.09.2017
19:15:56

Pawel
17.09.2017
19:19:53
не думаю. это что-то вроде базового класса, который может участвовать в множественном наследовании, то есть про ООП. трейты - это про ad-hock полиморфизм. Впрочем моё мнение о наследовании ты знаешь - это грех, который надо выжигать калёным железом
а уж множественное...

Evgeniy
17.09.2017
19:20:19
Понял, спасибо.
> Generic IDisposable
http://fssnip.net/7TL

Pawel
17.09.2017
20:04:42

Astmatik
17.09.2017
20:29:43
Парни, а как бы вы синглтон/lazy сделали в F#?
Допустим у меня есть какая-либо функция сохранения данных в базу, и мне нужно открыть соединение с БД лишь 1 раз перед первым сохранением.

Igor
17.09.2017
20:36:40

Google

Pawel
17.09.2017
20:39:59
и я бы такую функцию запрятал поглубже в потрохах, поскольку ни о какой ссылочной прозрачности там речи не идёт

Astmatik
17.09.2017
22:02:48
Вау. Получается, что connection в замыкании хранится?

Nikolay
18.09.2017
03:30:19
С lazy есть проблема, нужно следить за потоками, чтобы не было одновременного выполнения запроса, или чтения результата, иначе получишь исключение
У mysql адаптера написано, что он внутри имеет пул соединений, и при вызове Dispose соединение высвобождается, и затем может быть переиспользовано другим DbConnection

Friedrich
18.09.2017
04:41:59
Вот тут написано, что наш эфшарповский lazy — это обычный BCL'ный Lazy<T> с режимом ExecutionAndPublication: http://theburningmonk.com/2013/04/be-lazy-but-be-ware-of-initialization-exception/
То есть конкурентное выполнение будет ок.

Nikolay
18.09.2017
04:54:48
Дело в вызове функции запроса, или чтении из ридера
Вызовы не должны пересекаться

Astmatik
18.09.2017
05:09:49
Можно пример?

Friedrich
18.09.2017
05:10:56
Кажись, он говорит о конкурентном использовании подключения к БД (которое и правда обычно недопустимо).

Astmatik
18.09.2017
05:17:47
А разве бд не должна это сама разруливать?

Friedrich
18.09.2017
05:24:22
Нет, не должна.
Это локальные дела твоего процесса.

Artemy
18.09.2017
07:20:50
https://habrahabr.ru/post/337880

Evgeniy
18.09.2017
07:21:45

Iskander
18.09.2017
07:24:14
Мне статья понравилась, сразу схватил все с первого раза

Google

Iskander
18.09.2017
07:24:49
Вот бы так же красиво и просто объясняли и другие темы на хабре

Artemy
18.09.2017
07:25:17
Ну так-то это перевод

Fill
18.09.2017
07:25:24
Да, ничего, что он не описал паттерны фп, а просто описал основы

Evgeniy
18.09.2017
07:27:29

Fill
18.09.2017
07:27:55
я ждал описания и сравнения паттернов

Evgeniy
18.09.2017
07:30:49
я ждал описания и сравнения паттернов
Мне кажется, что все паттерны в ООП — это просто следование некоторым простым принципам при решении задач. Если интересно, в каком виде эти принципы присутствуют в функциональном программировании, то есть неплохая статья.
https://github.com/polytypic/blog/blob/master/posts/2014-08-18-solid.md

Artemy
18.09.2017
07:31:58
Вообще, чем паттерны не основы? ?

Fill
18.09.2017
07:32:06
@gsomix спасибо

Vlad
18.09.2017
07:32:23
которая по-сути ответ на нее

Evgeniy
18.09.2017
07:33:27
Вообще, чем паттерны не основы? ?
Я честно считаю, что принципы ООП, паттерны и SOLID — это основы. Но вот кто-то говорит, что это для миддлов, средний уровень знаний. :)

Iskander
18.09.2017
07:37:44

Fill
18.09.2017
07:37:56

Evgeniy
18.09.2017
07:38:31
Дай бог запомнил, что буковки в SOLID значат.

Artemy
18.09.2017
07:39:30
:D

Evgeniy
18.09.2017
07:47:30
> Type-Safe effect builder
http://fssnip.net/7TM
Eirik Tsarpalis и palladin два моих любимых авторов на fssnip. Всегда что-нибудь хитрое выкладывают. :)

Google

Evgeniy
18.09.2017
07:50:23
@fvnever ^
Немного оффтопну. MOOC по Haskell.
https://www.futurelearn.com/courses/functional-programming-haskell/

Pawel
18.09.2017
08:31:20
А разве бд не должна это сама разруливать?
уважающая себя бд как раз таки умеет это разруливать спокойно (ну кроме монги). а вот драйвер БД - нет. в .net не принято предоставлять конкуретный апи, в лучшем случае напихать костылей с асинхронщиной

Evgeniy
18.09.2017
08:51:59
Идея для перевода.
https://compositional-it.com/blog/2017/09-18-safe-web/index.html

Astmatik
18.09.2017
10:29:44
Там надо либо без fun, либо Lazy.Create()

Nikolay
18.09.2017
11:15:58
Но если нет конкурентного, то смысл в lazy?
Тут при любых раскладах не получится применить lazy

Andrew
18.09.2017
11:18:53
Народ, что вы применяете для сериализации/десериализации типов f# в xml (или другие форматы) ? Есть SharpXml, но но мне не понравился. Я не хочу засорять аттрибутами модель. А RegisterSerializer не удобны в использовании. Есть FsPickler - кажется более интересным. Но пока не разобрался. Что используете вы?

Pawel
18.09.2017
11:44:25
используй FsPickler. Всё остальное совсем плохо

Andrew
18.09.2017
12:28:51
Спасибо. Пока не совсем понял как мне кастомизировать сериализацию определенных типов: списков, union type, tupple. Т.е. именно обобщенно, а не для конкретных типов. Нет ли примеров где?

Vagif
18.09.2017
12:30:43
Ещё FsharpLu.

Evgeniy
18.09.2017
12:31:34

Pawel
18.09.2017
12:41:52

Andrew
18.09.2017
12:43:32
@ruzzke_mir Я хочу определенный формат xml. Т.к. с этим xml могут работать люди и другие программы.
@ruzzke_mir т.е. FsPickler не подойдет для внешних API именно по причине, что в нем нельзя кастомизировать сериализацию для списков, union types, tupples и т.д?

Pawel
18.09.2017
12:47:13

Andrew
18.09.2017
12:48:16
не для каждого типа. а для generic-типов. Т.е. списков, union types, tupples.

Google

Andrew
18.09.2017
12:48:49
FsharpLu он вроде только Json умеет, а Xml нет

Pawel
18.09.2017
12:51:27

Andrew
18.09.2017
12:53:49
Ну просто он не такой, какой хочу я. Тут как бы просто проблема в том, что это библиотека решает за меня, каким будет формат вывода для ряда обобщенных типов. И я в это не могу легко вмешаться.
[ Some "" ; None ; Some "message" ]
сериализуется в
<FsPickler version="4.0.0.0" type="Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Core.FSharpOption`1[System.String]]">
<value flags="sequence">
<elem>
<Some></Some>
</elem>
<elem flags="null" />
<elem>
<Some>message</Some>
</elem>
</value>
</FsPickler>
А я допустим хочу так:
<Document>
<Value></Value>
<None/>
<Value>message</Value>
</Document>

Pawel
18.09.2017
12:57:22

Vagif
18.09.2017
12:57:25

Pawel
18.09.2017
12:59:50

Andrew
18.09.2017
13:00:18

Pawel
18.09.2017
13:04:17
== А я допустим хочу так:
Имхо проще написать тип нужной формы для json/хml, чем мучатся с кастомными правилами сериализации. Конечно если сериализатор нормальный как FSharpLu и у меня по ссылке

Andrew
18.09.2017
13:05:44
Не согласен. Получится ради сериализации я сделаю неудобный тип и буду этот тип исползовать в большом количестве мест в коде.
А... ну или если предлагается сделать тип только для сериализации и конвертор из domain model в этот тип сериализации. Так можно.

Pawel
18.09.2017
13:15:26

Andrew
18.09.2017
13:17:02
Ну на самом деле по количеству кода это почти идентичные методы :)
Спасибо за идею :)

Pawel
18.09.2017
13:18:53

Andrew
18.09.2017
13:19:43
минус модель
ммм. да и если конвертер сделать универсальным, то и минус конвертер ))

Pawel
18.09.2017
13:24:59
я уже давно не использую F# и стат. типизацию для всего, что связано с интропом с БД и json, тут dynamic рулит)

Evgeniy
18.09.2017
17:34:44
\o/
https://twitter.com/sforkmann/status/909815497734213632

Igor
18.09.2017
17:52:05
Они еще и код отформатировали ?