LINUX.ORG.RU

den73 переходит на Python


0

0

Вот. Вскрытие показало, что Common Lisp можно было вылечить... Но стоит ли оно того? Интересно, какие есть подходы к созданию быстрой среды исполнения Python?

★★★★★

>den73 переходит на Python

бедный Python :(

jtootf ★★★★★
()

>den73 переходит на Python

где ссылка на источник?

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

Как рантайм-среда лисп, конечно же, на четыре головы выше питона. Но... в жизни имеют значение много факторов. А лисп всё же стоит знать, потому что рантайм-сред такого качества больше в природе нет. Наверное, нужно знать не Common Lisp, а один из его предшественников. Или одну из реализаций (лучше всего - Allegro).

den73 ★★★★★
() автор топика

А есть кто пользует Pyrex? Насколько это хорошая вещь? Такой вариант, как "прототип на питоне - боевое приложение на Pyrex" имеет смысл? Тормознутость питона всё же пугает меня.

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

> Ну, не хочешь - не знай. Так и умрёшь непросветлённым.

Ну если после просветления переходят на пистон, то, может, ну его нафиг это просветление? Просветляют, случайно, не рентгеном? :)

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

Одного старого игрока на скачках спросили: "вы играете уже 40 лет. Вы чаще выигрывали или проигрывали?" Он ответил: "бывало разное, но всё же, честно говоря, чаще я проигрывал". - "А зачем же Вы тогда играли?" - "Я получал от этого удовольствие".

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

Просветление трансцендентально и не может быть передано словами

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

> Такой вариант, как "прототип на питоне - боевое приложение на Pyrex" имеет смысл?

Нет. Pyrex создавался для написания _фрагментов_ приложений.

> Тормознутость питона всё же пугает меня.

Тогда пиши на Си. Или сразу на ассемблере.

P.S. Pyrex постепенно выходит из употребления и заменятеся Cython.

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

> Тогда пиши на Си. Или сразу на ассемблере
Ну вообще-то есть высокоуровневые и при этом быстрые языки, как-то:
ocaml/F#, haskell, common lisp/clojure, ну и и ещё много чего. Питон в этом отношении малость... э... убогенький уродился.

>> Такой вариант, как "прототип на питоне - боевое приложение на Pyrex" имеет смысл?

>Нет. Pyrex создавался для написания _фрагментов_ приложений.

Ага. Значит "прототип на питоне - переписывание узких мест на Cython"?

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

> Ну вообще-то есть высокоуровневые и при этом быстрые языки, как-то: ocaml/F#, haskell, common lisp/clojure, ну и и ещё много чего. Питон в этом отношении малость... э... убогенький уродился.

Ну так переходи на них, в чем проблема?

> Значит "прототип на питоне - переписывание узких мест на Cython"?

Да.

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

А, вот и ещё вопрос. После лиспа меня шокировало, что я не могу вырезать пример из веб-страницы и бухнуть его в REPL. Мешают поганые многоточия. Есть ли способ решения этой проблемы? Также меня очень сильно обломало то, что при нажатии M-P в Emacs мне выходит не всё предложение целиком? а только одна строчка. Т.е., я не нашёл способа, как мне вызвать в REPL предыдущее предложение, подправить его и запустить по-новой. В лиспе я этим занимаюсь постоянно и это естественно, как дыхание.

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

> После лиспа меня шокировало, что я не могу вырезать пример из веб-страницы и бухнуть его в REPL. Мешают поганые многоточия.

Не знаю. Я не вырезаю примеров из веб-страниц, и даже REPL пользуюсь только как калькулятором.

>> Ну так переходи на них, в чем проблема?

> Только что оттудова.

Успел поработать на "ocaml/F#, haskell, common lisp/clojure, ну и и ещё много чего"? Крут, ничего не скажешь.

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

>После лиспа меня шокировало, что я не могу вырезать пример из веб-страницы и бухнуть его в REPL

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

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

Нет. Успел поработать только на CL и хорошо прочувствовал обе его стороны. Лисп гениален, но он сливает современным языкам из-за нескольких довольно небольших (но неизлечимых) проблем. На ocaml поработал мой товарищ и говорит, что он хуже хаскеля и энергия перетекает от окамля в хаскель. Соответственно, окамль (который и так никому был не нужен) умирает окончательно. Хаскель же мне не нравится извращённым отношением к жизни и это мнение - окончательное. Кроме того, и Хаскель тоже никому не нужен (вакансий - около нуля). Clojure - это тоже лисп, со всеми его проблемами, да к тому же ещё в болоте, где жабы водятся. Кроме того, Clojure подхватил от хаскеля нездоровый ген чистой функциональности.

