Где бы почитать про цену вызовов функций, созданий объектов и прочих базовых вещей в динамических языках?.
Хочется понять насколько можно наглеть с уровнями абстракции и количеством вызовов..
Язык не принципиален, но, если кому то надо, то: Python, Ruby, PHP, PERL..
F>Где бы почитать про цену вызовов функций, созданий объектов и прочих базовых вещей в динамических языках?. F>Хочется понять насколько можно наглеть с уровнями абстракции и количеством вызовов.. F>Язык не принципиален, но, если кому то надо, то: Python, Ruby, PHP, PERL..
По сравнению с компилируемыми языками цена ужасно высокая.
Но какое отношение это имеет к наглости? Лишние уровни абстракций не нужны в любом случае, расходы на полезные уровни оправданы в любом случае. И что, вам когда-нибудь серьёзно приходилось решать задачу, где процессор был узким местом?
Здравствуйте, Temoto, Вы писали:
T>По сравнению с компилируемыми языками цена ужасно высокая. T>Но какое отношение это имеет к наглости? Лишние уровни абстракций не нужны в любом случае, расходы на полезные уровни оправданы в любом случае.
увы не всегда оправданы, а дополнительные уровни повышают удобство..
T>И что, вам когда-нибудь серьёзно приходилось решать задачу, где процессор был узким местом?
ну, к примеру, highload web-приложение на интерпретируемом языке.. или приложение с 3D-графикой..
тут можно, конечно, поспорить на тему, что это можно/надо делать на компилируемых языках, но такой вариант не интересует..
T>>По сравнению с компилируемыми языками цена ужасно высокая. T>>Но какое отношение это имеет к наглости? Лишние уровни абстракций не нужны в любом случае, расходы на полезные уровни оправданы в любом случае.
F>увы не всегда оправданы, а дополнительные уровни повышают удобство..
Значит речь идёт не об абстрактной цене, а о цене в каком-то конкретном случае, где расходы не оправданы. В изначальном вопросе об этом не было речи.
T>>И что, вам когда-нибудь серьёзно приходилось решать задачу, где процессор был узким местом?
F>ну, к примеру, highload web-приложение на интерпретируемом языке.. или приложение с 3D-графикой..
highload web приложение заткнулось на процессоре? Вы что-то путаете.
Движок 3D графики, само собой, будет реализован ниже, не на Python/Perl/Ruby.
Вот пример: http://www.panda3d.org/ движок на плюсах, управляется программой на питоне. Действительно, авторы сознательно жертвуют абстракциями и "питоничностью" кода в пользу производительности.
F>тут можно, конечно, поспорить на тему, что это можно/надо делать на компилируемых языках, но такой вариант не интересует..
Тут можно поспорить на тему "у вас правда проблемы с производительностью или просто поговорить".
Здравствуйте, Temoto, Вы писали:
F>>увы не всегда оправданы, а дополнительные уровни повышают удобство.. T>Значит речь идёт не об абстрактной цене, а о цене в каком-то конкретном случае, где расходы не оправданы. В изначальном вопросе об этом не было речи.
в изначальном вопросе было как раз об абстрактной цене.. никакой конкретный случай не был упомянут..
T>highload web приложение заткнулось на процессоре? Вы что-то путаете.
если ты никогда с таким не сталкивался, то это не значит, что так не бывает..
F>>тут можно, конечно, поспорить на тему, что это можно/надо делать на компилируемых языках, но такой вариант не интересует.. T>Тут можно поспорить на тему "у вас правда проблемы с производительностью или просто поговорить".
лучше на тему "У вас правда есть ответ на стартовый вопрос?"
T>>highload web приложение заткнулось на процессоре? Вы что-то путаете.
F>если ты никогда с таким не сталкивался, то это не значит, что так не бывает..
А вы не могли бы рассказать где была затычка, если сталкивались? Шаблон долго рисовался или ещё что?
F>>>тут можно, конечно, поспорить на тему, что это можно/надо делать на компилируемых языках, но такой вариант не интересует.. T>>Тут можно поспорить на тему "у вас правда проблемы с производительностью или просто поговорить".
F>лучше на тему "У вас правда есть ответ на стартовый вопрос?"
Я не пытаюсь грубить. "Просто поговорить" это отличный повод, он ничем не хуже, это не должно обижать. Но если обидел, то прошу прощения.
На стартовый вопрос я ответил сразу. Настолько же абстрактно, насколько он задан. Цена велика.
Здравствуйте, neFormal, Вы писали: F>Где бы почитать про цену вызовов функций, созданий объектов и прочих базовых вещей в динамических языках?.
Какое-то время назад была тут тема про lua
Здравствуйте, Temoto, Вы писали:
T>>>highload web приложение заткнулось на процессоре? Вы что-то путаете. F>>если ты никогда с таким не сталкивался, то это не значит, что так не бывает.. T>А вы не могли бы рассказать где была затычка, если сталкивались? Шаблон долго рисовался или ещё что?
веб-приложение может быть не только сайтом..
например, данные могут конвертиться в иной формат продолжительное время, а на время отклика есть требования..
T>На стартовый вопрос я ответил сразу. Настолько же абстрактно, насколько он задан. Цена велика.
вот хочется каких нибудь примеров, сравнений, статистики..
Здравствуйте, neFormal, Вы писали:
T>>>>highload web приложение заткнулось на процессоре? Вы что-то путаете. F>>>если ты никогда с таким не сталкивался, то это не значит, что так не бывает.. T>>А вы не могли бы рассказать где была затычка, если сталкивались? Шаблон долго рисовался или ещё что? F>веб-приложение может быть не только сайтом.. F>например, данные могут конвертиться в иной формат продолжительное время, а на время отклика есть требования..
Ресурсоёмкие компоненты лучше изначально писать на компилируемых языках. В Perl, к примеру, все такие модули написаны на Си, а на собственно Perl лишь обёртка к ним.
T>>>>highload web приложение заткнулось на процессоре? Вы что-то путаете. F>>>если ты никогда с таким не сталкивался, то это не значит, что так не бывает.. T>>А вы не могли бы рассказать где была затычка, если сталкивались? Шаблон долго рисовался или ещё что?
F>веб-приложение может быть не только сайтом.. F>например, данные могут конвертиться в иной формат продолжительное время, а на время отклика есть требования..
Здравствуйте, Temoto, Вы писали:
F>>веб-приложение может быть не только сайтом.. F>>например, данные могут конвертиться в иной формат продолжительное время, а на время отклика есть требования.. T>Ну тут явно речь не про абстракции, правда?
эм.. ну как сказать
мне просто любопытно, если увлечься вызовами функций, созданием объектов и т.п., можно ли потерять заметно в производительности?.
F>>>веб-приложение может быть не только сайтом.. F>>>например, данные могут конвертиться в иной формат продолжительное время, а на время отклика есть требования.. T>>Ну тут явно речь не про абстракции, правда?
F>эм.. ну как сказать F>мне просто любопытно, если увлечься вызовами функций, созданием объектов и т.п., можно ли потерять заметно в производительности?.
Опять вопрос требует более конкретного ответа, чем описание условий. Наверное, у вас всё-таки нет проблемы с производительностью, которую надо решить. То есть вы задумываетесь о преждевременной оптимизации. Или просто поговорить.
Крайности очевидны:
* вы можете навешать 100 или 500 вызовов функций или создания объектов новых классов + вызовов их методов над одним print и разницу заметно не будет
То есть разница, конечно велика, но худший вариант — 4 милисекунды. Всем насрать на 4 милисекунды, а вы можете построить 1000 слоёв абстракций. Достаточно?
* но если вы добавите одну функцию в цикл, который выполняется миллионы раз в секунду, разница будет очень заметна.
>>> timeit.timeit('''f(lambda: 100*200)''', '''def f(g):
for _ in xrange(5*1000*1000):
g()''', number=10)
7.372
>>> timeit.timeit('''f(lambda: (lambda:100*200)() )''', '''def f(g):
for _ in xrange(5*1000*1000):
g()''', number=10)
17.958
Синтетические тесты, как известно, всегда обман. Чтобы не говорить о крайностях нужно иметь конкретную задачу.