Roman
ты ведь шутишь, да?
нет, я пытаюсь разобраться. То, что в ТС есть утиная типизация, не значит, что в нем нет строгости
Фил Ранжин
мы говорим про разные строгости, да
Roman
ну строгость — это то, насколько компилятор заставляет тебя следовать правилам языка. Правила могут быть хорошие и современные, а могут быть древние или просто уебанские
Фил Ранжин
хорошее определение
Roman
Хотя одно от другого сложно отделить как следует
Фил Ранжин
без сарказма
Анна
Слабая статическая типизация - это типа C++. Когда ты можешь написать так, что компилятор тебе не только не поможет, но ещё и добъёт. Сильная - которую нельзя так просто сломать, и если система типов что-то обещает не допустить, значит в рантайме этого точно не случится
Igor
чё, тайпскрипт на помойку?
Однозначно ибо типы это главная проблема жс
Фил Ранжин
я кстати не находил прям вот классификации систем типов
Igor
аргумент, что он быстрее тайпчекера проверяет на нулл - чушь
Ну хз, у меня инкрементальные билды на работе по 2-3 минуты собираются (а при смене бранча по 5-6 минут). В итоге за день набегает 30 минут (а то и больше). А NPE бывает пару раз в неделю.
Анна
да, ещё ест ьтакая штука, что ни один ЯП нельзя назвыать на 100% сильно типизированным
Вопрос терминологии, которая действительно плавает (разные группы населения по-разному определяют для себя термины)
Фил Ранжин
или работы
Анна
http://starling.rinet.ru/~goga/tapl/tapl.pdf
Фил Ранжин
уже нашёл на русском)
Фил Ранжин
http://starling.rinet.ru/~goga/tapl/tapl.pdf
а, ну вот его и нашёл, спасибо)
Igor
только вот нулл поинтер на проде - большая проблема, чем минуты твоего ожидания
NPE это просто минимальная из всех возможных проблем. А вот если ты в логике ошибся и клиенту пришел счет на -100000$ вот это будет пиздец. Пока мы не начнем писать на теорем-пруверах в продакшен, одна надежда это тестировать все. Типы в C#/Kotlin/F# тебе не помогут.
Igor
Вот именно, NPE - очень маленькое подмножество реальных ошибок.
Фил Ранжин
Мне очень нравится идея - прошёл билд, значит приложение работает. Я понимаю, что это утопия, но мой поинт - эта утопия практичней других утопий. Тесты - часть этой идеи, причём самая уёбищнах и плохо работающая.
Roman
Слабая статическая типизация - это типа C++. Когда ты можешь написать так, что компилятор тебе не только не поможет, но ещё и добъёт. Сильная - которую нельзя так просто сломать, и если система типов что-то обещает не допустить, значит в рантайме этого точно не случится
хорошая попытка, но тут все равно неясно. Вот в жаваскрипте ты можешь сделать '5'+2 и получить '52', а можешь сделать '5'-2 и получить 3. Здравомыслящий человек понимает, что это таки хуйня, но никаких исключений не сыпется, ниче не происходит, отрабатывает штатно. И как тут понять, это слабость типизации или ебанутость правил?
Igor
Мне очень нравится идея - прошёл билд, значит приложение работает. Я понимаю, что это утопия, но мой поинт - эта утопия практичней других утопий. Тесты - часть этой идеи, причём самая уёбищнах и плохо работающая.
Не знаю, писать тесты в ФП - одно удовольствие. Ты одним property-based тестом можешь пробить столько кода, что ООП-васянам и не снилось с их моками и DI. А еще сверху немножко интеграционных на докере - все можно спать по ночам.
Roman
Я ща на работе на сишарпе пишу, но как только ты выносишь логику в чистый статический метод и только его покрываешь юнит тестами — смысла в жизни становится гораздо больше
Roman
И моки становятся нахуй не нужны
Roman
Но понятное дело, васяны эти так не делают, и да, те юнит тесты с моками можно сразу им в жопу боком засовывать
Igor
кстати проблема ООП васянов не в том, что это ООП, а в том, что они не отделяют ИО от логики
Да у них много проблем. А вербозность и хрупкость тестов в основном таки от дроча на объекты и “клин-архитектуру”.
Roman
ну, я тоже не так давно думал, что корень проблемы в объектах
Roman
тсс, не спойлери
Roman
это прелюдия к переходу на фшрап
Roman
то есть, ооп, конечно, для сегодняшних типичных тырпрайз задач безусловно не лучший выбор. Но проблемы, о которых ты говоришь, все-таки происходят не из ООП
Bonart
ООП конечно нестрого, но проблемы - они таки в головах
x
райдер прекрасен
Bonart
В ФП эти же головы будут писать так же криво
Bonart
Виновато станет ФП
Roman
Следовательно, разруха не в клозетах, а в головах!
Hog
это прелюдия к переходу на фшрап
а придёт к тебе в команду кто-нить с ооп головного мозга и начнёт всем пилить, что твой код - говно
Roman
ой, его тут и без меня за это ссаными тряпками отходють
Roman
мне удивительно повезло с командой
Hog
ну ок :)
Igor
Следовательно, разруха не в клозетах, а в головах!
Ну такое, можно подумать фп-шники все такие умные и не говнокодят. Имхо проблема что ООП-шники просто не знают альтернатив. Их всю жизнь с универа учили UML схемы объектов рисовать, они по другому просто не могут.
Bonart
Т.е. у кого голова светлая - и на ооп годно кодит и фп уважает когда ознакомится
Bonart
У меня в команде разраб сам додумался до классов типов не имея о них понятия вообще, включая сам термин
Igor
Нет, оно может спокойно пройти мимо, мы НЕ работаем мы в окружение “светлых голов”
Vladislav
@grishace @omgszer https://github.com/Mefgalm/Json2FSharpBack/pull/2 осиляторы fparsecа, проверьте правильно ли я фиксанул Владислав
Vladislav
как бы вроде да, но мало ли
Bonart
Светлых голов немного но они есть всегда
Vladislav
Вроде все ок
ой, забыл что ты тоже шаришь за него)
x
райдер прекрасен
@deexpp вот такой блокнот )
Vladislav
https://twitter.com/ericlippert/status/1108732137019068416
Vladislav
pizdec
x
https://twitter.com/ericlippert/status/1108732137019068416
да уж, любят они контент подвигать
x
но чтоб вот так
Hog
Гуглу можно, а им нет что ле? :)
Hog
+ member IsInteger: bool // not (HasFraction || HasExponent)
Hog
т.е. условие там надо перевернуть
Vladislav
Спс
Hog
(fun x -> if x.HasFraction then JFloat else JInt) ===> if x.IsInteger then ...
Hog
нутыпонил
Hog
но это я прочитал в доке фпарсека
Hog
так что пробуй :)
Vladislav
Я там долго втыкал в choice
Vladislav
И не понял его смысла
Vladislav
Так как валиться на первом все равно