Я слышал эти термины, используемые для описания языков раньше, например, C не совсем язык низкого уровня, C ++ - средний уровень, а Python - язык высокого уровня. Я понимаю, что это как-то связано с тем, как код компилируется и как он написан. Но что я хочу знать, так это то, что определяет язык в одну из этих трех категорий? Это абсолютные категории, или просто общая идея, которую программисты используют для описания языков друг другу?
Да, это просто общие термины. Это связано с абстракцией и тем, насколько вы близки к тому, что на самом деле делает компьютер.
Вот список языков программирования от очень низкого до очень высокого уровня:
Машинный код , вероятно, можно считать языком программирования самого низкого уровня.
Язык ассемблера указывает процессору, что ему делать. Есть еще шаг преобразования в машинный код.
C - это шаг вперед по сравнению с ассемблером, потому что вы можете указать, что вы хотите делать, в несколько более абстрактных терминах, но вы все еще довольно близко к делу.
C ++ делает все, что может делать C, но добавляет возможность абстрагировать вещи в классы.
Java / C # в некотором смысле делает то же самое, что и C ++, но без возможности делать все, что вы можете делать на C (например, манипуляции с указателями в случае Java [спасибо, Джо!]). Однако у них есть сборка мусора, которую вам нужно делать вручную на C ++.
Python / Ruby еще более высокого уровня и позволяют забыть о многих деталях, которые вам необходимо указать в чем-то вроде Java или C #.
SQL еще более высокого уровня (декларативный). Просто скажите «Дайте мне все элементы в таблице, отсортированные по возрасту», и это поможет вам найти наиболее эффективный способ сделать это.
Очень низкий уровень: Машинный код
Низкий уровень: Ассемблер, Форт
Средний уровень: C, C ++, большинство языков системного программирования
Средний / Высокий уровень: D, Go, языки системного программирования со сборкой мусора
Высокий уровень: Java, C #, большинство интерпретируемых языков
Еще более высокий уровень: диалекты Lisp
Самый высокий уровень: SQL, декларативные языки программирования
Если есть что-то еще добавил, подскажите.
В информатике низкоуровневый язык программирования - это язык программирования, который предоставляет небольшую абстракцию или не предоставляет никакой абстракции от архитектуры набора команд компьютера . Слово «низкий» относится к небольшой или несуществующей абстракции между языком и машинным языком; из-за этого языки низкого уровня иногда описываются как «близкие к аппаратному обеспечению». Для работы низкоуровневому языку не нужен компилятор или интерпретатор; процессор, для которого был написан язык, может выполнять код без использования любого из них .
Для сравнения: язык программирования высокого уровня изолирует семантику выполнения компьютерной архитектуры от спецификации программы, что делает процесс разработки программы более простым и понятным.
Среднеязычные языки находятся между двумя вышеупомянутыми
Они не абсолютны. Все они связаны с тем, какие другие языки используются в индустрии в то время. Например, было время, когда сборка считалась средним уровнем.
«Уровень» - это, по сути, мера того, насколько программист абстрагируется от реальных аппаратных операций. На языке низкого уровня вам, возможно, придется заботиться о фактических ячейках памяти, тогда как на языке высокого уровня вы просто создаете переменные и позволяете ОС обрабатывать память.
Обычный ЦП обрабатывает 32- или 64-разрядные инструкции. В простейшей форме представьте, что это 32 единицы и 0 подряд - это то, что на самом деле интерпретирует и выполняет процессор. Написание этого напрямую (машинный код) будет «самым низким уровнем».
Низкий уровень означает приближение к машине и, следовательно, более сложный и более мощный. Чем выше вы получаете уровень, тем больше вы отдаляетесь от машины и «по-английски» получаете, но вы теряете большую часть мощности и функциональности, которые связаны с возможностью контролировать мельчайшие детали машины. Языки более высокого уровня обычно больше защищают вас и содержат гораздо больше мер предосторожности и проверок, в то время как языки более низкого уровня доверяют вам, так сказать, и позволяют вам играть на свой страх и риск.
Термин "язык среднего уровня" я никогда не слышал.
"Низкий" и "высокий" относятся к тому, насколько "близко" к машине вы находитесь в своем программировании. Самый низкий уровень - это машинный (двоичный) код. Следующий (и все еще считающийся низким) - ассемблер. Языки более высокого уровня включают в себя больше символики и конструкций, которые должны быть ближе к тому, как человек обычно мыслит. Язык C (и отчасти C++) имеет репутацию некоего гибрида низкого и высокого уровня, поскольку в нем много конструкций, которые есть в языках высокого уровня, но также есть инструкции (например, сдвиги), которые есть в языках низкого уровня, но часто отсутствуют в языках более высокого уровня.
По возрастанию вы можете классифицировать языки следующим образом.
Машинный код -> Язык ассемблера -> Скомпилированный язык -> Интерпретируемый язык
Помните, что это не абсолютные черно-белые определения, а скорее оттенки серого. Это скорее рекомендация, чем правило.
Машинный код можно представить как длинную строку из единиц и нулей, которую понимает собственная платформа. Считайте, что это ваш базовый уровень ... самый низкий "уровень", который вы можете иметь.
Язык ассемблера можно считать символическим представлением этого. Я считаю, что между инструкциями кода сборки и инструкциями машинного кода существует соответствие 1: 1. Это ваш язык низкого уровня.
Java и C ++, например, оба являются скомпилированными языками, но многие сочли бы C ++ языком более низкого уровня, чем Java, поскольку он предоставляет доступ к системе низкого уровня, в то время как Java работает в защищенной среде (виртуальной машине). Помните, что скомпилированный язык компилируется (преобразуется, если хотите) в машинный код перед выполнением. C также является компилируемым языком, но считается более низким уровнем, чем Java и C ++.
Ради нас, мы скажем, что C и C ++ являются языками низкого уровня, потому что они предлагают (относительно) небольшую абстракцию от оборудования и прямое управление памятью. На самом деле, они находятся где-то между низким и средним, как вы скоро убедитесь.
Мы будем называть Java и C # (.NET) языками среднего уровня, потому что у них есть автоматическое управление памятью (сборка мусора), множество высокоуровневых абстракций (объекты IE ... все же C ++ поддерживает объекты.Вы понимаете, почему шкала считается неопределенной?)
В интерпретируемом языке интерпретатор находится в памяти и считывает исходный код напрямую. Это языки высокого уровня. Python, Perl, Javascript и PHP - все это примеры языков высокого уровня.