Size: a a a

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

2019 June 10

n

nvkv in Clojure — русскоговорящее сообщество
Mikhail Gusarov
Спек, конечно, очень помогает, но он для, опять же, программиста, а не безопасника.
можешь юзкейз описать, где спек "не сработает"?
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Mikhail Gusarov
Я же приводил пример: вот есть функция. Она возвращает неотрицательные числа, но если ей передать nil, то она вернёт -1. Как трассировать в обе стороны: и что будет с системой, если вместо неотрицательного числа будет -1, и не будет ли где-нибудь ситуации, когда nil будет передан?
А типы помогут это явно обрисовать, обработать ?
источник

n

nvkv in Clojure — русскоговорящее сообщество
типы могут гарантировать, что в кодовой базе нигде эта функция не вызовется с nil
источник

n

nvkv in Clojure — русскоговорящее сообщество
so do spec
источник

MG

Mikhail Gusarov in Clojure — русскоговорящее сообщество
Типы, даже самые убогие, могут сказать "на вход подаются только списки чисел", и компилятор будет проверять, что в функцию не будут передаваться nil, 42, java.util.Date и прочие весёлые вещи.
источник

VL

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

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Видели этот прецедент?
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Mikhail Gusarov
Типы, даже самые убогие, могут сказать "на вход подаются только списки чисел", и компилятор будет проверять, что в функцию не будут передаваться nil, 42, java.util.Date и прочие весёлые вещи.
А если это вход пользовательский и можно что угодно туда подать ?
источник

MG

Mikhail Gusarov in Clojure — русскоговорящее сообщество
Мы говорим про анализ кода, а не про валидацию на границах.
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Понял, тут даже typescript справиться
источник

MG

Mikhail Gusarov in Clojure — русскоговорящее сообщество
@isaurian_the_3rd_not_really Спек везде сработает, где он написан, факт. Но он не везде будет написан, и это показывает разницу подходов. С другой стороны, спелёнывать по руками и ногам, как в языках со статической типизацией, тоже неудобно.
источник

MG

Mikhail Gusarov in Clojure — русскоговорящее сообщество
Да, нужно какой-то баланс. Чем изощрённее система типов, тем большее пространство состояний можно отсечь, но тем сложнее язык.
источник

VL

Vlad Lisovsky in Clojure — русскоговорящее сообщество
Ну я хз как быть
источник

AB

Alex Bubnov in Clojure — русскоговорящее сообщество
nvkv
типы могут гарантировать, что в кодовой базе нигде эта функция не вызовется с nil
В какой реализации системы типов она может гарантировать подобное?
источник

n

nvkv in Clojure — русскоговорящее сообщество
Alex Bubnov
В какой реализации системы типов она может гарантировать подобное?
в любой, где есть Optional<T>
источник

n

nvkv in Clojure — русскоговорящее сообщество
или Maybe
источник

AI

Ag Ibragimov in Clojure — русскоговорящее сообщество
nvkv
вот это щас обидно было!
Это комплимент. К тому что здесь достаточно много людей умных, талантливых, опытных. Потому и скептически относящихся ко всему. И даже при отсутствии аргументированых фактов, способных экстраполировать недостающие данные и продолжать познавательную дискуссию.
источник

MG

Mikhail Gusarov in Clojure — русскоговорящее сообщество
@nwalker В любой, где домен типа не включает неявно nil.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
nvkv
в любой, где есть Optional<T>
В скале это от null не защищает
источник

MG

Mikhail Gusarov in Clojure — русскоговорящее сообщество
Значит в скале в домене T есть null. О чём мы говорим?
источник