LINUX.ORG.RU
 
antony986

Python vs Lisp. Расстановка точек


0

0

питон:

den@ira-desktop:~/work/test$ time python -O test.py 
('answer: ', 39)

real	0m33.035s
user	0m32.890s
sys	0m0.084s
den@ira-desktop:~/work/test$

clisp:

den@ira-desktop:~/work/test$ time clisp test.lsp
39

real	2m44.491s
user	2m42.970s
sys	0m1.464s
den@ira-desktop:~/work/test$

def test():
    r = 0
    for i in range(0, 10000):
        for j in range(0, 10000):
            r = (r + (i * j) % 100) % 47
    return r
r = test()
print("answer: ", r)
(defun test ()
    (setq r 0)
    (dotimes (i 10000 r)
        (dotimes (j 10000 r)
            (setq r (mod (+ r (mod (* i j) 100)) 47))
        )
    )
)

(write (test))

а теперь докажите, что лисп не тормознутое УГ


[#] Ответ на: комментарий от anonymous 08.02.2010 23:59:48  
Love5an

Кстати, вообще говоря, clisp это тоже компилятор, в байткод и работает он от этого быстрее на порядок

для этого надо либо поставлять ему ключ -C, либо явно компилировать код

()
[#] Ответ на: комментарий от anonymous 08.02.2010 22:58:00  

Нет, мы хотим. С участием php-хакеров, жрущих чёрную икру на завтрак и демпингующих лисперов-равшанов-джумшутов

**** ()
[#] Ответ на: комментарий от mv 09.02.2010 0:04:54  
tia

Когда я вспоминаю лисп, сразу вспоминешься ты :)
Просто не верится что взрослый человек, уже не какой-нить перво-второкурсник, а пропагандирует лисп как язык "для всего"...
Ну да ладно, тот пост был чисто так, для проверки реакции :)

* ()
[#] Ответ на: комментарий от Karapuz 09.02.2010 0:17:14  

Я вижу, обидела тебя эта икра до глубины души. Что, завидуешь таки нам, php-шникам?

anonymous ()
[#] Ответ на: комментарий от tia 09.02.2010 0:17:23  
bibi

> Просто не верится что взрослый человек, уже не какой-нить перво-второкурсник, а пропагандирует лисп как язык "для всего"...

Ах, кто бы говорил....

()
[#] Ответ на: комментарий от archimag 09.02.2010 0:06:36  
antony986

согласен, доказали

хотя мне удалось свести питон к этому

den@ira-desktop:~/work/test$ time python test.py
('answer: ', 39)

real	0m4.969s
user	0m4.924s
sys	0m0.012s

a SBCL к этому

den@ira-desktop:~/work/test$ time sbcl --load test.lsp --eval "(quit)"
This is SBCL 1.0.29.11.debian, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses.  See the CREDITS and COPYING files in the
distribution for more information.
39
real	0m3.657s
user	0m3.604s
sys	0m0.044s

компилятор против интерпретатора, первый выигрывает, ладно попробую еще на досуге что-нибудь ))

* ()
[#] Ответ на: комментарий от anonymous 09.02.2010 0:18:33  
tia

/me смотрит на анонимуса взглядом как человек, смотрящий на сироту, но понимающий что ничем помочь не может

Вам, php-шникам, никто не завидует.

* ()
[#] Ответ на: комментарий от Zubok 09.02.2010 0:16:49  

> Харе гнать на CLISP! :) Хорошая реализация, и я ей доволен

А для чего используем? Я в него не могу почти не один свой проект загрузить, какая-нибудь либа обязательно отвалится.

** ()
[#] Ответ на: комментарий от tia 08.02.2010 23:52:10  

> Кто тогда напишет на хаскеле? =/

Waterlaz же. И ныне не троллящий L29Ah.

*** ()
[#] Ответ на: комментарий от bibi 09.02.2010 0:19:56  
tia

Дык а я что? Мне то можно, я ещё так молод и могу позволить ошибаться и развиваться в неправильную сторону. Но тв. mv...

* ()
[#] Ответ на: комментарий от tia 09.02.2010 0:21:42  
tia

Вот блин, проверил реакцию службы быстрого реагирования лиспотроллей и получил 1 игнор =/

* ()
[#] Ответ на: комментарий от antony986 09.02.2010 0:20:39  

> хотя мне удалось свести питон к этому

Каким образом?

> a SBCL к этому


Не надо SBCL так запускать, он не предназначен для быстрого старта. В CL есть специально для этого макрос time, которые показывает время выполнения код.

** ()
[#] Ответ на: комментарий от tia 09.02.2010 0:20:41  

Ты когда в последний раз ел черную икру? Сколько ты платишь своему водителю? Сколько человек прислуги на тебя работает? Мало? Ну тогда тебе стоит завидовать тем, кто программирует на PHP.

anonymous ()
[#] Ответ на: комментарий от tia 09.02.2010 0:21:42  
bibi

> Дык а я что? Мне то можно, я ещё так молод и могу позволить ошибаться и развиваться в неправильную сторону. Но тв. mv...

Да и mv ещё рано вроде как на пенсию отправлять.

()
[#] Ответ на: комментарий от tia 09.02.2010 0:21:42  

> Дык а я что? Мне то можно, я ещё так молод и могу позволить ошибаться и развиваться в неправильную сторону.

во-во, может через лет пять будешь за лисп агитировать ;)

**** ()
[#] Ответ на: комментарий от anonymous 09.02.2010 0:18:33  

Зело, черной-мана завистью, насяльника

**** ()
[#] Ответ на: комментарий от anonymous 09.02.2010 0:18:33  

>Я вижу, обидела тебя эта икра до глубины души. Что, завидуешь таки нам, php-шникам?

Завидовать тому, что вы для говна придумали новое название - "черная икра"?

***## ()
[#] Ответ на: комментарий от archimag 09.02.2010 0:23:23  
antony986

>Каким образом?

psyco, был приятно удивлен. скомпилить при помощи pyrex не вышло

>Не надо SBCL так запускать, он не предназначен для быстрого старта. В CL есть специально для этого макрос time, которые показывает время выполнения код.

да согласен, надо замерять в самом коде

* ()
[#] Ответ на: комментарий от archimag 09.02.2010 0:23:23  

>Не надо SBCL так запускать, он не предназначен для быстрого старта.

Java тоже требует startup warming, но анонимным аналитикам с лора это побарабану, жаба у них тормозит и все тут

**** ()
[#] Ответ на: комментарий от tia 09.02.2010 0:21:42  

>Мне то можно, я ещё так молод и могу позволить ошибаться и развиваться в неправильную сторону.

Развиваться? Ты? Ты себе сильно льстишь!

***## ()
[#] Ответ на: комментарий от anonymous 09.02.2010 0:23:38  
tia

Фигасе. Грац, ты - первый анонимус-пэхапэкодер, который ест красную икру, имеет личного водителя и прислуг.

* ()
[#] Ответ на: комментарий от tia 09.02.2010 0:21:42  

Развиваться ты, к сожалению, не способен. У тебя отсутсвуют необходимые для этого навыки.

anonymous ()
[#] Ответ на: комментарий от bibi 09.02.2010 0:23:44  
tia

Не исключаю, а по фотке кажется что человеку уже не 22 года =/
>во-во, может через лет пять будешь за лисп агитировать ;)

Ну а что поделать... Старость не в радость. Понимаешь что времени уже не много, деньги нужны, времени нет... Приходится есть то что дают, а самому на готовку времени при всём желании не найти...
Ох и боюсь я этого времени.

* ()
[#]  

Открыл первый пакет попкорна, прогнозирую over 24 страниц в этом треде

**** ()
[#] Ответ на: комментарий от archimag 09.02.2010 0:20:43  

>А для чего используем? Я в него не могу почти не один свой проект загрузить, какая-нибудь либа обязательно отвалится.

Подтверждаю, у него FFI уже несколько лет сломан и не чинится.

** ()
[#] Ответ на: комментарий от Karapuz 09.02.2010 0:29:09  

> Открыл первый пакет попкорна, прогнозирую over 24 страниц в этом треде

закрывай - "тяжелой артиллерии" нет, значит быстро все заглохнет

**** ()
[#] Ответ на: комментарий от antony986 09.02.2010 0:25:46  

>>Каким образом?
>psyco, был приятно удивлен. скомпилить при помощи pyrex не вышло

А теперь сравни его с clisp'овым JIT'ом, как предложили выше.

anonymous ()
[#] Ответ на: комментарий от Led 09.02.2010 0:26:30  
tia

>Развиваться? Ты? Ты себе сильно льстишь!
Откуда такой комок злости? Прямо изрыгнул на меня. А что я тебе сделал? Ничего. Обидно даже, да. Хотяя... Может ты просто один из злых анонимусов? Вполне возможно.

>Развиваться ты, к сожалению, не способен. У тебя отсутсвуют необходимые для этого навыки.

Какой злой анонимус :) Нет, ты ещё зеленоват, есть и более злые, по сему ты не интересен :)

* ()
[#] Ответ на: комментарий от Karapuz 09.02.2010 0:29:09  

>Открыл первый пакет попкорна, прогнозирую over 24 страниц в этом треде

24 страницы это уже пройденный этап. Тогда была лишь тренировка. (Производители попкорна довольно потирают руки)

anonymous ()
[#] Ответ на: комментарий от anonymous 09.02.2010 0:30:33  

Вообще народ давайте все кто на чём пишет сделаем этот тест и составим мини-статистику типа среднее по компиляторам vs байткодам vs интерпретаторам.

anonymous ()
[#] Ответ на: комментарий от anonymous 09.02.2010 0:37:22  

> сделаем этот тест и составим мини-статистику

А смысл? Здесь не работы с памятью, не обработки ошибок, не виртуальных вызовов, т.е. вообще ничего, что определяет производительность реальных приложений.

** ()
[#] Ответ на: комментарий от archimag 09.02.2010 0:39:36  

>А смысл? Здесь не работы с памятью, не обработки ошибок, не виртуальных вызовов, т.е. вообще ничего, что определяет производительность реальных приложений.

Я и не говорю, что этот тест всеобъемлющ, но начали же сравнение с него. Интересно было бы сопоставить результаты с http://shootout.alioth.debian.org

PS. Ты намеренно делаешь постоянно ошибку в применении усилительной ни?
"Здесь нет ни работы с памятью, ни обработки ошибок, ни виртуальных вызовов, т.е. вообще ничего, что определяет производительность реальных приложений."
"Я в него не могу почти ни один свой проект загрузить, какая-нибудь либа обязательно отвалится."

anonymous ()
[#]  

У меня

Хаскел:

test = foldl (\r i -> foldl (\r' j -> (r' + (i * j) `mod` 100) `mod` 47) r [0..9999]) 0 [0..9999]

main = print $ "answer: " ++ show test

excelsior:haskell excelsior$ time ./test
"answer: 39"

real	0m6.083s
user	0m6.006s
sys	0m0.038s

Педон:

excelsior:python excelsior$ time python -O test.py 
('answer: ', 39)

real	0m30.834s
user	0m29.161s
sys	0m0.192s

Тсепепе:

excelsior:cpp excelsior$ time ./test
answer: 39

real	0m1.263s
user	0m1.185s
sys	0m0.003s

anonymous ()
[#] Ответ на: комментарий от anonymous 09.02.2010 0:50:10  

> Интересно было бы сопоставить результаты с
> http://shootout.alioth.debian.org


Там тесты полный отстой, по крайней мере для SBCL, просто посмотри на вывод, там сплошные предупреждения, что ничего не удалось оптимизировать.

> Ты намеренно делаешь постоянно ошибку в применении усилительной ни


Русский, а в последующем английский, языки наиболее были мои самые проблемные предметы сначала в школе (начиная с самых младших классов), а потом и в универе. Извините мою врождённую безграмостнось :(

** ()
[#]  

Для справедливости PLT Scheme (immutable, время в мс):

(define (test)
  (define (loop-outer i n)
    (define (loop-inner j n)
      (if (= j 10000)
        n
        (loop-inner (+ j 1) (modulo (+ n (modulo (* i j) 100)) 47))))
    (if (= i 10000)
      n
      (loop-outer (+ i 1) (loop-inner 0 n))))
  (loop-outer 0 0))

> (time (test))
cpu time: 12721 real time: 12764 gc time: 0
39
# time python lortest.py 
('answer: ', 39)

real	0m28.070s
user	0m28.046s
sys	0m0.016s
** ()
[#] Ответ на: комментарий от archimag 09.02.2010 1:00:08  

> Там тесты полный отстой, по крайней мере для SBCL, просто посмотри на вывод, там сплошные предупреждения, что ничего не удалось оптимизировать.

напиши лучше и сравни результат

**** ()
[#] Ответ на: У меня от anonymous 09.02.2010 0:58:53  

Re: У меня

Рекомендую заменить foldl на foldl' для ускорения

()
[#]  
Love5an

Результаты, кучею собранные:

http://img8.imageshack.us/img8/7633/sbclpythonc.png

вариант на лиспе:

(defun test ()
  (let ((r 0))
    (dotimes (i 10000)
      (dotimes (j 10000)
        (setf r (mod (+ r (mod (* i j) 100)) 47))))
    r))

(defun test-opt ()
  (declare (optimize (speed 3) (space 0) (safety 0) (debug 0)))
  (let ((r 0))
    (declare (type fixnum r))
    (dotimes (i 10000)
      (dotimes (j 10000)
        (setf r (mod (+ r (mod (* i j) 100)) 47))))
    r))

(defun main ()
  (time (format t "Answer: ~d~%" (test)))
  (time (format t "Optimized version. Answer: ~d~%" (test-opt)))
  (quit))

(save-lisp-and-die "speedtest-sbcl"
                   :executable t
                   :toplevel #'main)

И вариант на Си:
#include <stdio.h>

int test()
{
    int r = 0;
    for(int i = 0; i<10000; ++i)
        for(int j = 0; j<10000; ++j)
            r = (r + (i * j) % 100) % 47;
    return r;
}

int main(void)
{
    int r = test();
    printf("Answer: %d", r);
}
Вариант на Python такой же, как был, только, как видно, компилируется. Что интересно, от компиляции python результат работы не улучшил, если натравить интерпретатор прямо на файл с кодом - результат такой же.

Итог - современная реализация Common Lisp медленнее Си, фактически ассемблера, в ~1.5 раза(а если без механических оптимизаций, с длинной арифметикой, то всего в ~3.5), а современная реализация Python - в ~30 раз в лучшем случае.

()
[#] Ответ на: комментарий от Love5an 09.02.2010 1:02:13  

> Итог - современная реализация Common Lisp медленнее Си, фактически ассемблера, в ~1.5 раза

опции компилятора в студию

**** ()
[#] Ответ на: комментарий от dmitry_vk 09.02.2010 0:30:15  
Love5an

>Подтверждаю, у него FFI уже несколько лет сломан и не чинится.

А где он сломан?
У меня библиотека на нем нормально запускается, а там и коллбэки к winapi, и вызов com.

()
[#] Ответ на: комментарий от lester 09.02.2010 1:01:36  

>> Там тесты полный отстой, по крайней мере для SBCL, просто посмотри на вывод, там сплошные предупреждения, что ничего не удалось оптимизировать.
>напиши лучше и сравни результат

О чём и речь. У меня некоторые тесты там вызывают, скажем... удивление.

>Русский, а в последующем английский, языки наиболее были мои самые проблемные предметы сначала в школе (начиная с самых младших классов)

Почитай классиков наших, они выправляют это

anonymous ()
[#] Ответ на: комментарий от Love5an 09.02.2010 1:04:38  

ну и опять же, если говорить "Common Lisp медленнее Си в столько раз" - то надо хотя бы на icc еще прогнать

**** ()
[#] Ответ на: У меня от anonymous 09.02.2010 0:58:53  
mv

> Хаскел:

А ключики оптимизации какие есть? Должно быть быстрее.

***** ()
[#] Ответ на: комментарий от Love5an 09.02.2010 1:04:38  
Love5an

Кстати, там версия SBCL на картинку не влезла, SBCL - 1.0.35.6, win32

()
[#] Ответ на: комментарий от lester 09.02.2010 1:01:36  

> напиши лучше и сравни результат

Спасибо, но у меня есть чем заняться более полезным.

** ()
[#] Ответ на: комментарий от Love5an 09.02.2010 1:02:13  
antony986

>а современная реализация Python - в ~30 раз в лучшем случае

смотри выше про psyco

* ()