NET vs LISP
Сегодня ухохатывался, сравнивая быстродействие lisp и C#. Ни таких результатов, ни таких трат на тесты по скорости выполнения я точно не ожидал.
Суть задачи проста и незатейлива: надо пройтись получить ExtesionDictionary с пространства модели, забрать оттуда данные, пройтись по всему пространству модели, выбрать примитивы со своими словарями, получить оттуда данные, и вернуть элементарным списком.
Код приводить не буду, поскольку задача сильно локальная и особого интереса не представляет. Ну что сложного в том, чтобы проверить наличие расширенного словаря (а к NamedObjectDictionary обращений нет!), получить и сгруппировать оттуда данные? Да в принципе-то ничего особенного. Как я думал. Но....
На лиспе все это написано уже достаточно давно, не менее давно работает, но тут меня что-то торкнуло попробовать сделать это через C#. Три дня экспериментов и раздумий, два вечера на попытки заставить все это работать, и - ура! Оно есть! И даже выдает одни и те же результаты! Ура, добрый вечер, знаменитый benchmark!
1 2 3 4 5 6 7 | _$ (BENCHMARK '((t1) (t2) (gu-sem-red-used-numbers) (gu-sem-land-used-numbers))) Benchmarking ...........Elapsed milliseconds / relative speed for 256 iteration(s): (net-t2)........1404 / 608.74 <fastest> (net-t1)........1419 / 602.3 (T2)............834449 / 1.02 (T1)............854667 / 1 <slowest> |
t1, net-t1 и t2, net-t2 искали одинаковые данные, но по разным критериям. Я ко многому был готов, но не к разнице в 600 с лишним раз.
Даже если учесть, что lisp-код был написал хрен знает когда, что там есть реальные возможности для ускорения - что-то мне кажется, что разницу в 100 раз будет уже не преодолеть. Даже для компилированного кода.