
Евгений
27.09.2017
06:35:36

Aleksey
27.09.2017
06:37:06
Ага
Автоматическое приведение типов, не являющихся сродными, я бы сказал - целые с вещественными взаимопреобразовывать многие статические языки умеют :)

Евгений
27.09.2017
07:22:06

Google

Aleksey
27.09.2017
07:27:15
"сродные", это не очепятка была. Имел в виду "родственные типы" - как целые и дробные, т.е. "чиселки"
"Сложные типы" к булеву значению, например, много где приводятся - ссылка на объект не null, значит "True" :)

Yuriy
27.09.2017
07:28:20

Aleksey
27.09.2017
07:29:07
Кстати да, в JS вообще всё к строке приводится - отсюда "[object]"

Евгений
27.09.2017
07:29:25
Ну приведение к строке как раз много где есть

Yuriy
27.09.2017
07:29:30
в Перле между скалярами скалярами и списками автоматическая конверсия, если я правильно помню
во всех ООП языках автоматическое приведение вверх по наследованию и иногда вниз

Aleksey
27.09.2017
07:30:13

Yuriy
27.09.2017
07:30:47

Евгений
27.09.2017
07:30:57
Но например неявное приведение к строке можно объяснить неявной типизацией вместо String (ToString a => forall a. a)

Yuriy
27.09.2017
07:31:24
в питоне преведение последовательностей к итераторам в for считается?

Google

Евгений
27.09.2017
07:32:33

Yuriy
27.09.2017
07:33:20

Евгений
27.09.2017
07:33:21
Или в экзистенциальные типы?

Yuriy
27.09.2017
07:33:58
в динамических языках тоже можно сказать, что все типы — подтипы Object или String

Евгений
27.09.2017
07:36:34
На самом деле я склоняюсь к тому, что никакой слабой типизации нет. Точнее есть, но как разновидность некорректной типизации :)

Aleksey
27.09.2017
07:38:38
Абслоютно слабой нет, есть слабые местами системы типов (а местами сильные)
Питон чутка сильнее чем ЖС

Mikhail
27.09.2017
07:39:12

Yuriy
27.09.2017
07:39:22
ассемблер — абсолютно слабый

Aleksey
27.09.2017
07:40:25
Питон почти везде сильный, это правда.

Yuriy
27.09.2017
07:40:27
ах да, есть ещё "утиная типизация", которую легко спутать с динамической или со слабой

Aleksey
27.09.2017
07:40:53
утиная типизация, это не признак слабины же!

Yuriy
27.09.2017
07:41:16
именно!

Aleksey
27.09.2017
07:41:38
Кроме случая "всё выглядит, как boolean, значит будет boolean" :)

Евгений
27.09.2017
07:41:57

Yuriy
27.09.2017
07:42:49

Mikhail
27.09.2017
07:43:22

Google

Yuriy
27.09.2017
07:43:23

Aleksey
27.09.2017
07:43:35

Евгений
27.09.2017
07:44:18

Aleksey
27.09.2017
07:44:20
что ты имеешь в виду?
В питоне всё что угодно "имеет смысл" в булевом контексте - bool(any) сработает всегда

Alexander
27.09.2017
08:38:10
Ближайшие конференции:
Ноябрь ?? - Москва, в Kaspersky https://mobile.twitter.com/cblp_su/status/912940905757396992
Декабрь 2 - Москва fpconf http://fpconf.ru/
Декабрь 17 - F(by) Conf http://fby.by

Andrei
27.09.2017
08:38:16

Aleksey
27.09.2017
08:38:51
Строгая==Статическая, что ли?

Andrei
27.09.2017
08:40:16
Да.

Yuriy
27.09.2017
08:42:37
первый раз такую интерпретацию слышу
зачем называть статическую строгой?

Alexander
27.09.2017
08:43:05
эм?
>>> a = "a"
>>> a+1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
строгая, динамическая
переменная a имеет "runtime-тип" str

Yuriy
27.09.2017
08:44:39

Aleksey
27.09.2017
08:45:00
В питоне переменная не имеет типа. Объект, на который она ссылается, имеет

Alexander
27.09.2017
08:45:01
ок, strong
что такое переменная?

