Посмотрел сегодя немножко SwiftForth. Осталась у меня скачанная с
их сайта версия, пока вроде денег не требует и работает. Гляжу -- а там сравнение. Дай думаю померяюсь.
http://files.myopera.com/profiT/forth/bench.7z
Для SPF'а вражеский форт-исходник конечно нужно было слегка подрихтовать, но это было несложно:
Код:
SPF 4.18
sec ms us ns = Timing for this system
042 = Timing for DO LOOP
000 = Timing for *
014 = Timing for /
001 = Timing for +
006 = Timing for M*
015 = Timing for UM/MOD
010 = Timing for M+
014 = Timing for /MOD
017 = Timing for */
954,059 = Timing for Fibonacci recursion ( 24 -> 46368 )
213,825 = Timing for Eratosthenes sieve 1899 Primes
60,993 = Timing for Hoare's quick sort (reverse order)
271 = Timing for EDN's string comparison
Код:
SwiftForth 3.03 Evaluation Version
sec ms us ns = Timing for this system
015 = Timing for DO LOOP
001 = Timing for *
016 = Timing for /
000 = Timing for +
005 = Timing for M*
019 = Timing for UM/MOD
012 = Timing for M+
019 = Timing for /MOD
021 = Timing for */
915,512 = Timing for Fibonacci recursion ( 24 -> 46368 )
190,414 = Timing for Eratosthenes sieve 1899 Primes
106,918 = Timing for Hoare's quick sort (reverse order)
253 = Timing for EDN's string comparison
Интересно это. Ведь если посмотреть на SwiftForth то он пусть и делает тоже как и SPF компиляцию непосредственно в маш. код и инлайнит тоже, но сверх того он-то больше ничего не делает. А по раскладкам на стек и регистры SwiftForth и SPF практически ведь близнецы-братья -- тоже аппаратный стек как стек возвратов, указатель стека данных в EPB, только регистры TOS разные -- у SPF EAX, у SwiftForth'а EBX.
(чтобы это узнать эти подробности архитектуры Swift'а я просто писал: "SEE DUP", "SEE DROP" и так далее)..
Теперь мысли по каждому тесту:
DO LOOP -- ну что тут сказать?.. SPF за свой "интересный" код DO LOOP заслуженно получил на орехи.
Всевозможные умножения и деления -- ну где-то наравне... Всё равно копейкой дороже, копейкой дешевле.
Фибоначчи и Эратосфен -- SPF проиграл сколько-то там процентов. Обидно.
Вот на быстрой сортировке SPF оторвался. Обратите внимание что это единственный тест, написанный целым лексиконом (там где-то пять слов).
Сравнение строк. Ну, тут просто сравнение кто лучше на ассемблере пишет (у обоих систем слово SEARCH написано в кодах). Получается так что Элизабет (E. Rather) пишет лучше. Обратите внимание что SPF'овский SEARCH использует цепочечную инструкцию lods , а Swift'овский не использует. Хотя-хотя, насколько тест показателен, ведь строка для сравнения всё время одна и та же совсем небольшая (хотя по поводу размера спорно что лучше подходит).