LINUX.ORG.RU

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


0

1

питон:

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

> SBCL, тоже терпения не хватило.

млять, как вы так запускаете?

[code] $ time python lor.py ('answer: ', 39)

real   0m37.322s user   0m36.178s sys   0m0.056s $ time sbcl --script «lor.lisp» 39 real   0m4.235s user   0m4.180s sys   0m0.016s

[/code]

anonymous
()
Ответ на: комментарий от anonymous

SBCL, тоже терпения не хватило.

млять, как вы так запускаете?

$ time sbcl --script "lor.lisp" 
39
real	0m4.217s
user	0m4.184s
sys	0m0.028s

$ time python lor.py
('answer: ', 39)

real	0m41.251s
user	0m40.887s
sys	0m0.148s
anonymous
()
Ответ на: комментарий от vertexua

> Я создал бинарник в sbcl - этогно не достаточно?

Не похоже, чтобы ты говорил об образе. Какой еще бинарник?

dave ★★★★★
()
Ответ на: комментарий от anonymous

> млять, как вы так запускаете?

Ну, если не сделать в конце (quit) и загружать через --load, то, конечно, никакого терпения не хватит ;)

archimag ★★★
()
Ответ на: комментарий от tailgunner

> с маленьким критическим модулем на Си - классический

питоновский стиль.


Ага, видели мы эти ваши «маленькие критические модули», я не так давно подробно разбирался с потрохами pymssql и lxml - это ж... там то и питона особо и нет, один убогий C, и Cython это ваш уродец ещё тот, эх, то ли дело на CL биндинги писать...

archimag ★★★
()
Ответ на: комментарий от tailgunner

> Он IO-bound, с маленьким критическим модулем на Си - классический питоновский стиль. Нафига вообще нужны эти суперкомпиляторы? :)

Ну, да. Что-то в этом определенно есть. Неудивительно, что питон так популярен. Для многих задач его бывает достаточно. К тому же предельно прост. В случае чего можно переписать некоторые куски на си. Но лично мне больше нравится лисп :)

dave ★★★★★
()
Ответ на: комментарий от archimag

>> с маленьким критическим модулем на Си - классический питоновский стиль.

Ага, видели мы эти ваши «маленькие критические модули», я не так давно подробно разбирался с потрохами pymssql и lxml - это ж...

Доо, а на Лиспе никто не пишет говнокода, потому что Лисп волшебный :)

и Cython это ваш уродец ещё тот, эх, то ли дело на CL биндинги писать...

Для _биндингов_ в Питоне есть ctypes (+ gccxml), вряд ли <чотамулиспа> намного круче. А у Cython, при всем его уродстве, я в Лиспе аналогов просто не знаю, но Cython не для биндингов сделан.

tailgunner ★★★★★
()
Ответ на: комментарий от Love5an

Благодаря посту, который я цитирую могу добавить Лисп. Запустил у себя, результаты по оптимизированной версии для увеличной в 10 раз границы по i

Python/Psyco - 23.6 s  
Lisp SBCL - 12.23 s
Mono/AOT - 10.1 s  
Java (server,Xbatch) - 7.07 s  
C++ (O6) - 6.91 s 
vertexua ★★★★★
()

кстати, находящийся в процессе порт SBCL под винду показывает лучший результат на этом тесте, чем порт под линух:

* (time (test))

Evaluation took:
  0.970 seconds of real time
  0.967206 seconds of total run time (0.967206 user, 0.000000 system)
  99.69% CPU
  2,590,987,534 processor cycles
  0 bytes consed

39
*

впрочем возможно это проблемы убунты, а не SBCL

korvin_ ★★★★★
()
Ответ на: комментарий от tailgunner

> Доо, а на Лиспе никто не пишет говнокода, потому что Лисп волшебный :)

У многих на этом форуме вера в карму языка, технологии или приложения. Их просто неиипут факты

vertexua ★★★★★
()
Ответ на: комментарий от tailgunner

>Для _биндингов_ в Питоне есть ctypes (+ gccxml), вряд ли <чотамулиспа> намного круче.

CFFI + CFFI-GROVEL довольно крутые. Я ctypes особо не видел, поэтому детально сравнивать не могу. А что в ctypes особо крутого?

dmitry_vk ★★★
()
Ответ на: комментарий от dmitry_vk

> Я ctypes особо не видел, поэтому детально сравнивать не могу.

Ты его не видел потому, что его включили только с версии 2.5 в поставку, а вообще он ниже 2.3 в принципе не работает, как результат, большинство пакетов обходятся без этого чуда.

А что в ctypes особо крутого?