Yuriy
27.09.2017
08:45:23
стронгая типизация, ага

Aleksey
27.09.2017
08:45:23
имя-ссылка

Google

Yuriy
27.09.2017
08:45:43
в строко типизированном языке

Aleksey
27.09.2017
08:46:21
String dynamic typing - знакомая штука

Alexander
27.09.2017
08:46:37
врочем сейчас открыл tappl и потом тырнеты и не нашёл на что согласться говоря про строгая

Aleksey
27.09.2017
08:47:20
В бейсике, кстати, типизация strong :) Строки с чиселками не складываются ну никак
А вот переменные не знают о типе содержимого, поэтому все ошибки типизации - только в рантайме

Alexander
27.09.2017
08:48:23
ну считать ли теги типами вопрос открытый
и согласно таплу это не хорошо, но исторически сложилось
так что я думаю эту часть дискуссии можно в очередной раз не развивать?

Aleksey
27.09.2017
08:49:18
можно не развивать, это правда

Denis
27.09.2017
09:11:51
https://github.com/mckayb/phantasy-recursion-schemes/blob/master/src/functions.php :D
кто поведает мне о loeb / moeb ? зачем и почему?
в линзах есть cosmos зачем?

Aleksey
27.09.2017
10:53:47
там ещё и базар есть :)

Andrei
27.09.2017
10:55:50

Дмитрий
27.09.2017
10:57:21
В flowtype мощный статический type inference
Причём выводится без хаков, через честные bounds. Ковариантность, контрвариантность в комплекте. Динамические хаки языка — за бортом

Aleksey
27.09.2017
11:05:56
Но покуда сам язык слабый, всегда остаётся вероятность пропустить багу из-за недостаточного ума анализатора

Google

Aleksey
27.09.2017
11:07:48
Так что "сначала напишем, а потом анализатор прогоним" работает плохо, ибо "потом прогоним анализатор" выливается в "тут-то точно всё ок будет, поэтому поставим игнор-коммент"

Дмитрий
27.09.2017
11:08:30
Весь код by default считаем забагованным пока не доказанно обратное
Так как можно из любого mixed пошагово вывести доказательство корректности любого разумного типа, то это вполне естественная рабочая ситуация
Как винить производителей ножей, что ими не только картошку чистят

Aleksey
27.09.2017
11:10:15
Если есть язык, где нельзя выключить статическую типизацию и прострелить себе всё, то лучше использовать этот язык

Дмитрий
27.09.2017
11:20:52
А то unsafeCoerce, не комильфо как-то

Alexander
27.09.2017
11:22:06
да ладно
-defer-type-errors
и вперёд
qnikst@qwork ~ $ cat 1.hs
i :: Int
i = 1
s :: String
s = "s"
p :: Bool
p = i + s
main = print p
qnikst@qwork ~ $ ghc 1.hs -fdefer-type-errors -fforce-recomp
[1 of 1] Compiling Main ( 1.hs, 1.o )
1.hs:8:5: warning: [-Wdeferred-type-errors]
• Couldn't match expected type ‘Bool’ with actual type ‘Int’
• In the expression: i + s
In an equation for ‘p’: p = i + s
1.hs:8:9: warning: [-Wdeferred-type-errors]
• Couldn't match type ‘[Char]’ with ‘Int’
Expected type: Int
Actual type: String
• In the second argument of ‘(+)’, namely ‘s’
In the expression: i + s
In an equation for ‘p’: p = i + s
Linking 1 ...

Дмитрий
27.09.2017
11:23:38
Тоже хороший вариант, да)

Alexander
27.09.2017
11:23:41
вон скомпилялось
qnikst@qwork ~ $ ./1
1: 1.hs:8:9: error:
• Couldn't match type ‘[Char]’ with ‘Int’
Expected type: Int
Actual type: String
• In the second argument of ‘(+)’, namely ‘s’
In the expression: i + s
In an equation for ‘p’: p = i + s
(deferred type error)
ошибки типов в рантайме, все как у взрослых
• Couldn't match type ‘StM m ()’ with ‘()’
Expected type: IO (StM m ())
Actual type: IO ()
ну вот опять : (