Низкоуровневые возможности языков высокого уровня

Я хотел бы знать некоторые низкоуровневые возможности языков высокого уровня. Вдобавок ко всему, я мог бы указать: -битальные операции -битовые поля -пункт арифметики -инлайн-сборка -функции прерывания

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

3 ответа

Решение

C не поддерживает встроенный ассемблер и не прерывает, весь код C, реализующий их, использует нестандартные расширения компилятора. C++, однако, поддерживает встроенный ассемблер через стандарт.

Вот некоторые другие важные аппаратные функции C:

  • Указатели на функции довольно уникальны для C/C++ и позволяют выполнять код, расположенный по определенному адресу памяти, и позволяют выполнять другие аппаратные задачи. Смотрите это для более подробной информации об использовании указателя на функцию: Указатели на функции во встроенных системах.

  • Целочисленные типы. И C, и Pascal поддерживают типы int разных размеров (байт, слово, двойное слово и т. Д.), Хотя их размеры не определены стандартами. По той же причине, оператор sizeof также может быть важен.

  • C также имеет некоторую поддержку для выравнивания памяти, например, явно указывает правила поведения байтов заполнения.

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

  • Ключевое слово const используется в программировании, связанном с оборудованием, чтобы определить, где будут находиться данные: NVM или RAM.

Другими важными функциями, которых не хватает в C, являются поддержка многопоточности как части языка и поддержка барьера памяти. Некоторые компиляторы C реализуют барьеры памяти через ключевое слово volatile, но нет никаких гарантий, что оно будет работать по какому-либо стандарту.

Одним из языков высокого уровня с очень хорошей поддержкой низкоуровневого программирования является язык Ада.

В дополнение к ранее упомянутому C, Ada также имеет встроенную поддержку параллельных систем. Задачи являются языковой конструкцией и не нуждаются в отдельных библиотеках. Для параллельных систем Ada также предоставляет так называемые защищенные типы, которые позволяют использовать общие переменные или данные между задачами без дополнительного учета взаимного исключения или сигнализации. Базовые языковые библиотеки также обеспечивают поддержку обработки прерываний.

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

Также возможно напрямую генерировать сборку по мере необходимости путем вставки машинного кода.

Цитируя Википедию:

Язык программирования высокого уровня - это язык программирования с сильной абстракцией от деталей компьютера.

C не является таким языком, так как он остается очень близко к деталям компьютера.


И, глядя на ваш список:

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

Все они тесно связаны с самой архитектурой компьютера / ОС и считаются не высокоуровневыми.

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