Выполняются ли низкоуровневые программы быстрее по своей сути, или, поскольку в конце концов все является машинным кодом, я неправильно понимаю?

Если мне нужно перефразировать:

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


person Larry Larry    schedule 27.05.2013    source источник
comment
Программы более низкого уровня = быстрее. Причина в том, что для языков более высокого уровня обычно требуется виртуальная машина, которая переводит коды операций в машинный код, поэтому существует этот дополнительный шаг, требующий дополнительной обработки. Грубо говоря, количество инструкций, использующих языки более низкого уровня, ну, меньше - следовательно, меньше работы. Все, что я написал, основано на предположении, что вымышленный человек, использующий упомянутые языки (высший и низший), знает, что делает. К сожалению, правда в том, что в основном это неправда :/   -  person N.B.    schedule 27.05.2013
comment
Программы, которые лучше написаны, работают лучше. :) И это зависит от того, насколько высокий или низкий вы имеете в виду. Наиболее эффективно написанная программа на низком уровне в большинстве случаев может оказаться более эффективной, чем программа, написанная на более высоком уровне. Но компиляторы языков высокого уровня очень хороши в оптимизации, поэтому окупаемость времени, потраченного на программирование, по сравнению с полученной производительностью в реальном времени, как правило, того не стоит. Что делает программы высокого уровня медленнее, так это использование толстых библиотек и методов, которые обеспечивают быструю разработку с предположением, что вычислительная мощность компенсирует неэффективность.   -  person lurker    schedule 27.05.2013


Ответы (2)


В дополнение к тому, что говорит Мартин, когда язык высокого уровня проходит через компилятор, он по существу разбивается на более простые инструкции, понятные машине. Компиляторы могут быть очень хорошими или очень плохими в зависимости от того, какой у вас компилятор. Некоторые компиляторы допускают большую оптимизацию, в то время как некоторые являются базовыми. В конце концов все они сводятся к коду машинного уровня. Перевод из кода в код машинного уровня — это то место, где действительно происходит перевод скорости, который выполняется компилятором.

Представьте, что у вас есть два переводчика с английского на испанский. Представьте, что вы просите их перевести фразу. Эта фраза может потеряться при переводе. В конце концов, один переводчик может стать лучшим переводчиком. То же самое с компиляторами.

Хотя в переводе есть небольшие изменения, вы все равно доносите свое сообщение. То же самое и в мире программирования. Когда у вас есть приложение высокого уровня, нет смысла писать все в машинном коде, так как это было бы крайне неэффективно. Также компиляторы становятся действительно хорошими против сравнения уровня сборки.

Опять же, все зависит от конечного приложения и смысла.

person StevenTsooo    schedule 25.06.2013

Простой ответ - это зависит!

Если вы имеете в виду языки низкого уровня, то языки, которые компилируются непосредственно в код (C/C++/Fortran), могут работать быстрее, чем те, для которых требуется виртуальная машина (Java/C#/Python).

На практике языки высокого уровня на основе виртуальных машин традиционно не использовались там, где требовалась высочайшая производительность, поэтому в высокопроизводительном Fortran было приложено гораздо больше усилий, чем в высокопроизводительном C#. Это также означает, что люди с требованиями HPC обычно не выбирают Java/C#, поэтому они недоступны в этих системах и так далее....

Это может измениться по мере того, как виртуальные машины станут умнее. PyPy — классический пример, это python, написанный на python, который должен быть бесполезно медленным — python — не быстрый язык, и писать его сам по себе, а не C, должно быть ужасно, но он часто быстрее, потому что может анализировать и предварительно компилировать некоторые части. программы, которая должна быть проанализирована во время выполнения. Точно так же вы можете представить виртуальную машину C#, которая распознает определенные задачи комментариев и автоматически преобразует их в параллельные операции графического процессора.

person Martin Beckett    schedule 27.05.2013