
Anton
23.05.2017
13:40:44

Friedrich
23.05.2017
13:40:45

Vasily
23.05.2017
13:40:59
Тогда фигня получается

Google

Friedrich
23.05.2017
13:41:20
И тебе всё равно всегда в рантайме смогут подсунуть что-нибудь не то, отнаследовавшись от базового класса (если он не приватный какой-нибудь).

Evgeniy
23.05.2017
13:41:31
@ruzzke_mir С чего ты взял, что это ошибка в struct DU?

Friedrich
23.05.2017
13:41:34
(а в DU не смогут)
(заметьте, я не говорю, что фича в C# плохая — она нормальная и полезная, я даже уже использую кой-где)

Vasily
23.05.2017
13:42:43
Нормальная, полезная

Pawel
23.05.2017
13:42:43

Evgeniy
23.05.2017
13:43:39
@ruzzke_mir Ты привел пример.
[<Struct>]
type A =
| B of int
| C of int

Pawel
23.05.2017
13:44:05
не веришь - попробуй сам, получишь ошибку компиляции))

Evgeniy
23.05.2017
13:44:06
Он действительно не компилируется. С понятной ошибкой.
error FS: If a union type has more than one case and is a struct, then all fields within the union type must be given unique names.

Pawel
23.05.2017
13:44:21
ошибка абсолютно понятная
там конфликтуют конструкторы
из за неправильного сгененрированного IL
два одинаковых конструктора с одним аргументом типа int

Google

Evgeniy
23.05.2017
13:45:46
@ruzzke_mir Я считаю, что это by design.

Pawel
23.05.2017
13:46:22
да глюк это, вот же https://github.com/Microsoft/visualfsharp/issues/2463

Evgeniy
23.05.2017
13:46:51
Потому что вот этот код прекрасно компилируется.
[<Struct>]
type A =
| B of b:int
| C of c:int
И именно этот случай чинил Сайм.

Pawel
23.05.2017
13:47:54
да, так можно
не думаю, что только этот случай

Roman
23.05.2017
13:48:35
А в чем смысл этого случая?

Evgeniy
23.05.2017
13:48:45
Там указаны конкретные issue, которые он починил.

Roman
23.05.2017
13:49:11
Если разные типы в кейзах, то понятно

Pawel
23.05.2017
13:49:48
для варианта без явного указания параметров DU тоже был ишшуй

Evgeniy
23.05.2017
13:50:39
Не успел доехать в релиз?
@ruzzke_mir Просто смержили очень давно.
Мне это кажется странным немного.
> Though we won't get this in for 15.2, this seems like a 15.3 fix.
@ruzzke_mir Был неправ. Спасибо.

Pawel
23.05.2017
14:21:13

Ed
23.05.2017
14:21:14
Можно ли на ФШарпе написать меню-бар-апп для макОс?

Klei
23.05.2017
14:22:43

Friedrich
23.05.2017
14:23:32

Ed
23.05.2017
14:24:06

Google

Friedrich
23.05.2017
14:24:40
В смысле, должна быть системная библиотека, которая предоставляет C-интерфейс для этой рюшечки. Ты можешь эту библиотеку вызывать из F#.
Возможно, кто-то уже нужный тебе API завернул в управляемый код. Это надо в нугете искать.

Pawel
23.05.2017
14:28:39
Щас общался с С#-овцами на работе по поводу поддержки паттернматчинга в R#. Говорят, пока не подвезли, но общали скоро. А сейчас чекает PVS studio.

Ed
23.05.2017
14:30:50

Friedrich
23.05.2017
14:31:35
Кажется, там используют MonoMac. Чёрт его знает, насколько это актуально вообще :(

Pawel
23.05.2017
14:32:56
ну и кстати не вовсех случаях спасают именованные поля. Вот этот код из ишшуя всё ещё не компилится
[<Struct>]
type Shape =
| Circle of radius: float
| Square of side: double
| Rectangle of sides: double*double

Friedrich
23.05.2017
14:33:41
Подтверждаю, упал:
Error in pass2 for type Shape, error: duplicate entry '.ctor' in method table

Ed
23.05.2017
14:33:52

Pawel
23.05.2017
14:34:13
нет, это решарпер

Ed
23.05.2017
14:34:20
аа

Pawel
23.05.2017
14:35:24
ни у кого тут нет PVS студии затестить проверку полноты паттернматчинга типов сум в C#?

Roman
23.05.2017
14:36:48
она бесплатна же, вроде
типа триал версии

Pawel
23.05.2017
14:37:37
для меня удивительно что R# этого не делает
У нас такой анализатор есть корпоративный для Roslyn ещё

Google

Vasily
23.05.2017
14:38:49
Чтобы найти рефлективно, надо по идее все скомпилировать, ибо могут быть кейсы с code gen

Akhmed
23.05.2017
14:40:23
не забывайте еще про принцип Лискова. Если делать расширяемую архитектуру то Pattern Matching не самый лучший попутчик
Благодаря тому что PM нарушает принцип Лискова в больших проектах при таком подходе не получится докидывать в виде отдельных бинарников плагины
придется вносить изменения в PM и заново все перекомпилировать, что далеко не всегда возможно

Pawel
23.05.2017
14:41:51
расширяемая архитектура и SOLID - я в это не верю) имхо сие есть ересь ООПшная)))