У питона только два недостатка - это тормоза и отсутствие макросов (хотя наличие exec и тройных кавычек отчасти искупает второй недостаток).

А вообще, в какой среде запускают питоновый REPL и редактируют питоновые программы? Чтоб там был completion, definition search. Я не смотрел пока, может это и в EMACS можно, но из этого не следует, что им нужно пользоваться :)

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

>Хаскель тоже никому не нужен (вакансий - около нуля).

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

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

> У питона только два недостатка - это тормоза

Да что ты такое пишешь на Питоне, что тебе так важно его быстродействие?

> и отсутствие макросов

EasyExtend нужна твоя помощь!!1111

> А вообще, в какой среде запускают питоновый REPL

ХЗ. В терминале, наверное. Есть какая-то библиотека для tab completion, но я ей не ползуюсь.

> и редактируют питоновые программы? Чтоб там был completion, definition search.

Я использую PyDev.

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

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

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

Спасибо за ключевое слово EasyExtend, я давно искал, где же там макросы. Хотя более интересен макропроцессор собственно для python, в стиле common-lisp:defmacro. Есть такое в природе?

За PyDev тоже спасибо, буду смотреть. А что, в нём разве нет встроенного REPL? Странно это после лиспа...

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

> Хотя более интересен макропроцессор собственно для python, в стиле common-lisp:defmacro

Если я правильно понимаю, это делается в EE.

> в нём разве нет встроенного REPL?

Есть. Но мне он показался кривым и убогим.

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

>Да что ты такое пишешь на Питоне, что тебе так важно его быстродействие?

Если не важно быстродействие, то почему бы не использовать более удобный и простой Visual Basic?

Karapuz ★★★★★
()

> den73 переходит на Python

Кто такой? Чем знаменит? Почему не php? Почему не в Talks? :]

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

