Комментарии 4
Может чуть не по теме. Но интересна, какие паттерн матчинги в WL по производительности выигрывают:
Сопоставление DownValues по строке
Something["uid"][args_] := Print[args];
(* где-то в коде, вызывается ... *)
Something[providedUid][data]
Или по символам
$GeneratedSymbol`$337[args_] := Print[args];
(* где-то в коде, вызывается ... *)
$GeneratedSymbol`$337[data]
Пока не запуская тесты я могу предположить, что второй вариант быстрее и в среднем и асимптотически, так как просто в нем будет меньше определений, а значит потребуется перебрать меньше шаблонов. Плюс первый вариант - это SubValues. Попробую измерить время и вернусь!
Ну, так и получилось на самом деле. Причем разница довольно заметная:
uuids = Table[
With[{uuid = CreateUUID[]},
func[uuid][args_] := args;
uuid
],
{1000}
];
symbols = Table[
With[{symbol = Unique["symbol`$"]},
symbol[args_] := args;
symbol
],
{1000}
];
With[{uuid = uuids[[1]]}, RepeatedTiming[func[uuid][1]]]
With[{f = symbols[[1]]}, RepeatedTiming[f[1]]]
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Велосипедим связанный список на Wolfram