@Fsharp_chat

Страница 157 из 772
Evgeniy
23.05.2017
15:09:28
На этом и закончим, пожалуй.

Akhmed
23.05.2017
15:11:36
Точнее не пропогандируют а в отличае от большинства они не делят на чистое ООП и ФП. Такое деление только на низком уровне есть.

Вообщем еще раз извиняюсь

Pawel
23.05.2017
15:18:26
== Вы просто в силу того что не знаете то о чем говорите думаете что они убивают ФП на всякий случай я ничего подобного не говорил. И чтобы раставить точки над ё - право называть идиотами кого бы то ни было столь же не зыблемо, как и ваше право кого бы то ни было уважать. Тут конечно вопрос в аргументации, но я не думаю что такая дисскуссия будет здесь уместной. Просто каждый отсанется при своём мнение а желающий сами проанализируют является ли Фаулер идиотом или великим гуру как его позиционируют

Google
Roman
23.05.2017
15:18:54
тяжелый сегодня день какой-то

Pavel
23.05.2017
15:24:19
не конструктивненько, давайте лучше про монады

Evgeniy
23.05.2017
15:24:28
Давайте лучше код писать. :)

Pavel
23.05.2017
15:24:54
уже вечер, отдыхать тоже нужно когда-то :)

Летучая
23.05.2017
15:26:02
Окай, код для петов писать

Akhmed
23.05.2017
15:26:54
https://www.youtube.com/watch?v=7Zlp9rKHGD4

Помните задачу про температуру ? Можно на сайте замутить сборник таких задач с предложением решений и голосовалкой за лучшее решение.

Evgeniy
23.05.2017
15:56:40
@Mblkolo Пожалуйте. :)

Роман
23.05.2017
16:00:14
Я вкатился вот с каким волнующим меня вопросом: кто-нибудь ощутил профит от F# ?

Vasily
23.05.2017
16:00:59
В чем профит должен выражаться

?

Роман
23.05.2017
16:01:22
это не спор о том, какой язык лучше, а вопрос о том, где F# полезнее для разработчик C#. Исхожу из того что универсальных языков нет.

Vasily
23.05.2017
16:01:48
Расширяет арсенал навыков, позволяет писать более чистый код, имхо

Google
Роман
23.05.2017
16:03:22
это абстрактно. я поизучал интерактивные примеры на http://fsharp.org/learn.html Погуглил что-то типа "F# на практики", но пока не понял где я это смогу использовать.

С ходу профиты могу назвать такие: проще код, меньше шансов ошибиться.

слышал что C# многословаен по сравнению с F#

Evgeniy
23.05.2017
16:07:07
@Mblkolo Использовать можно для тех же задач, что и C#. Но нужно учитывать, что могут разные инструменты использоваться, или например, в некоторых местах поддержка F# не такая крутая как у C#.

Роман
23.05.2017
16:07:47
такая мысль: Я могу взять свою лабиринт на сокетах, переписать на F# и понять что было лучше, а что хуже. А могу спросить здесь, где кто-нибудь полюбому уже проходил такой путь :)

Evgeniy
23.05.2017
16:16:22
@Mblkolo Мы можем быть немного предвзяты. :) Лучше самому попробовать. Просто ответ на твой вопрос довольно большой и сложный. Обычно упоминают самое простое: меньше кода, почти нет проблем с null, удобно описывать предметную область в типах, сложно испортить хорошо написанный код.

Много всего, и у всех разный опыт. :)

Роман
23.05.2017
16:18:02
Ну а может у кого-то есть истории успеха, типа "переписал/написал на F# и так хорошо получилось", в идеале с ссылкой на репу ?

Friedrich
23.05.2017
16:25:38
Я вкатился вот с каким волнующим меня вопросом: кто-нибудь ощутил профит от F# ?
Ну, я у себя в коде использовал units of measure и поймал несколько неприятных багов в физической симуляции.

Любой инструмент, который думает за меня, и позволяет такие проблемы выловить — хороший.

Roman
23.05.2017
16:34:34
Оба языка для общих задач, с# довольно мощный сам по себе, так что сходу не увидеть плюсов, кроме как в краткости синтаксиса. В целом язык подталкивает к более корректному коду, даже если писать в ООП стиле, например заставляет использовать интерфейсы, а не конкретные реализации. Например type ILogger = abstract member Log: 't -> unit type LoggerClass() interface ILogger// не помню синтаксис имплементации интерфейса member Log s -> printfn "%A" let logger = LoggerClass() logger.Log(1) // не существует т.к. Надо привести к интерфейсу ILogger, но обычно явно никто не приводит и используют let log (logger:ILogger) obj = logger.Log obj

Сразу не поймёшь, почему такое "неудобство" это хорошо, но когда приучаешься программировать на интерфейсах, то понимаешь, что избежал кучи ошибок

И это только один из многих плюсов

