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 раз будет уже не преодолеть. Даже для компилированного кода.

Размещено в AutoCAD, Код LISP · Метки: , , ,



Поделитесь своим мнением


Я не робот.