LINUX.ORG.RU

[Python][Функциональщина] Медленный не пайтон, а функциональщина


0

0

Разгребаю код на пайтоне, джанго. Писал один интересный человек, который верил в функциональщину. Почти тру лиспотролль.
Что хочу сказать. Его функциональные фишки отжирают овер 90% времени обработки запроса и рендера.
Оптимизировал самое очевидное и получил не хилый профит.
Опыт кодинга на C и D помог не мало.
Пайтон не медленный(а даже если и медленный, то не так уж как говорят), его замедляют люди, юзающие функциональщину без раздумий о том что «находится за сценой».
Когда код, в котором 7 раз создаются новые лиспы с помощью генераторов и вызывается 5+N раз конструкторы, можно написать не менее элегантно не используя принципы и функционал функциональщины.
Вообще, конечно, важно умение использовать инструменты, но с функциональщиной оно наиболее опасно и менее всего очевидно. Увы.
Вот такой вот возгляд с другой стороны на вашу функицональщину. А я пошёл спать.


тормозной код можно писать используя любой подход и язык, К.О.

lester ★★★★ ()

знатный вброс) эдак сразу затронуть темы функциональщины, питона, C и D :)

по сабжу: Медленный не пайтон, а реализация функциональщины в пайтоне.

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

>настоящий программист на любом языке может писать на FORTRAN'е

Ч0рт! Покажите, как на Фортране писать на ЛИСПе! :)

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

Покажите, как на Фортране писать на ЛИСПе!

это надо спросить у лисперов, насколько там реально устроить GOTO

я думаю, это всего лишь вопрос упорства :)

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

>я думаю, это всего лишь вопрос упорства :)

Ну да, в конце концов можно написать Фортран на Лиспе :) (/me вспоминает свои Форто-подобные макросы на TASM и JBForth на Java ;))

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

в конце концов можно написать Фортран на Лиспе :)

Я видел Пролог, написанный на Лиспе, написанном на Форте :)
Полагаю, напейсать Фортран на Лиспе не сложнее, чем Пролог.

Xenesz ★★★★ ()

«Преждевременная оптимизация — корень всех бед» ©

А критические участки можно было переписать на Лиспе.

eugine_kosenko ★★★ ()

не используя принципы и функционал функциональщины.

Берегите парсер смолоду. С принципами понятно, но что вам плохого сделал «функционал»?

Функционал, перечень обязанностей, выполняемых работником

(Не нашёл определения ближе к контексту)

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

У финнов, кажется, в упражнениях предлагалось написать макрос, реализующий фортрановское ветвление по знаку.

eugine_kosenko ★★★ ()

В CL и функциональщина быстрая, не говоря уже о фортран- или си-подобном коде.

А Python просто тормозное говно. Сам по себе.
Defective by design.
И чтобы _рендерер_ на нем писать это надо быть не троллем, тем более не лиспо-, а самым настоящим идиотом, в медицинском смысле этого слова.

Love5an ()

ТС обидно, что даже маргинальная функциональщина куда живее любимого закопаннорожденного D? 8)))

kemm ()

> Когда код, в котором 7 раз создаются новые лиспы с помощью генераторов и вызывается 5+N раз конструкторы, можно написать не менее элегантно не используя принципы и функционал функциональщины.

Пример кода - в студию.

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

>настоящий программист на любом языке может писать на FORTRAN'е

За что люблю питон, так это за то что на нём можно писать на жабоскрипте :)

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

>А критические участки можно было переписать на Лиспе.

Толсто было бы на Хаскеле.

Критические участки желательно писать на языке, который может преобразовыватся в промежуточный код на C. На сколько я знаю, и лисп и хаскель это могут. Всётаки gcc есть почти везде.

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

> Критические участки желательно писать на языке, который может

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

и хаскель это могут



Что за язык «лисп»? Такого языка нет, есть такое семейство довольно разных языков. Если говорить о CL, то транслировать в C может, кажется, только ECL, но это медленная реализация. Что бы код на Common Lisp был быстрым его надо транслировать непосредственно в машинные кода (и ведущие реализации именно так и делают), а трансляция в C в итоге всегда будет очень медленной.

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

>Что за язык «лисп»?

s/лисп/лиспы/

Что бы код на Common Lisp был быстрым его надо транслировать непосредственно в машинные кода

трансляция в C в итоге всегда будет очень медленной

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

При таком подходе, мне пофигу, стоит ли у заказчика flex или bison, мой текстовый конвертор у него заработает, лиш бы стоял gcc. (Реальный пример).

Так что bigloo, chicken, gambc... - вещи очень полезные.

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

настоящий программист на любом языке может писать на FORTRAN'е

Ч0рт! Покажите, как на Фортране писать на ЛИСПе! :)

(DEFUN DOTPR (A B N)
       (LET (I S)
       (TAGBODY
       (SETQ I 0)
       (SETQ S 0.)
 L100  (SETQ S (+ S (* (AREF A I) (AREF B I))))
       (SETQ I (+ I 1))
       (IF (< I N) (GO L100))
       (RETURN-FROM DOTPR S))))
anonymous ()
Ответ на: комментарий от KRoN73

