Файл: Современные языки программирования (Машинный язык).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 30.03.2023

Просмотров: 368

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

На языке ассемблера фрагменты программ, для которых критически важны (много реже программы пишутся на ассемблере целиком):

быстродействие (драйверы, игры);

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

С использованием программирования на языке ассемблера производятся:

  1. Оптимизация критичных к скорости участков программ, написанных на языке высокого уровня, таком как C++. Это особенно актуально для игровых приставок, имеющих фиксированную производительность, и для мультимедийных кодеков, которые стремятся делать менее ресурсоёмкими и более популярными.
  2. Создание операционных систем. Причем подавляющее большинство ОС пишут на Си, языке, который специально был создан для написания одной из первых версий UNIX. Небольшие кусочки ОС, такие как загрузчик ОС, уровень абстрагирования от аппаратного обеспечения  и ядро, часто пишутся с применением ассемблерных вставок. Фактически, ассемблерного кода в ядрах Windows или Linux совсем немного, поскольку авторы стремятся к переносимости и надёжности, но, тем не менее, он присутствует. Некоторые любительские ОС, такие как MenuetOS, целиком написаны на языке ассемблера.
  3. Программирование микроконтроллеров (МК) и других встраиваемых процессоров. На сегодняшний день для программирования МК весьма часто применяются нередко, но уже реже, чем языки высокого уровня.
  4. Создание драйверов. Некоторые участки драйверов, программируют на языке ассемблера. Хотя в целом в настоящее время драйверы стараются писать на языках высокого уровня в связи с повышенными требованиями к надёжности и достаточной производительностью современных процессоров. Надёжность для драйверов играет особую роль, поскольку в Windows NT и Linux драйверы работают в режиме ядра. Одна ошибка может привести к краху системы.

В СССР язык ассемблера ранее называли «автокод».

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

Три встречающихся варианта употребления термина "ассемблер":

1) программа ассемблер (применительно к трансляторам);

2) язык ассемблера для конкретной вычислительной системы (полное наименование);

3) язык Ассемблер (сокращенное нарицательное название безотносительно от вычислительной системы, пишется с заглавной буквы).


1.3 Первые языки программирования высокого уровня

С середины 50-ых гг. XX в. начали создавать первые языки программирования высокого уровня. Эти языки были машинно-независимыми (не привязаны к опред. типу ЭВМ). Но для каждого языка были разработаны собственные компиляторы.

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

Языки высокого уровня имеют следующие основные преимущества перед машинными:

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

Примеры таких языков: FORTRAN предназначен для научных и технических расчетов; COBOL (1959) был предназначен в основном для коммерческих приложений; язык BASIC– универсальный язык символьных инструкций для начинающих) (1964 г.).

1.4 Алгоритмические языки программирования

С начала 80-ых г. XX в. начали создаваться языки программирования, которые позволили перейти к структурному программированию (использование операторов ветвления, выбора, цикла и практически отказ от частого использования операторов перехода.

К основным компонентам алгоритмического языка относятся:

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

К этим языкам относятся: язык Pascal; язык Си.

1.5 Языки объектно-ориентированного программирования

Появились в 90-х годах XX века. В основу этих языков положены программные объекты, которые объединяют данные и методы их обработки. Для них были разработаны интегрированные среды программирования, позволяющие визуально конструировать графический интерфейс приложений:

язык С++ (1983) - продолжение алгоритм. языка Си;

язык Object Pascal (1989) был создан на основе языка Pascal. После создания среды программирования – Delphi (1995);

язык Visual Basic(1991) был создан корпорацией Microsoft на основе языка Qbasic (1975) для разработки приложений с графическим интерфейсом в среде ОС Windows.,

1.6 Языки программирования для компьютерных сетей

В 90-ые годы XX в. в связи с бурным развитием Интернета были созданы языки, обеспечивающие межплатформенную совместимость. На подключенных к Интернету компьютерах с различными ОС (Windows, Linux и др.) могли выполняться одни и те же программы.

Примерами таких языков являются:

  • язык Java - объектно-ориентированный язык был разработан фирмой Sun Microsystems для создания сетевого программного обеспечения (1995);
  • язык JavaScript – язык сценариев Web-страниц (компания Netscape). (1995).
  • HTML. Общеизвестный язык для оформления документов. Он очень прост и содержит элементарные команды форматирования текста, добавления рисунков, задания шрифтов и цветов, организации ссылок и таблиц. Все Web-страницы написаны на языке HTML.
  • Perl. Он задумывался как средство эффективной обработки больших текстовых файлов, генерации текстовых отчетов и управления задачами. В него введены функции работы со строками, массивами, всевозможные средства преобразования данных, управления процессами, работы с системной информацией.

1.7 Языки программирования на платформе .NET

Языки программирования .NET (Языки с поддержкой CLI или CLI-языки) —используются для создания библиотек и программ, удовлетворяющих требованиям Common Language Infrastructure. За исключением некоторых серьезных оговорок, большинство CLI-языков целиком компилируются в Common Intermediate Language (CIL), промежуточный язык, который может быть оттранслирован непосредственно в машинный код при помощи виртуальной машины Common Language Runtime (CLR), являющуюся частью Microsoft .NET Framework, Mono и Portable.NET.


Примеры языков программирования на платформе .NET:

  • Scala. Scala была выпущена для общего пользования на платформе JVM в январе 2004 года и на платформе .NET в июне 2004 года.
  • А́да (Ada) — язык программирования, создан в 1979—1980 г. Министерством обороны США с целью разработать единый язык программирования для встраиваемых систем (то есть систем управления автоматизированными комплексами, работающими в реальном времени).

2. Обзор современных языков программирования

2.1 С и его разновидности

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

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

Особенности

Язык программирования Си отличается минимализмом. Авторы языка хотели, чтобы программы на нём легко компилировались с помощью однопроходного компилятора, чтобы каждой элементарной составляющей программы после компиляции соответствовало весьма небольшое число машинных команд, а использование базовых элементов языка не задействовало библиотеку времени выполнения. Код на Си можно легко писать на низком уровне абстракции, почти как на ассемблере. Си часто называют языком среднего уровня или даже низкого уровня, учитывая то, как близко он работает к реальным устройствам. Однако в строгой классификации он является языком высокого уровня.

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


  1. простую языковую базу, из которой вынесены в библиотеки многие существенные возможности, вроде математических функций или функций управления файлами;
  2. ориентацию на процедурное программирование, обеспечивающую удобство применения структурного стиля программирования;
  3. систему типов, предохраняющую от бессмысленных операций;
  4. использование препроцессора для, например, определения макросов и включения файлов с исходным кодом;
  5. непосредственный доступ к памяти компьютера;
  6. минимальное число ключевых слов;
  7. передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке эмулируется с помощью указателей);
  8. указатели на функции и статические переменные
  9. области действия имён;
  10. структуры и объединения — определяемые пользователем собирательные типы данных, которыми можно манипулировать как одним целым;

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

Хранение данных

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

В Си есть три разных способа выделения памяти (классы памяти) для объектов:

  • Статическое выделение памяти.
  • Автоматическое выделение памяти.
  • Динамическое выделение памяти.

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

Проблемы

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