О нет, затмение - это ужас :( Будем посмотреть ещё. Как насчёт IDLE?

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

>Лисп гениален, но он сливает современным языкам из-за нескольких довольно небольших (но неизлечимых) проблем.

тема не раскрыта
можно поподробней?

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

> Ну и я что-то не видел VB под Linux

Под моно уже есть вроде. Да, и почему не mono/Boo или даже mono/C#, раз нужна производительность?

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

>>Лисп гениален, но он сливает современным языкам из-за нескольких довольно небольших (но неизлечимых) проблем.
> тема не раскрыта

> можно поподробней?

Ну вообще, о покойниках лучше или хорошее, или никак. Чем гениален:
- динамичный рантайм, где можно элементарно создавать и менять классы и функции в рантайме, при этом можно генерить и нативный код с инлайнами и type inference. Если класс поменялся, то все не затронутые данные живущих экземпляров этого класса сохраняются.
- не только функции, но даже идентификаторы в лиспе являются первоклассными объектами, в отличие, например, от того же хаскеля (если я не путаю про хаскель).
- мощный REPL. s-выражения не особо хорошо читать, зато ими очень удобно жонглировать в редакторе, т.к. их границы видны.
- возобновляемые ошибки. Есть такое понятие "restart". Если происходит ошибка времени выполнения, в большом количестве случаев можно что-то подкрутить и попробовать ещё раз, не разворачивая стека до обработчика исключений, как в какой-нибудь жабе. Также можно делать свои ошибки с возможность рестарта.
- ООП с множественной диспетчеризацией (можно делать виртуальные функции, в которых конкретный код определяется типом нескольких параметров, а не только одного, как в С++ и жабе).
- макросы и расширяемый компилятор. Новые конструкции языка делаются ну совершенно с полпинка. Шаблоны С++ нервно курят в сторонке (рядом курит и Nemerle)
- достаточно быстр для языка со сборкой мусора и динамической типизацией. Едва отстаёт по скорости от серверной жабы, при этом жрёт меньше памяти раза в два-три.
- ФП сегодня никого не удивишь, но в лиспе нет нужды в поделиях типа STL. Те идеи, которые в STL реализованы через задницу, в лиспе реализуются очень естественно (хотя я не буду говорить о скорости выполнения - просто не знаю)

Чем плох?
- Плохо устроена модульность
- класс не создаёт пространства имён, как в Java и C++.
- статической типизации по сути нет, из-за этого ООП несколько тормозит (хотя я думаю, всё ещё в разы быстрее того же питона)
- ООП плохо масштабируется, поскольку функции не принадлежат классам. В С++ можно иметь foo::add(один аргумент) и bar::add(два аргумента)
а в лиспе сигнатура функции фиксирована и не зависит от типов.
- во многих конструкциях действительно есть лишние скобки
- компилятор редко показывает конкретную строчку с ошибкой
- вообще, со сборкой плоховато
- лисперы - в основном теоретики и редко доводят хорошие идеи до
полного и полезного воплощения

И болше не спрашивайте меня про лисп

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

Ну что-то я не очень фанатею от моно. Питон - это то же самое, но в меньшем количестве слоёв. ИМХО.

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

> класс не создаёт пространства имён, как в Java и C++.

А зачем? Подход-то совсем другой.

> ООП плохо масштабируется, поскольку функции не принадлежат классам.

Проблема есть, но частично решается пакеджами.

> во многих конструкциях действительно есть лишние скобки

Иначе не было бы defmacro

linuxfan
()

Вроде были какие-то проекты по скрещиванию PyPy c LLVM. С блэкджеком, шлюхами и прочими сопутствующими товарами.

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

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

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

> Вроде были какие-то проекты по скрещиванию PyPy c LLVM.
Что-то я в это как-то не верю. Может быть, зря...
Да я вообще не верю в JIT, по правде говоря. Что-то в нём есть такое...
лохотронистое... Именно, что блекджек и шлюхи. Cython кажется идейно гораздо более правильным (и кстати, видимо, гораздо более простым по устройству).

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

> возобновляемые ошибки. Есть такое понятие "restart". Если происходит ошибка времени выполнения, в большом количестве случаев можно что-то подкрутить и попробовать ещё раз, не разворачивая стека до обработчика исключений, как в какой-нибудь жабе. Также можно делать свои ошибки с возможность рестарта.

Тут поподробней пожалуста. Пример что ли. Чем это отличается от обработчика в объемлющем блоке.

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

> И болше не спрашивайте меня про лисп

Лучше все равно не найдёшь.

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

> Тут поподробней пожалуста.

Популярные книжки по Коммон Лиспу ищутся в гугле с полпинка.

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

> Популярные книжки по Коммон Лиспу ищутся в гугле с полпинка.

И чтобы найти нужны мне 1%, придется прочесть 99% шлака.

Ты лучше скажи, как это по английски называется (Restartable Exceptions?)

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

> Тут поподробней пожалуста. www_linux_org_ru, а ты меня обидел - не привёл пример как разбоксить в С++. Приведи пример и будет снова мир и дружба.

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

Спасибо, и его тоже гляну.

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

> www_linux_org_ru, а ты меня обидел - не привёл пример как разбоксить в С++. Приведи пример и будет снова мир и дружба.

Весьма НЕ советую использовать С++, не понимая его до конца -- это надо было понять, а не обижаться. Если очень хочется разбоксинг, (на всякий случай) опиши контекст -- где зачем для чего.

Кстати, вся эта история имеет положительный момент, т.к. из нее я понял, что лисп юзают ради poor man's algebraic data types.

З.Ы. Заодно там можно убрать лишние слова boxed.

З.Ы.Ы. У плюсов *свои* грабли.

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

(defun restartable-/ (a b)
  (restart-case 
    (/ a b) 
    (:use-values (&key (a a) (b b)) (restartable-/ a b))    
    (:return-zero () (return-from restartable-/ 0))))

(defun restart-example (x y &key (try-again t))
  (handler-bind
    ((error (lambda (e) 
              (declare (ignore e))
              (write-line "Exception in restartable-/")
              (if try-again
                (let ((a (progn (write-line "Enter new x:") 
                                (read)))
                      (b (progn (write-line "Enter new y:") 
                                (read))))
                  (apply #'invoke-restart
                         :use-values
                         (append (if a (list :a a))
                                 (if b (list :b b)))))
                (invoke-restart :return-zero)))))
    (restartable-/ x y)))

Вкратце - исключения не рушат стек вызовов.

guest-3484-2009
()
Ответ на: комментарий от den73

>ООП плохо масштабируется, поскольку функции не принадлежат классам. В С++ можно иметь foo::add(один аргумент) и bar::add(два аргумента)
а в лиспе сигнатура функции фиксирована и не зависит от типов. 

Не вижу проблем:


(defclass foo () ())
(defclass bar () ())

(defgeneric add (object &key))
(defmethod add ((object foo) &key (x 0))
  (1+ x))
(defmethod add ((object bar) &key (a 0) (b 0))
  (+ x y))

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