Существуют ли исследования эффективности языков со статической и динамической типизацией?
В частности:
- Измерения производительности программиста
- Коэффициент дефектности
Также включая эффекты от того, используется ли юнит-тестирование.
Я видел много дискуссий о достоинствах любой из сторон, но мне интересно, проводил ли кто-нибудь исследование по этому вопросу.
productivity
comparison
type-systems
dynamic-typing
static-typing
Уинстон Эверт
источник
источник
Ответы:
Некоторые предложили прочитать:
Не совсем на статической типизации, но связано:
Некоторые интересные статьи или очерки по теме или по статическому анализу программ в целом:
И для тех, кто хотел бы знать, что это такое:
Тем не менее, я сомневаюсь, что любой из них даст вам прямой ответ, так как они не проводят именно то исследование, которое вы ищете. Они будут интересно читать, хотя.
ЛичноЯ твердо считаю, что статическая типизация поверх динамической типизации облегчает обнаружение ошибок. Я слишком много трачу на поиски опечаток и мелких ошибок, подобных этим, в JavaScript или даже в Ruby-коде. И когда дело доходит до мнения, что динамическая типизация дает вам повышение производительности, я думаю, что в основном сводится к инструментам. Если в статически типизированных языках есть нужные инструменты, позволяющие выполнять фоновую перекомпиляцию и обеспечивающие интерфейс REPL, то вы получаете преимущества обоих миров. Например, в Scala это позволяет легко учиться и создавать прототипы в интерактивной консоли, но дает вам преимущества статической типизации (и более сильной системы типов, чем многие другие языки, за исключением ML-языков). Точно так же я не думаю, что у меня потеря производительности при использовании Java или C ++ (из-за статической типизации), до тех пор, пока я использую IDE, которая помогает мне в этом. Когда я возвращаюсь к кодированию только с простыми конфигурациями (редактор + компилятор / интерпретатор), то мне кажется, что более громоздкие и динамические языки кажутся более простыми в использовании. Но вы все еще охотитесь за ошибками. Я предполагаю, что люди скажут, что проблема с инструментами является обратимым аргументом, так как если бы инструменты были лучше для динамических языков, тогда большинство ошибок и опечаток были бы указаны во время кодирования, но это отражает недостаток в системе, по моему мнению. Тем не менее, я обычно создаю прототипы на JRuby и буду писать код на Java позже, большинство вещей, которые я делаю. как если бы инструментальные средства были лучше для динамических языков, тогда большинство ошибок и опечаток были бы указаны во время кодирования, но это, на мой взгляд, отражает недостаток системы. Тем не менее, я обычно создаю прототипы на JRuby и буду писать код на Java позже, большинство вещей, которые я делаю. как если бы инструментальные средства были лучше для динамических языков, тогда большинство ошибок и опечаток были бы указаны во время кодирования, но это, на мой взгляд, отражает недостаток системы. Тем не менее, я обычно создаю прототипы на JRuby и буду писать код на Java позже, большинство вещей, которые я делаю.
ВНИМАНИЕ: Некоторые из этих ссылок ненадежны, а некоторые проходят через порталы различных компьютерных сообществ, используя платный доступ для своих членов. Извините, я пытался найти несколько ссылок для каждой из них, но это не так хорошо, как хотелось бы.
источник
Буквально вчера я нашел это исследование: модульного тестирования недостаточно. Вам тоже нужна статическая типизация.
По сути, автор использовал инструмент, способный автоматически преобразовывать проект из нестатического языка типизации в язык статического ввода (от python до haskell)
Затем он выбрал несколько проектов Python с открытым исходным кодом, которые также включали разумное количество тестовых модулей, и автоматически преобразовал их в haskell.
Перевод на Haskell выявил серию ошибок, связанных с типом переменных: ошибки не были обнаружены тестовыми блоками.
источник
Мое мнение. Хотя есть слабые доказательства того, что динамически типизированные языки более продуктивны, это не является окончательным. (1) Есть много факторов, которые не контролировались, (2) слишком мало исследований, (3) было мало или вообще не было дискуссий о том, что представляет собой подходящий метод испытаний.
источник
Вот отправная точка:
Статья ставит под сомнение общепринятую мысль, что при прочих равных программисты пишут одинаковое количество строк кода за раз, независимо от языка. Другими словами, этот документ должен служить эмпирическим подтверждением того, что механическая производительность (написанные строки кода) не является хорошей мерой функциональной производительности и, по крайней мере, должна быть нормализована языком.
источник
Я нашел статические и динамические языки: обзор литературы , в котором перечислены некоторые исследования по этому предмету и дается хорошее резюме по каждому исследованию.
Вот резюме:
источник
Я, честно говоря, не думаю, что статическая против динамической типизации является реальным вопросом.
Я думаю, что есть два параметра, которые должны стоять на первом месте:
Если вы хорошо владеете языком, вы напишите код и с легкостью выследите ошибки.
Если вы будете писать разъединенный код и интенсивно тестировать каждую функциональность, то вы будете производить хорошо отточенный код, и, следовательно, вы будете продуктивны (потому что вы не можете квалифицироваться как продуктивные, если не оцениваете качество продукта, не так ли? )
Поэтому я бы посчитал, что статические и динамические споры относительно производительности довольно спорны или, по крайней мере, значительно вытеснены другими соображениями.
источник
Вот несколько из них:
Стефан Ханенберг. 2010. Эксперимент о статических и динамических системах типов: сомнения в положительном влиянии систем статических типов на время разработки. В материалах Международной конференции ACM по языкам и приложениям систем объектно-ориентированного программирования (OOPSLA '10). ACM, Нью-Йорк, Нью-Йорк, США, 22-35. DOI = 10.1145 / 1869459.1869462 http://doi.acm.org/10.1145/1869459.1869462
Дэниел П. Делорей, Чарльз Д. Кнутсон, Скотт Чун, «Влияют ли языки программирования на производительность? Учебный пример с использованием данных из проектов с открытым исходным кодом», floss, стр. 8, Первый международный семинар по новым тенденциям в исследованиях и разработках FLOSS (FLOSS '07: семинары ICSE 2007), 2007
Дейли, М .; Сазавал, В., Фостер, Дж .: Работа в процессе: эмпирическое исследование статической типизации в Ruby, семинар по оценке и удобству использования языков программирования и инструментов (PLATEAU) на ON-WARD 2009.
Лутц Пречелт и Вальтер Ф. Тичи. 1998. Контролируемый эксперимент по оценке преимуществ процедуры проверки типа аргумента. IEEE Trans. Softw. Eng. 24, 4 (апрель 1998 г.), 302-312. DOI = 10.1109 / 32.677186 http://dx.doi.org/10.1109/32.677186
источник