Подтвердить что ты не робот

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

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

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

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

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

  • Ассемблер

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

  • С
  • BASIC
  • FORTRAN
  • COBOL
  • ...

высокого уровня

  • С++
  • рубин
  • Python
  • PHP
  • ...

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

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

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

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

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

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

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

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

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

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

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

  • C, С++
  • Паскаль

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

  • FORTRAN
  • COBOL
  • Python
  • Perl

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

  • ПРОЛОГ
  • Python
  • Схема

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

Ответ 4

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

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

Ответ 5

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

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

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

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

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

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

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

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

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


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

Ответ 6

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

Ответ 7

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

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