Size: a a a

2020 February 05

SM

Sergei Maximov in pro.elixir
А он уже научился из коробки документацию показывать?
источник

VS

Viacheslav Shevchenko in pro.elixir
erl -man
источник

VS

Viacheslav Shevchenko in pro.elixir
всегда умел
источник

RP

Roman Pushkov in pro.elixir
вообще вот такое есть
https://github.com/erszcz/docsh
источник

PG

Pïg Grëënëst in pro.elixir
> эршч
источник

LL

Lama Lover in pro.elixir
Отпуск нормально проходит, я смотрю)
источник

V

V in pro.elixir
Котаны, объясните простым языком, зачем нужен @opaque
источник

SM

Sergei Maximov in pro.elixir
А ещё можно так сделать

MANPATH=<ERLANG_DIR>/lib/erlang/man man 3 lists


Но мы ведь сейчас про репл говорим?
источник

SM

Sergei Maximov in pro.elixir
V
Котаны, объясните простым языком, зачем нужен @opaque
Чтобы объявить какой-то тип, не раскрывая его внутреннее устройство пользователю. Т.е. пользователь видит только название типа, а вот какой-нибудь dialyzer может этот тип проверить.
источник

V

V in pro.elixir
Sergei Maximov
Чтобы объявить какой-то тип, не раскрывая его внутреннее устройство пользователю. Т.е. пользователь видит только название типа, а вот какой-нибудь dialyzer может этот тип проверить.
Спасибо, кэп. Документацию я читал. Зачем это нужно в реальной жизни?
источник

АЮ

Андрей Юнми in pro.elixir
V
Спасибо, кэп. Документацию я читал. Зачем это нужно в реальной жизни?
Когда ты не хочешь, чтобы люди руками создавали вещи этого типа, а получали экземпляры только по твоему апи, например.
источник

V

V in pro.elixir
Андрей Юнми
Когда ты не хочешь, чтобы люди руками создавали вещи этого типа, а получали экземпляры только по твоему апи, например.
Понял, спасибо
источник

SM

Sergei Maximov in pro.elixir
V
Спасибо, кэп. Документацию я читал. Зачем это нужно в реальной жизни?
Что тебе именно непонятно? Зачем нужно присваивать сущностям типы? Зачем скрывать внутреннюю реализацию какого-то типа? Зачем статически проверять типы?

Можно пойти от противного. Вот у тебя есть MapSet и t:MapSet.t/1. Ты хочешь написать функцию, которая берёт MapSet и возвращает количество элементов в нём. Ты хочешь, чтобы если пользователь туда передаст вместо MapSet значение другого типа, чтобы диалайзер заругался. @opaque у тебя нет, раскрывать пользователю внутреннюю реализацию ты  не хочешь. Твои действия?
источник

V

V in pro.elixir
Sergei Maximov
Что тебе именно непонятно? Зачем нужно присваивать сущностям типы? Зачем скрывать внутреннюю реализацию какого-то типа? Зачем статически проверять типы?

Можно пойти от противного. Вот у тебя есть MapSet и t:MapSet.t/1. Ты хочешь написать функцию, которая берёт MapSet и возвращает количество элементов в нём. Ты хочешь, чтобы если пользователь туда передаст вместо MapSet значение другого типа, чтобы диалайзер заругался. @opaque у тебя нет, раскрывать пользователю внутреннюю реализацию ты  не хочешь. Твои действия?
> раскрывать пользователю внутреннюю реализацию ты  не хочешь

Вот это непонятно. Почему я должен это не хотеть.
источник

a

arikai in pro.elixir
А зачем?
источник

SM

Sergei Maximov in pro.elixir
Потому что тогда у пользователя будет соблазн завязаться на эту внутреннюю реализацию. А ты в один прекрасный момент её поменяешь (например, на более эффективную), не меняя публичный API, и сломаешь рабочий код пользователя. Хотя если бы пользователь использовал только публичный API, то всё было бы норм.
источник

V

V in pro.elixir
Понятно, спасибо. Всё те же игры в сокрытие реализации и шаринг контракта.
источник

SM

Sergei Maximov in pro.elixir
Вот тот же MapSet раньше определялся как

defstruct map: %{}

Затем как

defstruct data: %{}

А сейчас как

defstruct map: %{}, version: 2

Плюс раньше там в качестве значения использовался атом true, а сейчас пустой список.

Если бы это был публичный тип, я могу гарантировать со 100% вероятностью, что кто-нибудь захотел, например, использовать pattern matching вместо публичного API, предоставляемого модулем.

Правда, pattern matching тебе и сейчас никто не мешает использовать, просто это чуть сложнее.
источник

EV

Eugene Vasiliev in pro.elixir
V
Понятно, спасибо. Всё те же игры в сокрытие реализации и шаринг контракта.
собственно, разработка софта, в основном, состоит из этой игры
источник

EV

Eugene Vasiliev in pro.elixir
ещё иногда надо придумывать имена штукам и инвалидировать кэш
источник