Size: a a a

2021 February 08

A ß in pro.elixir
для всех же типов есть гарды?
источник

AN

Alexey Novoselov in pro.elixir
Lama Lover
По типам матчинга вроде нет, есть адовая смесь матчинга по коллекциям и гардов
is_map() is_list() ... не то?
источник

M

MrFlorius in pro.elixir
A ß
для всех же типов есть гарды?
Да
источник

LL

Lama Lover in pro.elixir
A ß
для всех же типов есть гарды?
Для кастомных типов нет.
(или совсем недавно завезли has_key)
источник

LL

Lama Lover in pro.elixir
Но это тоже такое себе, потому что
@type list_of_strings :: [binary()]

На гарде будет не реализовать
источник

A ß in pro.elixir
я говорю про типы эрланга, а не про типы диалайзера
источник

LL

Lama Lover in pro.elixir
A ß
я говорю про типы эрланга, а не про типы диалайзера
Для типов эрланга есть все гарды, да
Но они малоинформативны, потому что у того же reference может быть несколько совершенно разных смыслов
источник

A ß in pro.elixir
тут уж ничего не поделаешь
источник

LL

Lama Lover in pro.elixir
A ß
тут уж ничего не поделаешь
Да не, можно было бы каждый reference оборачивать в эрланговскую структуру (тупл) типа
@type ets_table_id :: {:ets_table_id, reference()}
@type gen_call_ref :: {:gen_call_ref, reference()}
Но это бы работало дольше чем нужно, поэтому все просто аккуратно пишут код и рассчитывают на всякие opaque
источник

IK

Ihor Katkov in pro.elixir
Alexey Novoselov
последнее время тенденция наоборот отходить от статической типизации, и использовать ее только там, где явно указано. Gradualizer например пилят по такому принципу. Ибо в BEAM, не считая hot code reloading есть еще сообщения, которые можно отправить кому угодно в рантайме. Ты никогда корректно не получшь тип входящего сообщения в compile-time, только паттерн матчинг спасает. Т.к. в рантайме можно отправить что угодно кому угодно, хоть из iex, хоть из другой ноды со старой версией софта и работающей с другим типом сообщений
в моем текущем проекте абсолютно все функции нужно покрывать dialyzer (sick!), даже те, которые dialzyer фактически не может чекнуть. Энтерпрайз на Elixir 🤷‍♂️
источник

LL

Lama Lover in pro.elixir
Ihor Katkov
в моем текущем проекте абсолютно все функции нужно покрывать dialyzer (sick!), даже те, которые dialzyer фактически не может чекнуть. Энтерпрайз на Elixir 🤷‍♂️
Я всегда пишу тайпспеки, даже в коде, который сам пишу
Тайпспеки сильнее любой документации, по-моему. Лучше тайпспек могут быть только тесты, но и даже тесты не умеет так изящно обозначать сущности, с которыми работаешь, как тайпспеки
источник

IK

Ihor Katkov in pro.elixir
Lama Lover
Я всегда пишу тайпспеки, даже в коде, который сам пишу
Тайпспеки сильнее любой документации, по-моему. Лучше тайпспек могут быть только тесты, но и даже тесты не умеет так изящно обозначать сущности, с которыми работаешь, как тайпспеки
Даже на коллбеки? Даже в LiveView компонентах?)
источник

A

Aldar in pro.elixir
A ß
не все корректные программы можно типизировать
Это не связано с теоремой Геделя о неполноте?
источник

LL

Lama Lover in pro.elixir
Ihor Katkov
Даже на коллбеки? Даже в LiveView компонентах?)
А коллбеки разве не обозначаются в @callback в модуле behaviour ?
В LiveView это жестоко, да, тут соглашусь
источник

IK

Ihor Katkov in pro.elixir
Lama Lover
А коллбеки разве не обозначаются в @callback в модуле behaviour ?
В LiveView это жестоко, да, тут соглашусь
обозначаются, но ты все равно можешь их писать
источник

IK

Ihor Katkov in pro.elixir
и dialyzer их не чекает, как и любые другие колбеки
источник

IK

Ihor Katkov in pro.elixir
он чекает только явный вызов функций
источник

LL

Lama Lover in pro.elixir
Ihor Katkov
и dialyzer их не чекает, как и любые другие колбеки
:(
источник

A ß in pro.elixir
Aldar
Это не связано с теоремой Геделя о неполноте?
вообще формулировка похожа, надо смотреть влечет ли тьюринг-полнота языка включение арифметики в его систему типов, навскидку сложно сообразить 😄
источник

V

V in pro.elixir
Aldar
Это не связано с теоремой Геделя о неполноте?
Нет
источник