alix
23.05.2017
16:36:30
слышал что C# многословаен по сравнению с F#
зато не ломаешь себе голову всякими <|> <%>

и прочими радостями

я за многословность в этом контексте

Roman
23.05.2017
16:36:48
зато не ломаешь себе голову всякими <|> <%>
обычно все эти <|> описаны сверху модуля, и сильно сокращают код. А вот в API библиотек их уже стараются не вставлять, дублируют computation expression'ами

Google
Igor
23.05.2017
16:43:38
Кто-нибудь тестил новый Xamarin Live Player? Что-то он с F# отказывается работать, только C#.

Nikolay
23.05.2017
16:52:56
У кого-нибудь был опыт разработки под Unity на F#?

Igor
23.05.2017
16:54:02
У кого-нибудь был опыт разработки под Unity на F#?
Я вроде узнавал в свое время, он его не поддерживает.

Nikolay
23.05.2017
16:55:10
Я вроде узнавал в свое время, он его не поддерживает.
Ну вообще через какие-то костыли сделать можно

Хотя официальной поддержки, конечно же, нет

Anton
23.05.2017
17:17:35
вовсе нет. достаточно рефлективно найти всех потомков класса и проанализировать проверку их в switch
вы предлагаете делать в рантайме компиль тайм чек с помощью рефлекшена? Звучит странно. А можно узнать идею как вы делаете в Roslyn это?

Тему с DU обсудили вроде. Вот мне еще понравилось, что замыкания в Fsharp сериализуются. Это например позволило мне на одной из работ сделать весьма интересную вещь. Через компутейшн експрешшн можно описать функцию с тербованиями к среде выполнения типа колчисетво памяти свободной, нагрузка на cpu, загруженный в память большой датасет. Тоесть функция исполняется и как только у нее есть требование дальше исполняться с определенным условием, она прерывается и сообщает рантайму требование. Рантайм находит подходящую ноду в кластере, сериализует замыкание и передает ее в рантайм другой ноды.

До этого все было описано с помощью стандартных паттернов распределенных приложений и это был геморой.

Прадва сейчас есть акка нет и орлеанс, так что немного уже не в кассу. Хотя теже акторы можно использовать как рантайм для вышеописанной системы.

Roman
23.05.2017
17:26:48
Roman
23.05.2017
17:27:00
это конечно, не unity

Nikolay
23.05.2017
17:27:11
Это 2D :)

Roman
23.05.2017
17:27:20
нуок

Evgeniy
23.05.2017
17:27:32
@Dolfik https://developer.xamarin.com/guides/cross-platform/urho/fsharp-and-urhosharp/

Roman
23.05.2017
17:27:43
кстати, на monogame fsharp отлично ложится

Evgeniy
23.05.2017
17:30:29
@fvnever --warnaserror:25

Не позволяет компилировать incomplete pattern matches.

@azazeo Где взял стикеры с Ленойдроид? :)

Google
Ivan
23.05.2017
17:55:55
В споре о SRP и SOLID + plugins (расширяемая архитектура), где можно реально увидеть примениние Reader вместо DI на большом комлексном разрешении зависимостей? Или не получится без Хаскель?

Igor
23.05.2017
18:14:25
В споре о SRP и SOLID + plugins (расширяемая архитектура), где можно реально увидеть примениние Reader вместо DI на большом комлексном разрешении зависимостей? Или не получится без Хаскель?
> примениние Reader вместо DI Это первый шаг. На втором, ты понимаешь что нужно Dependency Rejection, а не DI ? Я реально вташил Reader в уже написанный проект и смотрел как он размазывается по иерархие вызовов. (прав был Эрик Майер, что засунув один раз монаду - она расползется по всей программе) В итоге выкинул все на фиг и переписываю на pure domain.

Pawel
23.05.2017
18:16:30
вы предлагаете делать в рантайме компиль тайм чек с помощью рефлекшена? Звучит странно. А можно узнать идею как вы делаете в Roslyn это?
Нет. Тут речь о проверке кода с помощью стат. анализатора Roslyn в виде расширения для VS2017 либо standalone. Я не предлагаю, лично я для таких целей использовал бы FCS. вот выяснил сегодня что там, где я работаю, его применяют для анализа деструтуризации типов-сумм в теле операторов switch в C# коде.

Pawel
23.05.2017
18:18:06
конечно, в райдере же например

для плагинов

была статья автора ionide где он это описывал

ну и вообще для кодогенерации динамической

http://kcieslak.io/Dynamically-extending-F-applications

Admin
ERROR: S client not available

Roman
23.05.2017
18:23:41
Блин, такая печаль. Используешь AppSettingsTypeProvider, а его ConnectionStrings нельзя использовать с SQLProvider =/

постоянно натыкаюсь на это и постоянно расстраиваюсь

