Там в широко распространенное убеждение среди программистов , что более динамичный и слабо типизированных язык, тем более продуктивна программист будет в нем. Гвидо ван Россум (Guido van Rossum) написал о производительности программирования с использованием python в 1998 году и поиске в Интернете. Я все еще вижу людей, ссылающихся на это точное утверждение:
Синтаксически код Python выглядит как исполняемый псевдокод. Разработка программ на Python в 5-10 раз быстрее, чем на C / C ++, и в 3-5 раз быстрее, чем на Java. Во многих случаях прототип приложения может быть написан на Python без написания кода на C / C ++ / Java. Зачастую прототип достаточно функционален и достаточно хорош, чтобы поставляться в качестве конечного продукта, что экономит значительное время на разработку. В других случаях прототип может быть частично или полностью переведен на C ++ или Java - объектно-ориентированная природа Python делает перевод простым процессом.
Была ли эта проблема должным образом оценена с научной точки зрения? Если не для python, то, возможно, для родных языков сценариев, таких как ruby , perl или php ?
Я не ищу объяснений, аналогий или объяснений, почему на них может быть сложно дать ответ, если только мнение исследователей или экспертов не заняло время, чтобы разобраться в проблеме.
Сначала я задавал этот вопрос в скептиках. SE , и кто-то предложил мне задать его и здесь.
источник
Ответы:
В статье 1 Ousterhout о языках сценариев предполагается, что чем выше уровень программирования, тем продуктивнее программист. Если мы примем это, как говорит Бем 2 , число строк, которые программист может написать за заданное время, является постоянным и не зависит от языка или его типа (низкий уровень, системное программирование, сценарии), можно легко поверить в это утверждение. В результате соотношение команд на исходный код строки может быть на порядок (или несколько) лучше с языками сценариев, чем с языками системного программирования.
Так как языки сценариев в значительной степени зависят от готовых утилит для выполнения общих задач (например, структур данных, манипуляции со строками), их основное использование обычно заключается в повышении производительности за счет более низкой скорости выполнения за счет предоставления синтаксиса, который легко изучать и эффективно обслуживать программы. с. Нельзя прибегать к языку сценариев, когда требуется максимальная скорость выполнения.
[1]: Дж. К. Оустерхаут, Сценарии: программирование на более высоком уровне для 21 века , Компьютер (IEEE), 1998
[2]: Б. Бём, Экономика разработки программного обеспечения , Prentice Hall, 1981
источник
Если вы измеряете производительность как «время для написания конкретной простой программы», то это зависит в гораздо большей степени от опыта и сообразительности программиста, чем от языка, который вы действительно оцениваете программистом, а не от языка.
Я считаю, что соревнования по временному коду указывают на то, что язык не имеет значения для подобных задач. Нет ни одного языка, который бы побеждал в таких вызовах легче, чем другие (по крайней мере, если вы допускаете относительную популярность языков).
Если вы измеряете производительность как «эффективность лучшей программы», написанной на данном языке, то она еще менее зависит от языка. Смотрите, например, результаты конкурса Galcon AI . Победитель написан на Лиспе. Следующая запись Лисп, однако, занимает # 280. Что это говорит нам о пригодности языка для эффективного написания великолепного ИИ? На мой взгляд, ничего. Это просто говорит нам, что «bocsimacko» придумал и реализовал самые эффективные алгоритмы. Для справки, время не было основным фактором в этом конкурсе - у людей было больше двух месяцев, чтобы разработать свой код.
Наконец, если вы измеряете производительность как «долгосрочную стоимость обслуживания проекта», то я думаю, что вы на что-то. Особенно, если вы нанимаете только лучших людей для работы и рассчитываете затраты в человеко-часах, а не в долларах. У меня есть твердое мнение о том, какие языки лучше всего подходят для этого, но не имея веских доказательств, чтобы связать вас с этим, я опущу это мнение. Возможно, у кого-то есть ссылки на этот тип производительности.
источник
http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprtTR.pdf - одно из немногих исследований, о которых мне известно, что было проведено прямое сравнение производительности на разных языках. Он старый, но стоит прочитать, если вы находите тему интересной. Сравнение имеет ряд существенных недостатков, о которых статья очень честна.
В итоге получается, что языки низкого уровня (например, C, C ++) пишутся дольше, могут занимать гораздо меньше памяти и работать намного быстрее. Но с очень высокой изменчивостью. Языки сценариев высокого уровня, как правило, занимают половину времени написания и имеют меньшую вариативность в подходе. На первый взгляд, существует удивительный способ сделать что-то на языке сценариев.
Обратите внимание, что все показатели производительности для Java должны быть взяты с большой долей соли - документ был выпущен в 90-х годах до того, как люди имели большой опыт работы с Java, и до того, как JVM была хорошо оптимизирована. Оба фактора должны оказать значительное влияние.
источник
В общем, написание программы на Python обычно будет быстрее, чем написание той же программы на C, C ++, Java.
Это также может работать медленнее.
Есть, конечно, конкретные приложения, для которых другие языки могут быть быстрее, потому что определенные вовлеченные задачи поддерживаются «более изначально».
Хотя мне неизвестно о каких-либо исследованиях, подтверждающих это увеличение скорости / производительности (как упомянул один комментатор, это может быть трудно точно измерить), было проведено прямое исследование выразительности языка.
Я думаю, что есть некоторая заслуга в корреляции между выразительностью языка и скоростью программирования. Просто представьте простой итерационный шаблон и узнайте, как Pythonic for-loop или понимание списка могут быть более краткими. Мало того, что он может быть немедленно набран быстрее, но он также устраняет проблемы, связанные с ошибками, возникающими из-за единичных ошибок, за пределами индексов и другими такими проблемами, которые могут значительно замедлить процесс кодирования.
Здесь показана таблица оценки коэффициентов выразительности языков. В то время как это должно быть взято с зерном соли, сноски, которые это упоминает, очень стоят.
http://en.wikipedia.org/wiki/Comparison_of_programming_languages#Expressiveness
источник
В прошлый раз, когда я использовал Java (некоторое время назад, по общему признанию), потребовался экран, полный кода, чтобы открыть и записать в файл. Сравните это с парой строк в Python или Perl, и вы сможете догадаться, какая из них быстрее.
Очевидно, что у всех языков есть свои сильные и слабые стороны, но для большинства задач Python будет быстрее писать.
источник
write()
иread()
и в остальной части доступа к файлам проекта Java будет столь же кратким , как и в Python. Я думаю, что ваш пример слишком ограничен для сравнения Python и Java (хотя я согласен, что Java имеет тенденцию быть более многословным).