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

В теории информатики я все время слышу и читаю о языках высокого и низкого уровня.

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

Итак, вы получите:

Низкий уровень

  • ассемблер

Определенно не низкий уровень

  • С
  • Бейсик
  • FORTRAN
  • Кобол
  • ...

Высокий уровень

  • C++
  • Рубин
  • питон
  • PHP
  • ...

И если ассемблер низкоуровневый, как вы могли бы поместить, например, C в тот же список. Я имею в виду: C очень высокий уровень по сравнению с ассемблером. То же самое касается КОБОЛ, Фортрана и т. Д.

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

8 ответов

Решение

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

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

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

Тогда, чтобы ответить:

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

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

Вы найдете это

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • C, C++
  • паскаль

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

  • FORTRAN
  • Кобол
  • питон
  • Perl

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

  • ПРОЛОГ
  • питон
  • Схема

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

Как низкий уровень, я бы добавил:

  • .NET IL
  • Java JVM
  • Другой P-код, используемый в таких средах, как VB6

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

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

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

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

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

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

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

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

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


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

Низкоуровневый бинарный ассемблер

ET IL Java JVM Другой P-код, используемый в таких средах, как VB6

Определенно не низкий уровень

C ОСНОВНОЙ ФОРТРАН КОБОЛ Python Perl Pascal

Высокоуровневая C++ Ruby Python PHP PROLOG Схема

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

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

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

Другие вопросы по тегам