Информация об изменениях

Сообщение Re: Символы, атомы от 09.07.2021 1:25

Изменено 09.07.2021 1:27 kaa.python

Re: Символы, атомы
Здравствуйте, x-code, Вы писали:

XC>Есть в программировании такая концепция — "символы", или "атомы".

XC>Вот например в языке Julia.
XC>Вроде простая концепция, не какие-нибудь монады
XC>Но я никак не могу понять "use cases". Зачем они, какие задачи решают?

An atom is a constant whose value is its own name.


Отсюда: https://elixir-lang.org/getting-started/basic-types.html#atoms

XC>Или они возможны только в интерпретируемых языках, а я пытаюсь мысленно прикрутить их к привычным компилируемым типа С/С++ и потому не нахожу применения?

XC>Или их все-же можно прикрутить и к компилируемым языкам тоже?

Я не думаю что такая концепция имеет смысл в статически типизированных языках. В то же время в динамике смысл есть. Например у тебя есть JSON, который ты хочешь диссериализовать. В простейшем случае ты получаешь словарь где в качесве ключа у тебя строка. Ну, жить можно, но никаких проверок и помощи от IDE что ты не опечатался.
iex> Poison.Parser.parse!(~s({"name": "Devin Torres", "age": 27}), %{})
%{"name" => "Devin Torres", "age" => 27}


Но ключи могут быть не только строками, но и атомами, что в целом удобнее в процессе разработки.
iex> Poison.Parser.parse!(~s({"name": "Devin Torres", "age": 27}), %{keys: :atoms!})
%{name: "Devin Torres", age: 27}


В той же BEAM у атомов есть свои подводные камни связанные с реализацией, но к данному вопросу это не относится.
Re: Символы, атомы
Здравствуйте, x-code, Вы писали:

XC>Есть в программировании такая концепция — "символы", или "атомы".

XC>Вот например в языке Julia.
XC>Вроде простая концепция, не какие-нибудь монады
XC>Но я никак не могу понять "use cases". Зачем они, какие задачи решают?

An atom is a constant whose value is its own name.


Отсюда: https://elixir-lang.org/getting-started/basic-types.html#atoms

XC>Или они возможны только в интерпретируемых языках, а я пытаюсь мысленно прикрутить их к привычным компилируемым типа С/С++ и потому не нахожу применения?

XC>Или их все-же можно прикрутить и к компилируемым языкам тоже?

Я не думаю что такая концепция имеет смысл в статически типизированных языках. В то же время в динамике смысл есть. Например у тебя есть JSON, который ты хочешь диссериализовать. В простейшем случае ты получаешь словарь где в качесве ключа у тебя строка. Ну, жить можно, но никаких проверок и помощи от IDE что ты не опечатался.
iex: Poison.Parser.parse!(~s({"name": "Devin Torres", "age": 27}), %{})
%{"name" => "Devin Torres", "age" => 27}


Но ключи могут быть не только строками, но и атомами, что в целом удобнее в процессе разработки.
iex: Poison.Parser.parse!(~s({"name": "Devin Torres", "age": 27}), %{keys: :atoms!})
%{name: "Devin Torres", age: 27}


В той же BEAM у атомов есть свои подводные камни связанные с реализацией, но к данному вопросу это не относится.