Согласно Википедии , языки низкого уровня - это машинный код и ассемблер.
Из источника:
В информатике низкоуровневый язык программирования - это язык программирования , который практически не обеспечивает абстракции от компьютерных {{ 1}} архитектура набора команд. Слово "низкий" относится к небольшому или несуществующему количеству абстракции между языком и машинным языком; из-за этого низкоуровневые языки иногда описываются как "близкие к оборудованию".
Затем, чтобы ответить:
Так почему же все продолжают упоминать высокие и низкие -уровневые языки, если ассемблер действительно является единственным языком низкого уровня.
Я не знаю, кто такие «все», но рискну предположить, что в те времена, когда языки высокого уровня не были таким обычным явлением, как сегодня, было более уместно говорить о низкоуровневых и высокоуровневых языках. уровень (потому что было относительно значительное количество программистов, пишущих ассемблерный код). В наше время это различие менее важно. Лично я редко слышу, как люди используют эти термины, за исключением тех случаев, когда нужно различать сборку или нет (за исключением тех случаев, когда вы можете услышать, что кто-то, выросший на Python, ссылается на C или C ++ как на низкоуровневый, но это не в духе исходного определения. ).
Вы обнаружите, что
многие истины, за которые мы цепляемся, зависят от нашей собственной точки зрения.
Для программиста C Ассемблер - это язык низкого уровня. Для программиста на Java C - это язык низкого уровня и так далее.
Я подозреваю, что люди, программирующие первый компьютер с хранимой программой с помощью единиц и нулей, сочли бы Ассемблер языком высокого уровня. Все относительно.
(Цитата из Возвращение джедая )
В значительной степени «низкоуровневые» и «высокоуровневые» не бинарные категории, а представляют собой континуум. Есть некоторые языки, которые явно являются низкоуровневыми (ассемблер, машинный код), но помимо этого есть только «высокоуровневые» и «низкоуровневые».
На мой взгляд, «низкоуровневые» языки требуют кода, который больше похож на архитектуру компьютера, а «высокоуровневые» языки принимают код, который больше похож на структуру проблемы. Но при этом языки могут быть высокоуровневыми для одной проблемы и низкоуровневыми для другой.
Здесь чисто предположение, но это может быть случай языкового сдвига, когда различие между языками низкого и высокого уровня постепенно превращается в умах людей в различие между управляемыми и неуправляемыми языками, типизированными и нетипизированные языки и т. д. (по крайней мере, в том, как люди используют терминологию).
Вы задаете относительно субъективный вопрос; это вопрос о терминологии, жаргоне и перспективе.
Например, является ли Лисп языком высокого или низкого уровня? Что если реализация выполняется на Lisp Machine?
Часто, когда люди пытаются построить спектр от низкоуровневого к высокоуровневому, они пытаются количественно оценить степень "близости к аппаратуре", а не степень "абстракции".
Качества, которые засчитываются в близость реализации к аппаратуре:
Обратные качества, которые засчитываются в абстракцию реализации от аппаратуры:
Number
, который самостоятельно преобразуется из целого числа в число с плавающей точкой, а не испытывает переполнение)Другие качества могут сделать язык очень абстрактным по сравнению с оборудованием, на котором он работает:
Учитывая эти факторы, я бы пересмотрел спектр, который вы написали, следующим образом:
Самый низкий уровень:
Языки низкого уровня с более высоким уровнем управления потоком, чем ассемблер:
Языки высокого уровня:
Языки высшего уровня:
Python появляется дважды по намерению - он охватывает часть спектра в зависимости от того, как написан код.
"Уровень" языка - это движущаяся цель. В 1973 году PL/I считался языком высокого уровня. Сегодня язык C считается (по крайней мере, профессионалами в этой области) языком низкого уровня [см. сноску]. Некоторые из причин:
Язык высокого уровня может включать
Некоторые кандидаты в "языки высокого уровня" по этому определению могут включать Icon, Scheme, Smalltalk и некоторые из ваших любимых скриптовых языков.
В те времена, когда я был молодым ученым и по земле бродили динозавры, люди называли Icon "очень высокоуровневым языком". Еще 15 лет назад вы даже могли посетить симпозиум по языкам очень высокого уровня. Но этот термин больше не используется.
Почему все продолжают упоминать языки высокого и низкого уровня?
Даже если разница между "высоким" и "низким" постоянно меняется, различия, подобные перечисленным выше, все еще важны. А различий так много, что слова "высокий" и "низкий" могут быть полезным сокращением. Но не настолько полезным: для циника язык высокого уровня - это тот, который выглядит, по крайней мере, таким же мощным, как мой любимый язык, а язык низкого уровня - это все остальное. Другими словами, "уровень" может легко превратиться в простое обзывательство.
Сноска: Трудно найти ссылки на терминологию, используемую на профессиональных встречах, особенно когда профессионалы не используют термины "низкоуровневый" и "высокоуровневый", потому что они не настолько техничны. Но danben спросил о цитатах, и я нашел пару:
"Для обеспечения требуемой точности экспериментальные программы обычно пишутся на низкоуровневом языке (например, C или Pascal)", в реферируемой статье по компьютерному зрению.
"Язык программирования C хорошо известен своей гибкостью в работе с низкоуровневыми конструкциями", в важной статье Necula et al.
P.S. Не слишком полагайтесь на Википедию в поисках хорошей информации о языках программирования, особенно если ссылка на Википедию не содержит ссылок или источников
.В качестве низкоуровневых я бы добавил: