Size: a a a

Clojure — русскоговорящее сообщество

2020 May 09

PP

Pavel Peganov in Clojure — русскоговорящее сообщество
Sergey Trofimov
потому она и «не зашла» — начинаешь расставлять аннотации в одном месте, заканчиваешь расстановкой аннотаций по всему коду, включая аннотации для функций из сторонних библиотек
Это было к утверждению "Есть алгоритмы автоматического вывода типов на основе использования, но это доступно только в статически-типизированных языках)"
Что core.typed не хватает постепенной (gradual) типизации уже скорее ортогональная проблема 🤔 Он существовал же. И там какой-то тупенький вывод, но был.
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну, я не рассматриваю вариант, когда компилятор ругается на возможную ошибку в коде, а программист её планово игнорирует
я исхожу из того, что программист стремится к тому, что его код без замечаний 😊
Если речь про тайпскрипт, то я описал пример, когда мы хотим вызвать типизированную функцию с аргументом неизвестного типа (any). Тайпскрипт попросит написать unsafe cast или ещё что-то, но не втихую сделать этот вызов
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Но вообще, по моим собственным наблюдениям, типы все равно начинают везде просачиваться)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Если речь про тайпскрипт, то я описал пример, когда мы хотим вызвать типизированную функцию с аргументом неизвестного типа (any). Тайпскрипт попросит написать unsafe cast или ещё что-то, но не втихую сделать этот вызов
ну написал я unsafe cast
и ошибка каста случится в рантайме
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну написал я unsafe cast
и ошибка каста случится в рантайме
Да, но в коде явно видно, где она могла произойти
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Кстати в тайпскрипте это будет не ошибка каста, потому что в рантайме там ничего не будет проверяться, это чисто указание для компилятора)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну написал я unsafe cast
и ошибка каста случится в рантайме
это не совсем то, чего добиваются сторонники статической типизации — выявлять все ошибки на стадии компиляции
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Кстати в тайпскрипте это будет не ошибка каста, потому что в рантайме там ничего не будет проверяться, это чисто указание для компилятора)
ну хорошо, случится жсный wtf 😊
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
В C# по идее это должно нормально отработать
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Да, но в коде явно видно, где она могла произойти
да, когда ты сложил строки вместо чисел, и результат уехал в другое место, это будет очень явно видно 😊
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
да, когда ты сложил строки вместо чисел, и результат уехал в другое место, это будет очень явно видно 😊
Хотя бы поиском по этим кастам можно найти опасные места)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Мне нравятся типы как в питоне
источник

MA

Mike Ananev in Clojure — русскоговорящее сообщество
Рич сделал акцент, что ключевой необходимостью для программиста является  Ability to reason about program. Это важнее всего.
Статические типы никак не упрощают возможность анализировать работу большой системы в рантайме. Если типы мутабельны, то  мы получаем размазанный стейт  и все эти игры с типами фигня, по отношению к тому, что программист должен загрузить всю кодовую базу в голову и представить как оно будет работать в многопоточной среде.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
для меня в кложе наличие репла, интегрированного с редактором, перевешивает плюсы статической типизации
я могу любой код изучить с нужных точек зрения, написать нужную реализацию и быть уверенным, как она работает
наличие аннотаций обычно не даёт достаточно информации о поведении сторонней функции в разных условиях
источник

MA

Mike Ananev in Clojure — русскоговорящее сообщество
Особенно, если надо внести изменения в большую систему. Тут надо все в голове держать, какой тип воткнуть, как это повлияет на стейт. В кложе с этим проще прям  разы
источник

MA

Mike Ananev in Clojure — русскоговорящее сообщество
я уже вчера приводил на митапе пример с дорогой
источник

MA

Mike Ananev in Clojure — русскоговорящее сообщество
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
кстати, мне интересно упоминание php версии выше седьмой
у меня к php претензия была к лёгкому получению несогласованного кода программы, когда на сервере можно поменять один из ста файликов и всё нахрен сломать
они этот как-то решили своей типизацией?
источник

MA

Mike Ananev in Clojure — русскоговорящее сообщество
типы и тесты это отбойник, забор, который не дает свернуть с дороги
источник

MA

Mike Ananev in Clojure — русскоговорящее сообщество
но никто не ездит по дороге так, что врубается на каждом метре в отбойник и благодарит типы за то, что они не дали ошибиться
источник