Это может быть наивный вопрос, и я подозреваю, что ответ "да", но мне не повезло искать здесь и в других местах такие термины, как "константы оптимизации компилятора erlang" и т. Д.
В любом случае,может (будет) компилятор erlang создавать структуру данных, которая является постоянной или литеральной во время компиляции, и использовать ее вместо создания кода, который создает структуру данных снова и снова?Я приведу простой пример с игрушкой.
test() -> sets:from_list([usd, eur, yen, nzd, peso]).
Может ли (будет) компилятор просто вставлять набор туда на выходе функции вместо того, чтобы вычислять его каждый раз?
Причина, по которой яСпросите, я хочу иметь таблицу поиска в программе, которую я разрабатываю.Таблица - это просто константы, которые можно вычислить (хотя бы теоретически) во время компиляции.Я хотел бы просто вычислить таблицу один раз, и не нужно вычислять ее каждый раз.Я знаю, что мог бы сделать это другими способами, например вычислить вещь и сохранить ее, например, в словаре процесса (или, возможно, в таблице ets или mnesia).Но я всегда начинаю с простого, и для меня самое простое решение - сделать это, как в примере с игрушкой выше, если компилятор оптимизирует его.
Если это не сработает, есть ли какой-то другой способ добиться того, что яхочу?(Полагаю, я мог бы изучить преобразования, если бы они работали для этого, но это становится сложнее, чем хотелось бы?)
ЭТО ПРОСТО В.Я использовал compile: file / 2 с опцией 'S' для получения следующего.Я не эксперт по сборке erlang, но похоже, что оптимизация не выполнена:
{function, test, 0, 5}.
{label,4}.
{func_info,{atom,exchange},{atom,test},0}.
{label,5}.
{move,{literal,[usd,eur,yen,nzd,peso]},{x,0}}.
{call_ext_only,1,{extfunc,sets,from_list,1}}.