Doge
нормальные по сравнению с чем?
По сравнению с другими продуктами у JetBrains. То есть раст плагин пишет пара человек (или даже один) и он уже на порядок лучше подсказывает и даёт навигацию, чем пайчарм, которому куча лет.
Shub
где там иде к хаскелю? когда завезут?
Roman
а как быть продуктивным в скодобазе со скриншота Айрата представляешь?
А при чем тут его скриншоты? Если скотобаза написана ебланами, то тут ничего не поможет, не вижу смысла об этом говорить в сотый раз. Если же у команды голова на месте и руки прямые, то стат. типизация и мощная система типов позволяют избавиться от легионов тестов и необходимости в защитном погромировании
Doge
Потому что llvm не имеет ничего общего с системой типов раста, если что.
Doge
где там иде к хаскелю? когда завезут?
Плагин для идеи неофициальный более-менее пашет, но он совсем кустарный, конечно. Он как раз из GHCI инфу получает, работает в целом терпимо.
Shub
А при чем тут его скриншоты? Если скотобаза написана ебланами, то тут ничего не поможет, не вижу смысла об этом говорить в сотый раз. Если же у команды голова на месте и руки прямые, то стат. типизация и мощная система типов позволяют избавиться от легионов тестов и необходимости в защитном погромировании
этот аргумент вполне себе работает в обратную сторону: нормальная команда пишет нормальный код на любом языке, даже на жаваскрипте. кстати, количество тестов в динамической типизации сильно преувеличено, почему-то сторонники статики считают, что там обязательно есть тесты, тестирующие типы аргументов.
AlexB
хз, я че-то скептически настроен к hashmap driven development. раньше нормально было, щас че-то захотелось больше
У меня, увы, опыта реальных проектов на кложуре или подобном нет, так что точного мнения тоже нет. Clojure.Spec опять же есть.
Shub
Плагин для идеи неофициальный более-менее пашет, но он совсем кустарный, конечно. Он как раз из GHCI инфу получает, работает в целом терпимо.
то есть пайчарм - это "нет иде", а "сносный плагин для хаскеля" - это эргономика и UX? очень интересно получается
Roman
@eglyph Элементарный сценарий: ты решил добавить/поменять входные аргументы в существующую функцию, которая используется по всему проекту. Как ты в динамическом языке убедишься, что все использования теперь правильно работают с аргументами?
Doge
то есть пайчарм - это "нет иде", а "сносный плагин для хаскеля" - это эргономика и UX? очень интересно получается
Речь про то, что "плагин для хаскеля" написанный сплошными костылями, одним чуваком в свободное время, работает на порядок лучше в плане навигации, поиска и рефакторинга, чем пайчарм, который пишет команда чёрт знает сколько лет
Shub
У меня, увы, опыта реальных проектов на кложуре или подобном нет, так что точного мнения тоже нет. Clojure.Spec опять же есть.
не, дело не в типизации. дело в том, что моделирование на словарях и методах не скейлится выше определенного уровня.
Крылатый
Всё хурма, только доказательное программирование избавит от ошибок. inb4: TrustMe
Shub
только плз не надо про "скомпилировалось - значит работает"
Roman
точно так же, как и в статике: тестами. только тестить мы будем не типы аргументов.
лол. В статике компилятор ошибки кидает, тестов не надо
Крылатый
точно так же, как и в статике: тестами. только тестить мы будем не типы аргументов.
Ну почему. Вот в плюсах сборка бы упала. А в некомпилируемой динамике можно что-то прошляпать и обосраться на проде.
Roman
ты хотя бы автоматом видишь все места использования
Крылатый
/me попадал на такое
Doge
только плз не надо про "скомпилировалось - значит работает"
Если у тебя нет рефлексии, то в данном случае ты можешь это проверить без тестов.
Roman
у тебя нет тестов?
есть, но они проверяют логику, а не типы
Shub
Ну почему. Вот в плюсах сборка бы упала. А в некомпилируемой динамике можно что-то прошляпать и обосраться на проде.
знаешь, в чем прикол всех багов из прода в программах на статических языках? они все прошли через компилятор
Doge
знаешь, в чем прикол всех багов из прода в программах на статических языках? они все прошли через компилятор
Понятное дело, что в обычном языке ты компилятором всех ошибок не отловишь, но значительное число простых ошибок ты поймаешь автоматом.
Shub
есть, но они проверяют логику, а не типы
точно так же и в динамике - тесты проверяют логику. тебе придется очень сильно потрудиться, чтобы придумать случай, где изменение типа аргумента в динамике не приведет к падению теста, покрывающего логику
Крылатый
Очевидно, что общего решения на все случаи нет.
Shub
Очевидно, что общего решения на все случаи нет.
ну видишь, некоторым неочевидно
Крылатый
Очевидно, что нужно пользоваться по возможности как можно большим числом инструментов не допустить факапа на бою.
Roman
точно так же и в динамике - тесты проверяют логику. тебе придется очень сильно потрудиться, чтобы придумать случай, где изменение типа аргумента в динамике не приведет к падению теста, покрывающего логику
бля, ну ты угараешь что ли? Тебе надо убедиться, что в обновленную функцию передаются правильные аргументы. Как ты сделаешь это в динамике?
Sergey
экономия времени как минимум
Крылатый
И конопляция, и типы, и тесты, и вот доказательное программирование — всё это элементы. А не каждый из них самостоятельная серебряная пуля.
Shub
Очевидно, что нужно пользоваться по возможности как можно большим числом инструментов не допустить факапа на бою.
никто не запрещает пользоваться всеми инструментами. навалом инструментов, проверяющих type soundness в динамике, причем там они это делают по мере набора сорсов, а не отдельным шагом
Крылатый
ну где ты раньше был-то?
Тут сидел, чай пил.
Крылатый
Температуру мерял.
Doge
точно так же и в динамике - тесты проверяют логику. тебе придется очень сильно потрудиться, чтобы придумать случай, где изменение типа аргумента в динамике не приведет к падению теста, покрывающего логику
Так тут же та же история, что и c иерархией тестов. Тебе важно поймать наибольшее число ошибок наиболее дешевыми тестами. Компилятор - это по сути ещё один слой тестов под юнит тестами, который ловит достаточное число ошибок автоматом за небольшую цену.
Roman
никак не делаю, это дефолтное поведение - падать при нарушении type soundness
т.е. в статике это упадет на стадии компиляции, а в динамике в рантайме. И ты хочешь мне сказать, что бонусов от статики нет? И что команда напишет "так же хорошо"?
Shub
потому что соответствие статической системе типов никак не равно корректности поведения
Roman
детский сад ей богу
Doge
как показывает исследование выше, он практически ничего не ловит
Там сомнительное исследование в плане методологии. Сравнивать качество кода по коммитам с текстом "баг" - это так себе
Shub
т.е. в статике это упадет на стадии компиляции, а в динамике в рантайме. И ты хочешь мне сказать, что бонусов от статики нет? И что команда напишет "так же хорошо"?
ну если ты не тестируешь код - то да, упадет в рантайме на проде. а в практических условиях он упадет на юнит-тестах, которые, внезапно, ты и в статике напишешь
Roman
статика не решает всех проблем на свете, но точно решает часть из них. Важную часть
Roman
ну если ты не тестируешь код - то да, упадет в рантайме на проде. а в практических условиях он упадет на юнит-тестах, которые, внезапно, ты и в статике напишешь
Да не нужны тут в статике будут тесты на это. И опять же, как ты в динамике отловишь все места использования, чтобы их покрыть тестами?
Shub
это отдельный вопрос
очень трудно дискутировать, когда люди двигают goal posts
Shub
Да не нужны тут в статике будут тесты на это. И опять же, как ты в динамике отловишь все места использования, чтобы их покрыть тестами?
на что "на это"? никто не пишет тесты на проверку типов аргументов в динамике, не понимаю откуда вы это взяли
Roman
ай в пизду
Roman
ты как-то напрочь глух к тому, что я говорю
Shub
ага, ну а ты конечно образец восприимчивости
Крылатый
Но у конопляции и типов есть плюс в том, что они робят автоматом, а тесты и доказательства нужно писать руками, хотя хотелось бы так же генерировать автоматом.
Doge
на что "на это"? никто не пишет тесты на проверку типов аргументов в динамике, не понимаю откуда вы это взяли
Речь тут про другое. Речь про то, как в динамике надежно найти все вызовы данного метода.
Doge
Вопрос, насколько я понял, был к этому
Анна
Ооо static vs dynamic срач,ололо
Shub
Речь тут про другое. Речь про то, как в динамике надежно найти все вызовы данного метода.
точно так же, как и в любой мейнстрим статике. напомню, что у нас есть такие штуки как полиморфизм и позднее связывание
Shub
но как-то находим же?
AlexB
не, дело не в типизации. дело в том, что моделирование на словарях и методах не скейлится выше определенного уровня.
не знаю. отринуть все надстройки и оперировать данными без всякой мишуры кажется очень привлекательным после многих лет кровавого ооп 😅
Крылатый
Вообще, ИМХО, пруфы должны заметить тесты. И встроить это в коноплятор или «линтер» в случае с динамикой.
Shub
Вопрос, насколько я понял, был к этому
вопрос изначально был про эргономику и UX, но как-то плавно перетек
Крылатый
Написал код @ Коноплятор сказал, что ты вот тут обосрался с логикой @ Пошёл исправлять
Крылатый
(Следующим этапом вообще написание кода без человека)
Shub
Написал код @ Коноплятор сказал, что ты вот тут обосрался с логикой @ Пошёл исправлять
компилятор про логику ничего не скажет вообще-то. ты можешь заменить целые на плавающую точку и весело ловить ошибки округления в проде, компилятор будет нем и глух
Shub
Не знаю, у меня нет рефлексии и позднего связывания.
третий раз "у меня". я в принципе ничего не имею против твоего предпочтения писать на статике
Крылатый
Пусть автопруфит написанный говнокод.
Крылатый
Типа, этапы: синтаксис -> типы -> логика
Крылатый
/me хуйню несёт, небось
Shub
ну было бы очень неплохо, да. тут обещали завезти контракты в сишарп, но что-то не сложилось
Ilya
Сразу после GADT завезут.
Shub
не знаю. отринуть все надстройки и оперировать данными без всякой мишуры кажется очень привлекательным после многих лет кровавого ооп 😅
ну это работает до определенного этапа, но рано или поздно хочется хотя бы структур и возможности инкапсулировать логику работы, потому что дисциплинарные меры трудно энфорсить.
Shub
в лиспах такая возможность есть, в кложе не очень.
Hog