Akhmed
23.05.2017
14:42:34
В смысле? А по каким принципам реализуете архитектуру больших проектов?
Вообще как бы функциональное программирование не противоречит принципу Лискова

Admin
ERROR: S client not available

Pawel
23.05.2017
14:45:24
статические гарантии по дефолту - это намного лучше чем возможность избежать призрачного замедления компиляции имхо. А так конечно да, по таким. Но больше по гуманитарным причинам, чем техническим имхо

Akhmed
23.05.2017
14:46:14
у нас сейчас код который переиспользуется в трех проектах + часть этого кода переиспользуется на сервере
и если не соблюдать принципы SOLID то проект моментально превратится в хлам. Если думаете что F# и SOLID не софместимы то это не так
есть большое заблуждение что F# магическим образом сделает код лучше и говнокода не будет. Это не так. F# как и любой другой функциональный язык программирования потребует соблюдения принципов SOLID в больших проектах - или очень быстро проект похоронит разработчиков
при чем F# гораздо лучше подходит для соблюдения этих принципов
Interface Segregation - говорит о том что в идеале в одном интерфейсе должен быть только один метод. Собственно одна функция - один интерфейс
ну и по остальным то же самое


Pawel
23.05.2017
14:51:57
"Если думаете что F# и SOLID не софместимы то это не так" - не думаю. SOLID можно трактовать двояко. То, что Вы предлагаете, например, создаёт бОльшую неопределенность, поскольку снижает стат. гарантии. Что так же противоречит SOLID. Я к тому, что SOLID - это не спецификация, не тех. требованя, а прсто некоторые общие рекомендации
Хочу подчеркнуть - спор о SOLId ещё более абсурдный чем о монадах))

Akhmed
23.05.2017
14:53:55
Погодите. SOLID это не нечто абстрактное и недостежимое. Дядюшка Боб в своих книгах очень подробно и детально расписал про применение принципов SOLID на практике

Roman
23.05.2017
14:54:14

Akhmed
23.05.2017
14:55:08
в F# просто есть четкое деление данных и функций

Google

Pawel
23.05.2017
14:55:11
и вообще SOLID - это про ООП, DI и т.п. Дядюшка Боб - я его мягко говоря не уважаю и он точно не функциональщик. Фаулер, главный патриарх SOLID - определённо идиот

Evgeniy
23.05.2017
14:55:44
https://github.com/polytypic/blog/blob/master/posts/2014-08-18-solid.md
Про SOLID и ФП.

Pawel
23.05.2017
14:57:04
это не тот ли фин, который контрибъютит Hopac ?

Akhmed
23.05.2017
14:57:40
https://fsharpforfunandprofit.com/fppatterns/
Может и Скотт для вас идиот? Хотя бы его доклады послушайте

Evgeniy
23.05.2017
14:59:58
@ruzzke_mir @SherievAkhmed Ну, вы чего? :(

Pawel
23.05.2017
15:00:08
слушайте, я знаком. Нравится вам это или нет, мне без разницы. Тема глупая, обсуждать смысла не вижу

Akhmed
23.05.2017
15:01:45
Дядюшка Боб читал доклад про будущее языков программирования и он сам говорил о важности функционального программирования. Вы просто в силу того что не знаете то о чем говорите думаете что они убивают ФП. Это не так.
вот статья три года наза
http://blog.cleancoder.com/uncle-bob/2014/11/24/FPvsOO.html

Evgeniy
23.05.2017
15:03:00
@SherievAkhmed Справедливости ради, последние записи Боба про ненужность статической типизации расстраивают.

Igor
23.05.2017
15:04:09

Evgeniy
23.05.2017
15:04:15
Ух ты, такие стикеры я одобряю.

Friedrich
23.05.2017
15:04:26

Evgeniy
23.05.2017
15:04:29

Friedrich
23.05.2017
15:04:52