Vasily
Там np полная задача
Ayrat
если чо
Vasily
В случае скалы
Ayrat
я кстати не читал про его алгоритм. знаю что он на бумаге должен быть проще, так как у него нет бектрекинга, он типы только в одну сторону пропагирует
Ayrat
мне казалось должно быть быстрее
Ayrat
при этом фшарп развивает HM но ограничивает его из-за сабтайпинга, который он не выводит вообще и просит выводить руками
Ayrat
короче, скала норм если не пользоваться фичами скалы
Vladislav
короче, скала норм если не пользоваться фичами скалы
Скала норм если пишешь как на котлине
Ayrat
я тут вчера говна поел на интеропе. Они ж клёвые, все типы свои объявили даже Double
Vladislav
Ayrat
то есть например есть апишечка из жаба либы CompletableStage<Optional<java.lang.Double>> (типа пагинируемый асинк, внутри опшанл дабл) а мне надо Future<Option<scala.Double>>
Ayrat
то есть даже Optional vs Option надо мапить друг в друга
Ayrat
вот это БОЛЬ
Ayrat
и при этом по умолчанию в скале нихуя нет для конвертации и интеропа
Ayrat
это вам не Сайм в общем
Ayrat
берегите его
Анна
тяжела и неказиста жизнь ирландского скалиста
Vasily
В Дублине потому и много пабов
Ayrat
Ну пишутся свои конверсии в два счета
Ну да. Ну да. Одну вот уже написали. Инт ту стринг имплиситно
Doge
Ну да. Ну да. Одну вот уже написали. Инт ту стринг имплиситно
Там смешнее, если что, там any2stringadd или что-то в этом духе
Doge
Чтобы можно было делать "MyObject is " + myObject + "!", до того как было интерполирование строк. Это старое скаловское легаси, вроде бы в дотти выпилят.
Roman
type ToSome = ToSome with static member ($) (ToSome, (i: 'a)) : Option<'a> = i |> Some type ToNone = ToNone with static member ($) (ToNone, (_: 'a)) : Option<'a> = None type FromSome = FromSome with static member ($) (FromSome, (i: Option<'a>)) : 'a = i |> value штош такое то а
Roman
Но зачем?
вот и я не знаю
Roman
все измазано этим фшарп плас
Roman
процентов 40% кода это так или иначе какие-то Utils и Misc
Vasily
Ну шо поделать
Nikolay
Использовал кто Roslyn? Как проект открыть? 🤔 Пытаюсь через MSBuildWorkspace, он сдувается, пишет такое: {[Сбой] Сбой Msbuild при обработке файла "C:\Users\Desktop\NZMWeb\nzm\NZMWeb.Data\NZMWeb.Data.csproj" с сообщением: The tools version "Current" is unrecognized. Available tools versions are "14.0", "2.0", "3.5", "4.0". C:\Users\Desktop\NZMWeb\nzm\NZMWeb.Data\NZMWeb.Data.csproj}
Roman
да шо делать, чистить вилкой это
Vasily
Когда много сильно дохуя умных
Vasily
Все вот так вот
Roman
когда настроение "ебаный художник"
Фил Ранжин
статья зашла. Похоже, про собесы моржно всё что угодно писать - схавают
Roman
статья зашла. Похоже, про собесы моржно всё что угодно писать - схавают
люди все, что угодно схавают. Особенно, если в статье кого-то поливать говном. Особенно, если статья дает читателю чувство важности и превосходства
Фил Ранжин
нет. У меня была статья, которая говорила что предметная область и безнес говно, а разрабы центр вселенной, и её захейтили
Фил Ранжин
при этом написал я её так же хорошо, как и остальные
Doge
вот и я не знаю
А оно при этом используется хоть где-то?
Roman
А оно при этом используется хоть где-то?
хз, трудно сказать. Пушто много из этого говна делается для инлайн функций, чтоб можно было всякую срань из фшарп плюс юзать.
Doge
мопед-то не мой
Ну мотивация какая-то наверное была
Roman
я только наемный работник, который пришел в проект позавчера почти
Roman
Да неопытность просто
Roman
Жалуются на то, что в фшарп слабая система типов, но при этом даже то, что есть используют не на полную мощность и через жопу зачастую
Doge
Просто если хочется хаскеля, то не больно его можно сделать либо на хаскеле, либо умеренно больно на скале. Всё. Везде в других местах - это ужасающе получается, хак на хаке на хаке.
Anatoly
это, кстати, хорошее техническое демо потенциальным бизнес-заказчикам
Roman
поэтому потихоньку буду выпиливать это по мере возможности
Roman
хорошо хоть, чувак действительно готов слушать другую точку зрения
Doge
Жалуются на то, что в фшарп слабая система типов, но при этом даже то, что есть используют не на полную мощность и через жопу зачастую
Ну в F# она на самом деле слабоватая, но попытки на ней эмулировать что-то сложное приводят к очень так себе результатам.
Roman
Ну в F# она на самом деле слабоватая, но попытки на ней эмулировать что-то сложное приводят к очень так себе результатам.
какой смысл на нее жаловаться, если у тебя весь код забит Result<'a, string>? А там где ошибки описаны с помощью DU, каждый кейс выглядит вот так: MyErrorName of msg:string * source: string
Roman
будто если б был ХКТ, то такое говно улетучилось само собой
Vasily
Проблема в том, что в большинстве случаев система типов аля хаскель не даёт ощутимого преимущества
Vasily
Т.е. профита от нее мало
Roman
а тяжесть тестирования вполне ощутимо сказывается, в отличие от нехватки GADT всяких)
Doge
тестировать такой код это пиздец
Ну и тут стандратная разница - если инфраструтурные ошибки, то лучше их тогда исключением и в закат. Если бизнесовые, то да, Either + DU
Roman
я это в первый же день сказал
Roman
говорю, не нужен вам стектрейс для ошибок валидации или нарушения бизнес правил
Roman
но нет
Roman
исключения харам
Doge
Проблема в том, что в большинстве случаев система типов аля хаскель не даёт ощутимого преимущества
Смотря какой кусок: Тайпклассы + дерайвинг (включая кастомный) - это дикий буст продуктивности в куче очень часто встречающихся мест без всяких потерь в производительности. ХКТ - требуется на данный момент, если хочешь более-менее разумный контроль эффектов иметь. Плюс всякие клевые трюки типа Higher Kinded Data, которые тоже иногда могут сотни и тысячи строк бойлерплейта сэкономить.
Roman
Ну это попытки натянуть слона на трепетную лань
тем не менее чуваку надо отдать должное — он не только разработкой занимается, у него там дохуя других дел на повестке
Doge
исключения харам
Никогда этого не понимал. Может ткнуть таких людей носом в то, что в хаскеле исключения юзаются повсюду?
Doge
Если уж ФП хардкор и т.п.
Roman
не, там мотивация немного другая. Хотя тоже очень странная
Roman
типа "ща все однообразно. Ошибка всплывает наверх и все ок"
Roman
мои попытки объяснить, что с исключениями все будет так же однообразно, только еще и вменяемый стектрейс нахаляву, да еще и код будет почище, пока не увенчались успехом
Roman
но я на полпути уже, что в общем неплохо
Doge
типа "ща все однообразно. Ошибка всплывает наверх и все ок"
Ну а так бизнесовые ошибки всплывают как раньше, инфраструктурное ловится одним хэндлером выше. Но тут вопрос, чтобы функция отражала, что она может что-то бросить. Чаще всего инфраструктурные ошибки идут около всякого IO, так что можно считать, что любое место, где есть async - может бросить исключение. Будет как хаскель, только вместо IO - async