Это такой FFI, т.е. можно писать обёртки на чистом python и не надо уметь писать модули на C. Но насколько хороший не знаю, не использовал.

archimag ★★★
()
Ответ на: комментарий от Love5an

Вполне правдоподобно. В большинстве случаев на вычислительных алгоритмах быстрее всего C++. Java работает с маленьким отставанием.

Потом идут более примитивно устроенные вещи. Сначала Mono, потом Lisp, потом уже и Python. Все тестировал с максимальными оптимизациями, как полагается, на Mono даже AOT сделал. Жаль на Java такого нет, как она умудряется гонять как C++ и при этом еще байткоды-компилировать

vertexua ★★★★★
()
Ответ на: комментарий от Love5an

Запустил принудительно -client, работает 13 сек. Это режим ускореного стартапа, так что он не самый удачный для высокопроизводильного софта. Сейчас почти везде по дефолту -server. Но для десктопных приложений я рекомендую -client, так как меньше памяти и шустрее грузится

vertexua ★★★★★
()
Ответ на: комментарий от dmitry_vk

> CFFI + CFFI-GROVEL довольно крутые. Я ctypes особо не видел, поэтому детально сравнивать не могу. А что в ctypes особо крутого?

А я видел только примеры на CFFI в флеймах, похожих на этот :) В ctypes нет ничего «особо крутого», но на поверхностный взгляд это то же, что и CFFI. Неведомой хни GROVEL в Питоне, правда, нет, но есть генераторы биндингов на основе gccxml.

tailgunner ★★★★★
()
Ответ на: комментарий от archimag

>> Я ctypes особо не видел, поэтому детально сравнивать не могу.

Ты его не видел потому, что его включили только с версии 2.5 в поставку, а вообще он ниже 2.3 в принципе не работает, как результат, большинство пакетов обходятся без этого чуда.

Python 2.3 вышел лет 6-7 назад, если что. До этого был SWIG.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>А у Cython, при всем его уродстве, я в Лиспе аналогов просто не знаю, но Cython не для биндингов сделан.

Подобный костыль лиспу просто ненужен.

cvb
()
Ответ на: комментарий от korvin_

>под винду показывает лучший результат на этом тесте, чем порт под линух:

Я с этим ещё на OCaml сталкивался: http://balancer.ru/_bors/igo?o=forum_post__229750 Версия под Linux порождала гораздо более медленный код.

KRoN73 ★★★★★
()
Ответ на: комментарий от cvb

>> А у Cython, при всем его уродстве, я в Лиспе аналогов просто не знаю, но Cython не для биндингов сделан.

Подобный костыль лиспу просто ненужен.

Для начала, в Лиспе такое просто невозможно. После этого обсуждение «нужности» как бы бессмысленно.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Для начала, в Лиспе такое просто невозможно.

Ну вот это ты зря. Генерация кода на низкоуровневых языках (C, Fortran) из Лиспа очень много где используется, в том числе и для биндингов, хотя есть и более интересные применения. Да и на высокоуровневых тоже (см., например, Parenscript).

И всякие низкоуровневые варианты Лиспа тоже есть, BitC например.

anonymous
()
Ответ на: комментарий от anonymous

> Генерация кода на низкоуровневых языках (C, Fortran) из Лиспа очень много где используется

Почему именно из Лиспа? Что дает генерация кода именно на нем?

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

> Почему именно из Лиспа? Что дает генерация кода именно на нем?

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

anonymous
()
Ответ на: комментарий от anonymous

>> Для начала, в Лиспе такое просто невозможно.

Ну вот это ты зря. Генерация кода на низкоуровневых языках (C, Fortran) из Лиспа очень много где используется, в том числе и для биндингов,

Дело не в генерации, а втом, что единого C API для Лиспа не существует. То есть для каждого варианта был бы свой «Cython». Что как бы делает идею бесполезной.

И всякие низкоуровневые варианты Лиспа тоже есть, BitC например.

Да там от Лиспа только синтаксис. И нет больше BitC - Шапиро снова кинул :)

tailgunner ★★★★★
()
Ответ на: комментарий от vertexua

>Потом идут более примитивно устроенные вещи. [...] потом Lisp [...]
Нихуя себе примитивно устроенные вещи!
Наоборот может, не?

У меня:
SBCL - 8.1 секунды (совсем без оптимизаций - 18 секунд)
g++ -O3(и -O2 тоже) - 4.9 -O0 - 9.6
msvc++ /O2 - 7.0 секунд
.NET - 7.5
Java -client- 9.3
Python - 138.2 секунды
Python/Psyco - 30.5

