Какие языки программирования не считают высоким уровнем? [закрытый]

19
задан Jon Seigel 12 April 2010 в 19:33
поделиться

7 ответов

Согласно Википедии , языки низкого уровня - это машинный код и ассемблер.

Из источника:

В информатике низкоуровневый язык программирования - это язык программирования , который практически не обеспечивает абстракции от компьютерных {{ 1}} архитектура набора команд. Слово "низкий" относится к небольшому или несуществующему количеству абстракции между языком и машинным языком; из-за этого низкоуровневые языки иногда описываются как "близкие к оборудованию".

Затем, чтобы ответить:

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

Я не знаю, кто такие «все», но рискну предположить, что в те времена, когда языки высокого уровня не были таким обычным явлением, как сегодня, было более уместно говорить о низкоуровневых и высокоуровневых языках. уровень (потому что было относительно значительное количество программистов, пишущих ассемблерный код). В наше время это различие менее важно. Лично я редко слышу, как люди используют эти термины, за исключением тех случаев, когда нужно различать сборку или нет (за исключением тех случаев, когда вы можете услышать, что кто-то, выросший на Python, ссылается на C или C ++ как на низкоуровневый, но это не в духе исходного определения. ).

8
ответ дан 30 November 2019 в 01:54
поделиться

Вы обнаружите, что

многие истины, за которые мы цепляемся, зависят от нашей собственной точки зрения.

Для программиста C Ассемблер - это язык низкого уровня. Для программиста на Java C - это язык низкого уровня и так далее.

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

(Цитата из Возвращение джедая )

55
ответ дан 30 November 2019 в 01:54
поделиться

В значительной степени «низкоуровневые» и «высокоуровневые» не бинарные категории, а представляют собой континуум. Есть некоторые языки, которые явно являются низкоуровневыми (ассемблер, машинный код), но помимо этого есть только «высокоуровневые» и «низкоуровневые».

На мой взгляд, «низкоуровневые» языки требуют кода, который больше похож на архитектуру компьютера, а «высокоуровневые» языки принимают код, который больше похож на структуру проблемы. Но при этом языки могут быть высокоуровневыми для одной проблемы и низкоуровневыми для другой.

0
ответ дан 30 November 2019 в 01:54
поделиться

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

0
ответ дан 30 November 2019 в 01:54
поделиться

Вы задаете относительно субъективный вопрос; это вопрос о терминологии, жаргоне и перспективе.

Например, является ли Лисп языком высокого или низкого уровня? Что если реализация выполняется на Lisp Machine?

Часто, когда люди пытаются построить спектр от низкоуровневого к высокоуровневому, они пытаются количественно оценить степень "близости к аппаратуре", а не степень "абстракции".

Качества, которые засчитываются в близость реализации к аппаратуре:

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

Обратные качества, которые засчитываются в абстракцию реализации от аппаратуры:

  • Программист не имеет доступа к адресу данных во время выполнения (ссылки вместо указателей).
  • Математические операции определяются в конкретных терминах, не привязанных к конкретному оборудованию. (Например, ActionScript 3 поддерживает тип Number, который самостоятельно преобразуется из целого числа в число с плавающей точкой, а не испытывает переполнение)
  • Управление динамической памятью осуществляется средой, возможно, с помощью подсчета ссылок, сборки мусора или другой схемы автоматического управления памятью.
  • Управление памятью во время работы со строками всегда скрыто от программиста и осуществляется средой.

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

  • Декларативный, основанный на поиске синтаксис. (например, Prolog)

Учитывая эти факторы, я бы пересмотрел спектр, который вы написали, следующим образом:

Самый низкий уровень:

  • Ассемблерный язык рассматриваемой платформы.

Языки низкого уровня с более высоким уровнем управления потоком, чем ассемблер:

  • C, C++
  • Pascal

Языки высокого уровня:

  • FORTRAN
  • COBOL
  • Python
  • Perl

Языки высшего уровня:

  • PROLOG
  • Python
  • Scheme

Python появляется дважды по намерению - он охватывает часть спектра в зависимости от того, как написан код.

8
ответ дан 30 November 2019 в 01:54
поделиться

"Уровень" языка - это движущаяся цель. В 1973 году PL/I считался языком высокого уровня. Сегодня язык C считается (по крайней мере, профессионалами в этой области) языком низкого уровня [см. сноску]. Некоторые из причин:

  • Открытое представление чисел на машинном уровне
  • "Целочисленная" арифметика может переполняться
  • Нет реальной поддержки строк, или, по крайней мере, строки не являются первоклассными
  • Ручное управление памятью
  • Адресная арифметика
  • Небезопасно

Язык высокого уровня может включать

  • Поддержку целочисленных типов независимо от целевой машины
  • Целочисленная арифметика по умолчанию никогда не переполняется, если у машины не закончилась память
  • Строки как значения первого класса с, напр. g., конкатенация встроена
  • Автоматическое управление памятью без адресной арифметики
  • Безопасный

Некоторые кандидаты в "языки высокого уровня" по этому определению могут включать Icon, Scheme, Smalltalk и некоторые из ваших любимых скриптовых языков.

В те времена, когда я был молодым ученым и по земле бродили динозавры, люди называли Icon "очень высокоуровневым языком". Еще 15 лет назад вы даже могли посетить симпозиум по языкам очень высокого уровня. Но этот термин больше не используется.

Почему все продолжают упоминать языки высокого и низкого уровня?

Даже если разница между "высоким" и "низким" постоянно меняется, различия, подобные перечисленным выше, все еще важны. А различий так много, что слова "высокий" и "низкий" могут быть полезным сокращением. Но не настолько полезным: для циника язык высокого уровня - это тот, который выглядит, по крайней мере, таким же мощным, как мой любимый язык, а язык низкого уровня - это все остальное. Другими словами, "уровень" может легко превратиться в простое обзывательство.

Сноска: Трудно найти ссылки на терминологию, используемую на профессиональных встречах, особенно когда профессионалы не используют термины "низкоуровневый" и "высокоуровневый", потому что они не настолько техничны. Но danben спросил о цитатах, и я нашел пару:


P.S. Не слишком полагайтесь на Википедию в поисках хорошей информации о языках программирования, особенно если ссылка на Википедию не содержит ссылок или источников

.
4
ответ дан 30 November 2019 в 01:54
поделиться

В качестве низкоуровневых я бы добавил:

  • .NET IL
  • Java JVM
  • Другой P-код, используемый в таких средах, как VB6
5
ответ дан 30 November 2019 в 01:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: