о динамических языках
Mar. 6th, 2013 03:57 amЛюбопытная презентация о том, почему динамически языки все еще тормозят.
Основная мысль автора: в наше время умных JIT нет никакой причины на уровне самого языка, чтобы Питон или Руби выполнялись медленнее C или Джавы; но это неизбежно продолжает происходить, потому что в динамических языках сложилась культура не считать копии объектов и для всего использовать ассоциативные массивы.
Интересная мысль, но спорная. Мне мешают с ней согласиться два соображения.
Во-первых, я поверю, что Питон выполняется со скоростью C/C++, когда это увижу. На примере серьезного размера программы, делающей что-то нетривиальное с вычислениями или обработкой большого количества данных. И желательно в официальной среде Питона, а не PyPy каком-нибудь. То же касается Руби.
Во-вторых, если представить себе такой Питон, в котором мы боимся сделать лишний split(), всем функциям, создающим большие строки, передаем готовые буферы для них, а данные типа ключ-значение не кидаем в первый попавшийся словарь, а аккуратно планируем для них класс с полями - если все это себе представить и содрогнуться, то станет неясно, зачем таким Питоном пользоваться, и почему не писать сразу на C++ (или Джаве, если хочется защиты побольше). Динамические языки типа Питона и Руби так выросли в популярности в последние 15 лет не потому, что у них динамическая типизация (Смоллток их в этом всех перещеголял, а как был маргинальным, так и остался) - а потому, что в них просто, удобно и приятно работать со строками и простыми их коллекциями. Если бояться сделать лишний ' '.join(), то мало кто захочет писать на таком Питоне.
Основная мысль автора: в наше время умных JIT нет никакой причины на уровне самого языка, чтобы Питон или Руби выполнялись медленнее C или Джавы; но это неизбежно продолжает происходить, потому что в динамических языках сложилась культура не считать копии объектов и для всего использовать ассоциативные массивы.
Интересная мысль, но спорная. Мне мешают с ней согласиться два соображения.
Во-первых, я поверю, что Питон выполняется со скоростью C/C++, когда это увижу. На примере серьезного размера программы, делающей что-то нетривиальное с вычислениями или обработкой большого количества данных. И желательно в официальной среде Питона, а не PyPy каком-нибудь. То же касается Руби.
Во-вторых, если представить себе такой Питон, в котором мы боимся сделать лишний split(), всем функциям, создающим большие строки, передаем готовые буферы для них, а данные типа ключ-значение не кидаем в первый попавшийся словарь, а аккуратно планируем для них класс с полями - если все это себе представить и содрогнуться, то станет неясно, зачем таким Питоном пользоваться, и почему не писать сразу на C++ (или Джаве, если хочется защиты побольше). Динамические языки типа Питона и Руби так выросли в популярности в последние 15 лет не потому, что у них динамическая типизация (Смоллток их в этом всех перещеголял, а как был маргинальным, так и остался) - а потому, что в них просто, удобно и приятно работать со строками и простыми их коллекциями. Если бояться сделать лишний ' '.join(), то мало кто захочет писать на таком Питоне.
no subject
Date: 2013-03-06 02:39 am (UTC)no subject
Date: 2013-03-06 03:35 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-06 04:01 am (UTC)(no subject)
From:no subject
Date: 2013-03-06 06:55 am (UTC)no subject
Date: 2013-03-06 07:11 am (UTC)Другое - DSL. На нем чертовски удобно делать DSL
(no subject)
From:(no subject)
From:no subject
Date: 2013-03-06 07:48 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2013-03-06 08:29 am (UTC)Только паттернв говнокода разные. И области применения тоже: какой-нибудь веб против какого-нибудь энтерпрайза или эмбеддеда. Что, в эмбеддеде мало хиндусятины?
no subject
Date: 2013-03-06 05:40 am (UTC)no subject
Date: 2013-03-06 06:19 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-06 07:26 am (UTC)no subject
Date: 2013-03-06 05:54 am (UTC)no subject
Date: 2013-03-06 01:43 pm (UTC)Вроде бы интерпретаторы SQL именно про то, что бы выполнение запросов
for x in X: for y in Y: if x.id == y.id and y.owner == 3: print x.nameбыло за O(1) а не за O(N^2), более того подсказывают админу как настроить индексы
no subject
Date: 2013-03-06 06:09 am (UTC)я не знаю про наше время, но нормальные динамические языки (в том числе, ЧБСХ, тот же Смолток) выполняются вполне себе быстро уже лет тридцать.
а основной причиной всех проблем экосистемы "скриптовых" говноязычков является удивительное невежество её участников.
no subject
Date: 2013-03-06 06:58 am (UTC)no subject
Date: 2013-03-06 06:59 am (UTC)Перл (а он "динамический") быстрее С++, а С++ конечно быстрее Джавы. (ИМХО медленнее Джавы ничего не создано пока)
no subject
Date: 2013-03-06 07:05 am (UTC)Питон быстрее джавы? Wuuut?
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-06 07:05 am (UTC)про скорость Перла - скажите это создателям игровых движков которые их на с++ пишут, по старинке
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2013-03-06 07:56 am (UTC)Насколько я знаю, из реализаций современных динамических языков самая быстрая — LuaJIT. Быстрее чем V8, во всяком случае.
А на счёт использования ассоциативных массивов где не попадя и аналогичных методов — профайлинг никто не отменял. Чтобы сделать программу быстрой, нужно сначало сделать её правильной, а потом переписать 5% самого исполняемого кода.
no subject
Date: 2013-03-06 08:52 am (UTC)Да, это сложно, но вполне возможно.
Я работаю в Talaria Technologies http://talariatech.com/ которая делает нечто подобное не для для Питона и Руби, а для значительно более популярного PHP.
Я сейчас пишу уже 3-ю версию (за 2 года!) наших внутренних строк, и мы уже на 3-й версии наших ассоциативных массивов. Смерть копированию и выделению памяти!
no subject
Date: 2013-03-06 09:28 am (UTC)А я последний год пишу в основном в Tcl. Очень удобен, можно по месту загнуть до DSL.
no subject
Date: 2013-03-06 11:41 am (UTC)А разве питон не пытается в случае присваивания усиленно раздавать ссылки на объекты, а не копировать оные?
Во-вторых, если представить себе такой Питон, в котором мы боимся сделать лишний split(), всем функциям, создающим большие строки, передаем готовые буферы для них, а данные типа ключ-значение не кидаем в первый попавшийся словарь, а аккуратно планируем для них класс с полями - если все это себе представить и содрогнуться, то станет неясно, зачем таким Питоном
Мне почему-то кажется, что без статической типизации подобные дейсвтия будут попросту бессмысленны. Ну и, соответственно, на чём-нибудь крупном мы уткнёмся в эти самые "внезапные" прблемы.
no subject
Date: 2013-03-06 12:44 pm (UTC)во многих случаях она предполагает short-lived programs/processes, где возиться с "правильными" структурами данных и думать об оптимальном выделении памяти есть неинтересная трата времени .. а когда культура (и с ней примеры в tutorials) сложилась, бороться с ней - дело неблагодарное.
кстати, я вполне могу поверить, что большинство простых операций JIT-компилированый код Питона может выполнять со скоростью, сопоставимой с, например, Java или C++ ..
no subject
Date: 2013-03-06 01:40 pm (UTC)Именно!
no subject
Date: 2013-03-06 02:08 pm (UTC)И вообще я считаю, что людей, которые хотят писать большие сложные вещи на языках с динамическими типами, нужно сжигать на кострах вместе со всеми их юнит тестами.
no subject
Date: 2013-03-06 05:18 pm (UTC)