Какое преимущество в производительности у Elixir defstruct? - PullRequest
0 голосов
/ 14 ноября 2018

Мое понимание структуры Эликсира таково;
1. Он не может содержать ключи, отличные от определенных во время компиляции.
2. Может иметь значения по умолчанию, которые оцениваются во время компиляции.

Есть ли какое-либо преимущество в производительности?
Кроме того, я что-то пропускаю?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Основным преимуществом struct является не производительность, а читаемость и корректность кода. Рассмотрим что-то вроде %{id: 123} - мы не знаем, что представляет эта карта. Со структурами мы можем иметь %Person{id: 123} и %Company{id: 123}, и это будут разные вещи. Кроме того, можно легко выразить, какой из них ожидается при сопоставлении с образцом, как упомянуто GavinBrelstaff. Другим примером функции в структуре, нацеленной на корректность, является @enforce_keys - установив ее в своей структуре, вы убедитесь, что на любом нормально созданном экземпляре будут присутствовать заданные ключи.

0 голосов
/ 14 ноября 2018

Ну, Elixir с открытым исходным кодом.Как можно легко увидеть из реализации Kernel.defstruct/1, все, что он делает, это определяет __struct__ метод в модуле, где он был вызван (только false part случая можно было бы рассмотреть без потери общности).

Все остальное там отвечает за информирование компилятора Elixir об этой структуре, чтобы включить новый синтаксис (%MyStruct{}) для нее и сохранить некоторую метаинформацию оСтруктура в глобалы компилятора.

Под структурой представлена ​​ голая карта %{}, и не может быть места для повышения производительности.

...