Можно ли разработать динамический язык без значительной потери производительности?

StackOverflow https://stackoverflow.com/questions/3741061

Вопрос

Можно ли разработать что-то вроде Ruby или Clojure без значительной потери производительности во многих ситуациях по сравнению с C / Java? Управляет ли аппаратный дизайн роль?

Редактировать: со значительным я имею в виду в порядке величин, не только десять прокументов

Редактировать: я подозреваю, что delnan правильный со мной, что означает динамические языки, поэтому я изменил название

Это было полезно?

Решение

Производительность зависит от многих вещей. Конечно, семантика языка должна быть сохранена, даже если мы его компилируем - вы не можете удалить динамическую отправку от Ruby, она бы ускоряла вещи Drmically, но он полностью сломал 95% всех рубиновых кодов в мире. Но все же, большая часть производительности зависит от того, насколько умная реализация.

Я предполагаю, что «высокого уровня», вы имеете в виду «динамичный»? Haskell и Ocaml являются чрезвычайно высокими уровнем, но составляются в результате скомпилирования и могут преодолевать C # или Java, даже C и C ++ в некоторых угловых случаях - особенно если параллелизм вступает в игру. И они, безусловно, не были разработаны с производительностью как цель № 1. Но писатели компилятора, особенно сфокусированные на неработающих языках, являются очень умным народным. Если вы или я запустили язык высокого уровня, даже если мы использовали, например, LLVM как Backend для нативной компиляции, мы бы не получили рядом с этой производительностью.

Создание динамических языков RES FAST сложнее - они задерживают много решений (типов, членов класса / объекта, ...) до времени выполнения вместо компиляции, и в то время как анализ статического кода иногда может доказать, что это невозможно в строках N и M, Вы все еще должны проводить расширенное время выполнения и сделать довольно много вещей, что компилятор статического языка может сделать в компилятере. Даже динамическая отправка может быть оптимизирована с более умным VM (Встроенный кэш Кто-нибудь?), Но это много работы. Могут сделать больше, чем маленький новичок, который мог сделать, то есть.

Также см Динамические языки Стив Егге Удар обратно.

И, конечно, какова значительная потеря оцепцов? 100 раз медленнее, чем C читает как многое, но, как мы все знаем, 80% времени исполнения тратится в 20% Кодекса = 80% Кодекса не повлияет на заметное влияние на выступление всей программы. Для оставшихся 20% вы всегда можете переписать его в C или C ++ и вызвать его с динамического языка. Для многих приложений это хватает (для некоторых, вам даже не нужно оптимизировать). Для отдыха ... ну, если производительность такая критическая, вы должны упорно написать его на языке, предназначенном для производительности.

Другие советы

Не путайте дизайн языка с платформой, на которой он работает.

Например, Java - это язык высокого уровня. Он работает на JVM (как Clojure - идентифицирован выше, а JRuby - Java-версия Ruby). JVM будет выполнять анализ байта-кода и оптимизировать, как работает код (используя анализ Escape, сразу же с компиляцией и т. Д.). Таким образом, платформа оказывает влияние на производительность, которая в значительной степени не зависит от самого языка (см. здесь Для получения дополнительной информации о производительности и сравнениях Java C / C ++)

Потеря по сравнению с чем? Если вам нужен сборщик мусора или замыкания, то вам нужно, и вы собираетесь оплатить цену независимо от. Если язык позволяет вам легко получить, это не значит, что вы должны использовать их, когда их не нужны.

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

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

Возможно, вы захотите посмотреть, что дарпа HPCS. Инициатива придумала. Было предложено 3 языка программирования: Sun's Coredess, IBM X10 и Cray's Chapel. Последние два все еще в развитии. Кто-нибудь из них соответствует вашему определению высокий уровень Я не знаю.

И да, дизайн оборудования, безусловно, играет роль. Все 3 из этих языков нацелены на суперкомпьютеры с очень многими процессорами и экспонатными функциями, соответствующими для этого домена.

Это, безусловно, возможно. Например, Objective-C представляет собой динамически напечатанный язык, который имеет производительность, сопоставимый с C ++ (хотя медленнее Wee BiT, вообще говоря, но все еще примерно эквивалентно).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top