Size: a a a

2020 October 20

DZ

Danil Zagoskin in ErlangRus
У меня праздный интерес и вопрос к тем, кто всерьёз использует диалайзер (или что-либо ещё с типами).
Как правильно типизировать время?
В эрланге не особо парятся:
-spec erlang:monotonic_time(Unit) -> integer() when Unit :: time_unit().
-spec erlang:system_time(Unit) -> integer() when Unit :: time_unit().

Для меня почти очевидно, что для адекватных проверок секунды/миллисекунды/etc. и монотонное/системеное — это разные типы времени, потому что засунуть в erlang:start_timer(_, Time, _, [{abs, true}]) системное время или микросекунды — большая ошибка.
Поделитесь, пожалуйста, как вы это всё типизируете.
источник

ML

Maksim Lapshin in ErlangRus
Danil Zagoskin
У меня праздный интерес и вопрос к тем, кто всерьёз использует диалайзер (или что-либо ещё с типами).
Как правильно типизировать время?
В эрланге не особо парятся:
-spec erlang:monotonic_time(Unit) -> integer() when Unit :: time_unit().
-spec erlang:system_time(Unit) -> integer() when Unit :: time_unit().

Для меня почти очевидно, что для адекватных проверок секунды/миллисекунды/etc. и монотонное/системеное — это разные типы времени, потому что засунуть в erlang:start_timer(_, Time, _, [{abs, true}]) системное время или микросекунды — большая ошибка.
Поделитесь, пожалуйста, как вы это всё типизируете.
ну блин, совершенно точно integer не годится
источник

PK

Petr Kozorezov in ErlangRus
Danil Zagoskin
У меня праздный интерес и вопрос к тем, кто всерьёз использует диалайзер (или что-либо ещё с типами).
Как правильно типизировать время?
В эрланге не особо парятся:
-spec erlang:monotonic_time(Unit) -> integer() when Unit :: time_unit().
-spec erlang:system_time(Unit) -> integer() when Unit :: time_unit().

Для меня почти очевидно, что для адекватных проверок секунды/миллисекунды/etc. и монотонное/системеное — это разные типы времени, потому что засунуть в erlang:start_timer(_, Time, _, [{abs, true}]) системное время или микросекунды — большая ошибка.
Поделитесь, пожалуйста, как вы это всё типизируете.
А разве диалайзер можно научить отличать один integer от другого? На сколько я понимаю, как ты типы не именуй, отличить 1 от 1 он не сможет. Можно только играться областями значений (pos non_neg и тд), но я не вижу как это поможет. Это как по мне так огромный косяк идеологии диалайзера.
По самому вопросу, я лично не научил его различать единицы времени, и использую integer, и косяков от этого достаточно ловлю)
источник

PK

Petr Kozorezov in ErlangRus
Может @define_null знает больше?
источник

V

Vasilii Demidenok in ErlangRus
Честно говоря как я это понимаю - до тех пор пока твой тип под капотом просто сводится к integer у тебя не будет возможности понять что есть что. Для такой цели можно заворачивать интеджер в рекорд или тапл или если есть возможность использовать opaque типы, чья поддержка в диалайзере очень странная
источник

V

Vasilii Demidenok in ErlangRus
я лично с нетерпением жду анонса whatsapp с их новым тулом
источник

DZ

Danil Zagoskin in ErlangRus
Спасибо. Про диалайзер понятно.
источник

DZ

Danil Zagoskin in ErlangRus
Vasilii Demidenok
я лично с нетерпением жду анонса whatsapp с их новым тулом
Ты про типизированный эрланг от фейсбука или что-то ещё?
источник

V

Vasilii Demidenok in ErlangRus
Да, судя по толку это дополнительный тул и потенциально небольшие изменения в диалект эрланга. Все детали оставили до следующей конфы в ноябре.
источник

V

Vasilii Demidenok in ErlangRus
Danil Zagoskin
Ты про типизированный эрланг от фейсбука или что-то ещё?
https://www.youtube.com/watch?v=RHnjPW4YOrs&feature=emb_imp_woyt вот доклад этого года, но там мало деталей
источник

ML

Maksim Lapshin in ErlangRus
Petr Kozorezov
А разве диалайзер можно научить отличать один integer от другого? На сколько я понимаю, как ты типы не именуй, отличить 1 от 1 он не сможет. Можно только играться областями значений (pos non_neg и тд), но я не вижу как это поможет. Это как по мне так огромный косяк идеологии диалайзера.
По самому вопросу, я лично не научил его различать единицы времени, и использую integer, и косяков от этого достаточно ловлю)
Я в нашем type_mapper сделал поддержку обработки кастомных типов
источник

PK

Petr Kozorezov in ErlangRus
Maksim Lapshin
Я в нашем type_mapper сделал поддержку обработки кастомных типов
Это как-то относится к диалайзер или ты просто?
источник

ML

Maksim Lapshin in ErlangRus
Petr Kozorezov
Это как-то относится к диалайзер или ты просто?
я очень надеялся, что диалайзер понимает, что  milliseconds() =/= seconds(), так что скорее просто так ввернул
источник

ИИ

Иванов Иванов... in ErlangRus
Maksim Lapshin
я очень надеялся, что диалайзер понимает, что  milliseconds() =/= seconds(), так что скорее просто так ввернул
скоро будешь как халтурин с ergonode
источник

ИИ

Иванов Иванов... in ErlangRus
Sergey Loguntsov
добря .. сейчас какой мейнстримовый пулворкеров ? пулбой что-то заброшен
посмотри этот: https://github.com/lpgauth/shackle
я использовал совтец сделаный на нем - очень ок
источник

SL

Sergey Loguntsov in ErlangRus
@dinaamaa спасибо
источник

ИИ

Иванов Иванов... in ErlangRus
и лицензия норм
источник

SP

Sergey Prokhorov in ErlangRus
источник

AB

Alex Bubnov in ErlangRus
слушайте, а никто merl в парс-трансформах не использовал?
источник

VS

Vladimir Sekisov in ErlangRus
использовал, удобнее, чем вручную ast составлять
источник