2015-11-06 2 views
-4

Я полагаю, что очевидными преимуществами являются ремонтопригодность, удобство программирования и т. Д., Но каковы недостатки?Каковы недостатки использования языков высокого уровня?

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

Существуют ли ситуации, когда языки низкого уровня лучше подходят для задачи из-за вышеупомянутых недостатков?

+0

Первое, что я имею в виду это простое определение языков высокого уровня: эти языки строятся на ранее определенных слоев, которые определяют какой-то конфигурации, реализации, ..., которые довольно распространены. Если вы хотите создать программу, которая подчиняется этим обычным конфигурациям, реализациям, ..., я бы сказал, идти вперед для языка высокого уровня. Однако, если вы хотите создать программу, которая будет делать все по-новому, использование низкоуровневых языков может оказаться полезным. Представьте, что вам не нравится внешний вид полосы прокрутки. Вы можете изменить это только с помощью языков низкого уровня. – Dominique

+0

Они медленнее, чем хорошо написанная программа низкого уровня, которая делает то же самое. Конечно, плохо написанная программа на низкоуровневом языке может быть медленнее. (например, наивный связанный список + линейный поиск, реализованный вручную на C, вместо того, чтобы просто использовать хэш-таблицу Python) –

ответ

1

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

Преимущества низкого уровня Языки:

  • Вы можете специально направлены и использовать возможности чипа (или регистры)
  • Вообще это может быть (много) быстрее, если вы знаете, что вы делаете, но это редкий случай.

Недостатки высокого уровня Языки:

  • Вам нужна какая-компилятор, чтобы получить ЯВУ в LLL
  • В некоторых случаях (например, Java/C#) у вас есть переводчик между который также потребляет ресурсы (но также может оптимизировать себя при запуске программы!)

Здесь более подробный список преимуществ LLL:

  • вы можете получить доступ к машинно-зависимые регистры ввода/вывода
  • вы можете контролировать точное поведение кода в критических секциях, которые могли бы привлечь тупиковой ситуации между несколькими потоками программного обеспечения или устройств
  • вы можете нарушить условные обозначения вашего обычного компилятора, что может позволить некоторые оптимизации (например, временные нарушения правил о выделения памяти, потоки, вызовы и т. д.)
  • вы можете создавать интерфейсы между фрагментами кода используя несовместимые соглашения (например, произведенных различными компиляторами или разделенных низкоуровневым интерфейсом)
  • вы можете получить доступ к необычным режимам программирования вашего процессора (например,16 битный режим для интерфейса запуска, встроенного программного обеспечения или унаследованного кода на
    Intel ПК)
  • вы можете производить достаточно быстрый код для плотных петель, чтобы справиться с плохим не-оптимизирующим компилятором (но тогда, есть свободные оптимизирующие
    компиляторов доступно!)
  • вы можете создать оптимизированный вручную код, специально настроенный для вашей конкретной аппаратной настройки, но не для чужой
  • вы можете написать код для оптимизационного компилятора вашего нового языка (это то, что очень немногие будут когда-либо do, и даже они не часто)
  • т.е. вы можете быть в c omplete контроль кода

Источник: http://www.tldp.org/HOWTO/Assembly-HOWTO/x133.html

+0

В эти дни C считается языком низкого уровня. Даже C++ довольно низкий уровень по сравнению с Python. –

0

Не выделяя память самостоятельно, это одно. Программисты за языками создают сборщики мусора, и они иногда (в основном) дают вам огромный объем памяти.

Возьмем, к примеру, JavaScript. Если вы делаете var arr = array(501);, это может дать вам 600 байт, или 1000 или даже больше.

Для программ низкого уровня, таких как операционная система на встроенных устройствах или видеоиграх (игры на PS4 и т. Д.), Является VITAL. Поэтому вы не можете позволить себе заняться больше места, чем вам нужно.

+0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. – M4ks

+0

У меня не было 20 очков репутации. :) –

Смежные вопросы