Ivan
23.05.2017
18:25:26
> примениние Reader вместо DI Это первый шаг. На втором, ты понимаешь что нужно Dependency Rejection, а не DI ? Я реально вташил Reader в уже написанный проект и смотрел как он размазывается по иерархие вызовов. (прав был Эрик Майер, что засунув один раз монаду - она расползется по всей программе) В итоге выкинул все на фиг и переписываю на pure domain.
Смотрел про Dependency Rejection. Идея для меня слилась в вынесении зависимостей максимально вверх. Так это и так понятно в функционалке. А вот как это делать на микро уровне. Пример. Есть набор контрактов в десяти билиотеках. Их сериализатором пропихивают в очередь MQ. MQ то же не один. Сериализаторов несколько. Опора идет на типы объектов. Меняется топология. Ее надо унести в настройки, поскольку система дышит. Минимально надо реализацию Convertible, Serializable, Routable трейтов на каждом объекте, как вижу сейчас. Надо эту реализацию конфигурировать. Вот и не знаю как впихать более менее в управляемом виде. Знаю как с трейтами в Scala и Хаскеле. А как без них - просто уперся

Ivan
23.05.2017
18:33:42
А это сервер, в кластере. С микросервисами. Здоровый (размер). Самое то для функционалки. И народ не против. Но как опыта не хватает, что ли.

Конкретно в F#

Pawel
23.05.2017
18:36:24
Конкретно в F#
в F# ad-hock полиморфизма нет. и видимо никогда не будет

Ivan
23.05.2017
18:38:42
Вся команда .NET. На C# получается уже непотребно. На F# лучше, но как без рук плавать...

Google
Evgeniy
23.05.2017
18:38:48
@ruzzke_mir Не совсем корректно. Ad hoc полиморфизм есть, нету трейтов/тайпклассов.

Ivan
23.05.2017
18:39:21
Я тут по этому поводу уже шумел. Их ДЕЙСТВИТЕЛЬНО не хватает.

Ivan
23.05.2017
18:40:33
Для Reader опять же не хватает монадных трансформеров

Roman
23.05.2017
18:40:52
Для Reader опять же не хватает монадных трансформеров
https://tech.jet.com/blog/2016/06-16-inversion-control-f/ посмотрите тут, у ребят тоже микросервисная архитектура

Igor
23.05.2017
18:41:05
@ruzzke_mir Не совсем корректно. Ad hoc полиморфизм есть, нету трейтов/тайпклассов.
Как минимум обсуждения не прекращаются: https://github.com/fsharp/fslang-suggestions/issues/243#issuecomment-303387800

Ivan
23.05.2017
18:41:27
Получается какой то недо функционал, с кучей интерфейсо и их размазанной реализацией ?

Ivan
23.05.2017
18:42:48
Anton
23.05.2017
18:43:09
Посмотри на MBrace
Мбрейс я смотрел.

Ivan
23.05.2017
18:43:57
Теоретически, при равных рефах, мжно поробовать кинуть асинки

Anton
23.05.2017
18:44:29
Использовать Reader для DI по мне так сомнительная идея. Я сам как то думал на эту тему и пришел к выводу что fp это чистые функции и надо просто описать ast как DU далее все это описываем через копутейшн експрешшенс далее функции генерят Ast который уже попадает в интерпретатор.

Pawel
23.05.2017
18:44:56
@ruzzke_mir Не совсем корректно. Ad hoc полиморфизм есть, нету трейтов/тайпклассов.
то, что есть, выглядит примерно так let inline updateTable(table: ^T when ^T : (member Update : SqlConnection option*SqlTransaction option*int option -> int)) = (^T : (member Update : SqlConnection option*SqlTransaction option*int option-> int) (table, None, None, None)) И имеет много досадных ограничений

Evgeniy
23.05.2017
18:45:19
@ruzzke_mir Да, я знаю.

Ivan
23.05.2017
18:45:34
Опять же натягиваем DSL без макросов - как то не айс

Evgeniy
23.05.2017
18:46:01
Надо радоваться, что без макросов. :)

Anton
23.05.2017
18:46:49
Старое описалово мое подхода тут. Но там уже в ретроспективе я понял что слишком нагородил, ну и устарело как всегда http://hodzanassredin.github.io/2016/02/12/ddd_with_dsl_monad.html

Ivan
23.05.2017
18:46:59
Вот тут я совсем не согласен. Чуть чуть изменить тайп провайдеры - и макросы есть.

Evgeniy
23.05.2017
18:47:23
Вам хочется поддерживать код с макросами?

Ivan
23.05.2017
18:49:53
А вы пробовали? Я поддерживал, с гигиеной. В команде. С DSL. Кода стало в 5 раз меньше. А страх -это естественно. Зато - copy-paste в замену. И на 34000 файлах поддержка.

И это небольшой проект. Так и до 150000 доходило. И в каждом копи -пейст. Команду надо, извините, дрессировать в хорошем смысле ?

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