Love5an
()
Ответ на: комментарий от anonymous

Только он высокоуровневый? При этом почти только Lots of Idiotic Stupid Parenthesis имеет такой плохочитаемый синтаксис. Ну зачем же закрывать 10 скобок? Есть Ruby, Groovy, Python, Java - все на шару генерируют код

vertexua ★★★★★
()
Ответ на: комментарий от tailgunner

>C API для Лиспа не существует.
Существует. CFFI.
Более того, даже не используя его, написать свои обертки над FFI нужных реализаций - не проблема.

Love5an
()
Ответ на: комментарий от Love5an

Вопрос, зачем запускать java -client? Я ведь обяснил. Когда я тестировал, то я честно запустил все в самом быстродейственном режиме

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

>Только он высокоуровневый?
Он сверхвысокоуровневый, вообще говоря.

При этом почти только Lots of Idiotic Stupid Parenthesis имеет такой плохочитаемый синтаксис.

Ты сам себе диагноз ставишь? Таким образом расшифровывают аббревиатуру только идиоты, которые неосилили. Это вдвойне верно учитывая что «LISP» это неправильное написания, когда мы говорим о современных членах этого семейства языков.

Скобки это НЕ проблема. Точка.
Не знакомому с программированием человеку синтаксис сей, жаб и питонов кажется на порядки более угребищным.

Love5an
()
Ответ на: комментарий от vertexua

> Почему именно из Лиспа?

Потому что он лучше всего подходит для кодогенерации в любом виде. Потому что макры.

Что дает генерация кода именно на нем?

Удобство, только и всего. На чем либо другом это делать намного сложнее.

anonymous
()
Ответ на: комментарий от tailgunner

> Покажи мне h-файл со стандартным C API, общим у CLISP и SBCL.

Откуда может взять C API у того, что на нём не написано? И зачем оно нужно?

archimag ★★★
()
Ответ на: комментарий от Love5an

> Он сверхвысокоуровневый, вообще говоря.

))) Ультрамеговысокоуровневый. Я спрашивал почему нельзя генерировать код на чем то более... Хм, conventional

Таким образом расшифровывают аббревиатуру только идиоты, которые неосилили.

Так разшифровал в виде шутки один знакомый эксперт по Лиспу, он не любит этот недостаток, который загрязняет код очень сильно.

Скобки это НЕ проблема. Точка.

Я думаю только словами в проблеме точку не поставить.

Не знакомому с программированием человеку синтаксис сей, жаб и питонов кажется на порядки более угребищным.

Даже если я не буду спорить с бредовостью утверждения, то позвольте задам вопрос. Зачем синтаксис ЯП не знакомому с программированием человеку? Если вы хотите сказать что первый языка для программиста в школе или универе должен быть Лисп, то приведите пример места, где он преподается первым, базовым или основным? Я думаю что эго не ставят, ибо он всем вывернет мозги и покалечит непониманием работы компьютера

vertexua ★★★★★
()
Ответ на: комментарий от anonymous

Спасибо за ответ в адекватном тоне. Но все же интерестно, что именно удобнее? Какие синтаксические конструкции очень сокращают (в разы) код по сравнению с к примеру Ruby или Scala?

vertexua ★★★★★
()
Ответ на: комментарий от anonymous

> Потому что он лучше всего подходит для кодогенерации в любом виде.

Потому что макры.


Ну, подобное утверждение не выглядит обоснованным :)

archimag ★★★
()
Ответ на: комментарий от vertexua

> приведите пример места, где он преподается первым, базовым или основным

до недавнего времени MIT

korvin_ ★★★★★
()
Ответ на: комментарий от vertexua

> о приведите пример места, где он преподается первым,

базовым или основным?


До самого последнего времени таким местом был MIT, достаточно убедительно?

archimag ★★★
()
Ответ на: комментарий от vertexua

> Но все же интерестно, что именно удобнее? Какие синтаксические конструкции очень сокращают (в разы) код по сравнению с к примеру Ruby или Scala?

Конкретно две конструкции: defmacro и backquote. Вот так вот, тупо, примитивно, но работает офигенно.

Да, можно конечно всякие там ADT использовать, писать на хаскеллях с использованием scrap-your-boilerplate, но на практике это выходит сложнее и дольше, чем на тупом лиспе.

Собственно, кодогенерация - это вообще единственное, на что лисп годится. Но зато это он делает лучше всех прочих.

anonymous
()
Ответ на: комментарий от vertexua

Да, и не забудьте обосновать почему Java и C имеют более ужасный синтаксис для новичка, и почему такой специализированный язык как Lisp - панацея от всех проблем

vertexua ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.