Ч0рт! Покажите, как на Фортране писать на ЛИСПе! :)

Историю знать ведь надо... Как ты думаешь, на чём автор Лиспа написал первый Лисп? :)

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

это надо спросить у лисперов, насколько там реально устроить GOTO

я думаю, это всего лишь вопрос упорства :)

Лисп велик! В нём GO из коробки есть.

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

На ассемблере? :)

Говорят, что это таки Фортран был.

mv ★★★★★ ()

> Медленный не пайтон, а функциональщина на пайтоне.

fixed

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

Ч0рт! Покажите, как на Фортране писать на ЛИСПе! :)

http://ditf.afraid.org/ditf/3%20kurss/Lisp/ex_uzd_risinaajumu_piemeeri.lisp - решение примерных экзаменационных задач по ФП!!!

Особенно порадовала последняя (авторское форматирование сохранено):

(defun calculator () (PROG (res inp1 inp2 inp3)
(setq res 0)

  LOOP
    (print "Please enter your calculation: ")
    (setq inp1 (read))
    (cond ((EQUAL inp1 'done)(go END)))

    (setq inp2 (read))
    (setq inp3 (read))
    (setq res (eval (list inp2 inp1 inp3)))
    (print res)
  (go LOOP)
    
  END
))
naryl ★★★★★ ()
Ответ на: комментарий от mv

>> Ч0рт! Покажите, как на Фортране писать на ЛИСПе! :)

Как ты думаешь, на чём автор Лиспа написал первый Лисп? :)


Тут задача обратная стоит - не ЛИСП на ФОРТРАНе, а ФОРТРАН на ЛИСПе :)

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

Тут задача обратная стоит - не ЛИСП на ФОРТРАНе, а ФОРТРАН на ЛИСПе :)

Какие проблемы? Readtable для модификации ведь доступен :)

mv ★★★★★ ()

Опровергнуть теорию ТС очень просто. Достаточно взглянуть на *абсолютно любое* сравнение Haskell и Python и убедиться, что последний - тормоз даже без своего убогого ФП.

tia, пиши на D, там функциональщина не такая тормозная, как в Python. ;) А в D2 будет ещё и не такая убогая.

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

> Полагаю, напейсать Фортран на Лиспе не сложнее, чем Пролог.

Сложнее, намного. Пролог тупой и примитивный, а Фортран просто большой.

anonymous ()

1) что конкретно ты понимаешь под «функциональщиной» и «функциональными фишками»?

2) без кода не возвращайся

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

Я не понимаю - тут что, кто-то готов спорить, что функциональные структуры данных быстрее мутабельных?

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

> Опровергнуть теорию ТС очень просто. Достаточно взглянуть на *абсолютно любое* сравнение Haskell и Python и убедиться, что последний - тормоз даже без своего убогого ФП.

4.2 и толсто. Иди объясни гуглу про то, как круты мёртворождённые недоязыки и уговори их перейти с питона на какое-нибудь такое поделие

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

> Покажите, как на Фортране писать на ЛИСПе!

Написать компилятор Фортрана. Не?

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

>В CL и функциональщина быстрая, не говоря уже о фортран- или си-подобном коде.

Функциональщина заведомо медленнее. Там же вместо изменения списков делаются их копии. И с остальными переменными так же.

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

Функциональщина заведомо медленнее. Там же вместо изменения списков делаются их копии. И с остальными переменными так же.

почитай уже про редукцию графов, что ли. и Окасаки заодно

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

>Там же вместо изменения списков делаются их копии.

Это если программист не додумается заменить списки итераторами.

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

> почитай уже про редукцию графов, что ли. и Окасаки заодно

И что, уже появились процессоры с аппарадной редукцией графов? Нет ещё? До сих пор ничего быстрее тормознутой STG не придумали? Ну ну.

А Окасаки так и пишет, что функциональные структуры - это тормозятина. Их не за скорость используют, а за транзакционность.

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

>Там же вместо изменения списков делаются их копии. И с остальными переменными так же.

бугагагаг. Вызывающе неверная информация.

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

>4.2 и толсто. Иди объясни гуглу про то, как круты мёртворождённые недоязыки и уговори их перейти с питона на какое-нибудь такое поделие

Что 4.2?

1) Хаскелл быстрее Питона. это факт

2) Функциональное программирование на питоне реализовано не очень хорошо. это тоже факт

Я понимаю, что у тебя ща баттхерт начнется. Как же так, твой любимый питон и медленный?

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

Как ты думаешь, на чём автор Лиспа написал первый Лисп? :)

Небось на Лиспе?

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

> 1) Хаскелл быстрее Питона. это факт

Сравниваем интерпретированный или компилированный хаскелл с питоном? Алгоритм хорошо разрешимый в ФЯ или просто, что под руку попало?

2) Функциональное программирование на питоне реализовано не очень хорошо. это тоже факт

А где было заявлено, что питон функциональный? С элементами функциональности-же. И то Гвидо видимо первоначально их фор фан воткнул ;)

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

> И чтобы _рендерер_ на нем писать это надо быть не троллем...

А _рендерер_, простите чего? 3D, нее?

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