Aleksandr
В теории, WPF может открывать какие-то интересные возможности для реактивного программирования, а на практике я хз как с этим дела обстоят
Roman
Если бы я захотел написать на винформах скажем морской бой. На F#. Как в двух словах мне к этому подойти? У меня в голове не укладывается разработка с использованием F и дизайн windows forms
А зачем пихать фшарп там где сишарп отлично справляется. Фшарп в бизнес логике хорош. Да и морской бой условный на wpf лучше. Там перформанс не нужен
Roman
А он правда перформансней?
Когда нужно работать на уровне winapi, он гораздо удобней.
Dr. Friedrich
потому что F# это фп для дотнетчиков, а не дотнет для фпшников
Очень хорошее определение, мне нравится. Сразу показывает сильные и слабые стороны языка.
Dr. Friedrich
Если бы я захотел написать на винформах скажем морской бой. На F#. Как в двух словах мне к этому подойти? У меня в голове не укладывается разработка с использованием F и дизайн windows forms
В fprog.ru как-то была хорошая статья про написание шашек на Haskell. Вроде тема не очень серьёзная, но автор показал хорошие подходы к разработке, так что польза от статьи была.
Roman
F# можно совать везде, где он в принципе пролезает, ничего плохого тут не вижу 🤷‍♂
Плохого нет, если есть желание можно и фшарп. У меня в проекте намешано. Хотя контролы и формы на сишарпе, потому что дизайнер визуал студии.
Dr. Friedrich
Ну да, про дизайнер ничо не говорю, его не завезли :(
Igor
когда же райдер сделают бесплатным?
Igor
вон, идеа и пайчарм давно уже
Igor
вон, идеа и пайчарм давно уже
А ещё есть куча др продуктов JB которые никогда не были бесплатными Александр
Артем
Да там стоимость месячной подписки помоему 14$, как бы не так уж и бьет по карману.
Doge
Можно без CLR.
Можно, но, как мне кажется, интероп сложнее будет делать. Потому что, насколько я понимаю, придется либо стирать типы, либо реализовывать hkt через какой-нибудь из хаков, что тоже не очень прикольно.
Doge
Через хак прикольно, если на уровне языка сделать. В пропозале предлагались прекрасные варианты кодирования HKT.
Ну с тем хаком, что я знаю (lightweight hkt с Inject/Project), возможно есть проблема, что лишний боксинг будет там, где можно было бы без него обойтись, но я в IL не проверял, могу и ошибаться.
Aleksandr
В скале они вроде через хак реализованы
Aleksandr
В JVM дженерики это вообще сахар
Aleksandr
Их все равно что нет
Aleksandr
В рантайме
Doge
В скале они вроде через хак реализованы
Не, насколько я понимаю, там честная система типов внутри, которая реализуется на jvm через стирание типов.
Aleksandr
Да, но это во время компиляции только
Aleksandr
А затирание это по сути апкаст в обжект
Aleksandr
В рантайме всё обжекты
Igor
В рантайме всё обжекты
Это как раз хорошо. Ибо есть кулстори - что как раз отсутвие стирания типов и загубило Scala.NET
Aleksandr
Это может и хорошо для hkt, но у дотнетовской системы типов своих преимуществ больше
Doge
Да, но это во время компиляции только
Да, в рантайме почти никаких дженериков нет, если только явно метаинформацию не передавать. Но происходящие в рантайме уже не настолько важно, т.к. в скале все равно к рефлексии отрицательно относятся
Doge
А оптимизации для примитивных типов можно через аннотацию specialized сделать
Aleksandr
Отсюда такая мудацкая сигнатура toArray() в Java, например
Doge
Отсюда такая мудацкая сигнатура toArray() в Java, например
В скале это решается через Manifest и TypeTag'и
Aleksandr
Хм, хорошо, я гляну
Doge
Хм, хорошо, я гляну
https://docs.scala-lang.org/overviews/reflection/typetags-manifests.html
Aleksandr
Спасибо
Vladislav
https://twitter.com/kot_2010/status/1088070793660112896?s=12
Aleksandr
Красиво
Igor
Блин, что у меня таких проблем не бывает 🤔
Andrew
Это очень неудобно
Vasily
Модель , конечно, натянута на уши по самое не балуй
Andrew
Ну у меня такое было "не в вакууме"
Dr. Friedrich
Это как раз хорошо. Ибо есть кулстори - что как раз отсутвие стирания типов и загубило Scala.NET
Ну это потому, что они сами себя загубили своими хаками и костылированием под VM без нормальной поддержки reified generics 🤷‍♂️
Vasily
Ну у меня такое было "не в вакууме"
Для меня это скорее признак плохого дизайна типов
サイトー
https://twitter.com/kot_2010/status/1088070793660112896?s=12
А линзы для этого нельзя соорудить?
Vladislav
Нет
Vladislav
Модель , конечно, натянута на уши по самое не балуй
Даже если 2 уровень обновления то уже выглядит неочень
Igor
Ну у меня такое было "не в вакууме"
И сколько уровне вложенности у тебя было?..
Igor
J. A. R. Kotlien
А линзы для этого нельзя соорудить?
А эта ризоновская штука решает такую проблему? https://github.com/Astrocoders/lenses-ppx
サイトー
А эта ризоновская штука решает такую проблему? https://github.com/Astrocoders/lenses-ppx
ну любые линзы решают (а это вроде линзы, хотя почему бы не показать пример со вложенностью мне непонятно, линзы то именно для этого) там в скаловском примере тоже либа для линз используется но в f# есть проблемы с реализацией такой либы
Ayrat
mutate record <@record.A.B.C.D@> newValue
サイトー
надо почитать про квотейшены, а то я чото слабо секу
Ayrat
Может даже можно в один засунуть
Vladislav
mutate record <@record.A.B.C.D@> newValue
https://github.com/eiriktsarpalis/QuotationCompiler эта шутка нужна тогда
Ayrat
Это ж квотейшн. <@record.A.B.C.D <- newValue@>
Vladislav
иначе чем квотейшены парсить
Ayrat
иначе чем квотейшены парсить
Нам их не надо евалуейтить
Vladislav
так а как обновление делать?
Ayrat
Нам только АСТ нужно для понимания чо изменять
Ayrat
так а как обновление делать?
Ну рефлексией собрать
Ayrat
Например
Ayrat
надо почитать про квотейшены, а то я чото слабо секу
Это просто возможность получить АСТ. Для всех выражений уже есть паттерны для рекурсивного матчинга
Vladislav
почему тогда такой либы нет
Vladislav
Ayrat
почему тогда такой либы нет
Хз, я тут недавно писал как на квотейшнах нулл пропашейгш написать изявый
Ayrat
match object with | NullTraverse <@a.b.c.d@> as x -> ...
Ayrat
Ну это вместо a?.b?.c?.d
Ayrat
Можно пихать сразу в аргумент функции
Ayrat
почему тогда такой либы нет
Можно для прикола написать, но рефлексия будет небыстрой
Ayrat
Можно посмотреть, есть ли у синтаксиса { A with B = x } Своё особое АСТ Тогда можно пересобрать из нашего квотейшна и заевалуейтить
Ayrat
Будет очень быстро
Dr. Friedrich
А линзы для этого нельзя соорудить?
Ну ващет можно на квотейшенах, пожалуй
Dr. Friedrich
Я не знаю, почему никому там в треде это не пришло в голову.
Dr. Friedrich
Можно для прикола написать, но рефлексия будет небыстрой
Кэшированием и кодегеном справить — и будет быстро.
Dr. Friedrich
Ну и плюс скалошники-то это же делают
J. A. R. Kotlien
Через квотейшны можно
В Fable они доступны?