Что такое эвм в программировании
Перейти к содержимому

Что такое эвм в программировании

  • автор:

Программирование ЭВМ

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

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

Например, мы можем сказать:

1.«Сложить содержимое ячейки 50 с содержимым ячейки 7778».

2.«Напечатать содержимое ячейки 1066».

3.«Сравнить содержимое ячейки 2000 с содержимым ячейки 2001».

4.«Переслать содержимое ячейки 30 в ячейку 5000».

Мы видим, что каждое из перечисленных предложений содержит глагол:

и один или более объектов или указаний модификации:

содержимое ячейки 50 содержимое ячейки 7778 с содержимым ячейки 2001 в ячейку 5000

В программировании указанным глаголам соответствуют так называемые операции, тогда как объектам, к которым эти глаголы относятся,— операнды.*

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

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

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

имеет следующую машинную структуру:

имеет машинную структуру

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

Возвращаясь к нашему примеру, мы будем интерпретировать теперь

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

Программа состоит из последовательности команд описанной выше формы. Каждая команда содержит код операции и один или более операндов, которые должны быть определены при написании программы. ЭВМ при работе по нашей программе выполняет команды одну за другой в порядке их следования.

1.1. Теория¶

1.1.1. Разработка программного обеспечения сегодня¶

1.1.1.1. Программы вокруг нас¶

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

Управление современными компьютерами осуществляется с помощью специальных программ, без которых вся техника превратилась бы в бесполезный набор металла. Сегодня компьютерной системой, как правило, управляет совокупность программ, поэтому вместо слова программа чаще используется более широкое понятие программное обеспечение (ПО, англ. Software) — совокупность компьютерных программ, соответствующей документации и данных, относящихся к функционированию компьютерной системы. В качестве синонимов часто используют понятия «программный продукт», «программный комплекс», «приложение» и т.д.

На Рисунках 1.1.1‑1.1.3 приведены примеры компьютерных систем и приложений.

_images/01_01_01.png

Рисунок 1.1.1 — Система управления истребителя СУ-35 51 ¶

_images/01_01_02.png

Рисунок 1.1.2 — Компьютерная система на фондовой бирже 52 ¶

_images/01_01_03.png

Рисунок 1.1.3 — Система дистанционного банковского обслуживания Сбербанк.Онлайн 53 ¶

В общем случае программное обеспечение делится на 2 типа: системное и прикладное (Рисунок 1.1.4).

_images/01_01_04.png

Рисунок 1.1.4 — Системное и прикладное ПО 54 ¶

К системному программному обеспечению относят:

Прикладное программное обеспечение включает «пользовательские» программы: текстовые редакторы, видеоплееры, игры и т.д.

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

_images/01_01_05.png

Рисунок 1.1.5 — Структура типичной компьютерной системы 55 ¶

Сегодня большая часть программ пишется на языках высокого уровня — более простых и эффективных для разработчика (близких к языку человека).

1.1.1.2. Процесс разработки программного обеспечения¶

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

ПО для корпоративного потребителя;

ПО для массового потребителя.

Они появлялись друг за другом с интервалом примерно в десятилетие.

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

1. Анализ требований

Задачи: сбор, анализ и документирование требований к программному обеспечению.

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

2. Проектирование

Задачи: определение внутренних свойств системы и детализации ее внешних (видимых) свойств на основе спецификация требований.

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

3. Программирование

Задачи: создание и использование алгоритмов и структур данных в рамках архитектуры и в соответствии со спецификацией требований.

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

4. Документирование

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

Результат: документация к программному обеспечению.

5. Тестирование

Задачи: исследование продукта на соответствие спецификации требований, выявление возможных ошибок и исправление несоответствий.

Результат: доработанное программное обеспечение с учетом ошибок и исправлений.

6. Системная интеграция и Внедрение в эксплуатацию

Задачи: настройка ПО для работы в компьютерной экосистеме пользователя/заказчика, а также обучение конечных пользователей.

Результат: программное обеспечение, функционирующее и используемое целевыми пользователями.

7. Сопровождение

Задачи: оперативное реагирование на обнаруженные дефекты в работе программного обеспечения, новые требования и т.д.

Результат: материалы для запуска очередного цикла разработки.

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

Каждый этап жизненного цикла является отдельной сложной задачей, для выполнения которой выделяется отдельный специалист или группа специалистов. На Рисунке 1.1.6. приведен возможный пример команды по разработке программного обеспечения. Как правило каждый специалист занят в нескольких этапах разработки ПО, что необходимо для разработки качественного программного обеспечения.

_images/01_01_06.png

Рисунок 1.1.6 — Пример Agile-команды по разработке ПО 56 ¶

На Видео 1.1.1 приведено обобщенное описание профессий в сфере информационных технологий.

Видео 1.1.1 — Профессии в мире информационных технологий

Независимо от роли в ИТ-проекте, знания о процессе разработки ПО и непосредственно навыки программирования являются необходимыми для успешной работы.

1.1.1.3. Востребованность и зарплаты¶

Насколько рассмотренные выше направления работы в ИТ-сфере являются востребованными и перспективными? В Таблице 1.1.1 и приведены ТОП-10 самых востребованных и самых высокооплачиваемых профессий в России по данным портала EduNews.

Таблица 1.1.1 — ТОП-10 профессий в России по критериям: уровень оплаты, востребованность в народном хозяйстве, перспективность работы и возможности развития сотрудника 9 ¶

IT-специалист

Краткий обзор зарплат специалистов ИТ-сферы приведен в исследовании 27 (на 2022 г.):

_images/01_01_06_1.jpg

_images/01_01_06_2.jpg

Актуальную статистику зарплатных предложений можно посмотреть, например, на ресурсах Хабр Карьера или Superjob.

1.1.2. Компьютер, алгоритм и программа¶

Компьютер создавался как устройство для выполнения двух простых операций:

сохранения результатов этих вычислений,

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

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

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

1.1.2.1. Алгоритм: способы представления и свойства¶

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

Словесная форма: запись на естественном языке.

Графическая форма: изображения из графических символов, как правило, в специальной нотации.

_images/01_01_01_i.png

В качестве простой графической нотации описания алгоритмов часто используются блок-схемы, регламентируемые ГОСТ 19.701-90 «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. В англоязычном ИТ-сегменте аналогом являются диаграммы Flowchart.

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

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

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

Любой алгоритм должен обладать следующими свойствами:

Дискретность: алгоритм разбивается на конечное число элементарных действий (шагов).

Понятность: каждое из этих элементарных действий является законченным и понятным.

Детерминированность: каждое действие должно пониматься в строго определенном смысле (пониматься однозначно).

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

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

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

Любой алгоритм (в том числе и приведенный выше) необходимо усложнять и/или разбивать на дополнительные шаги до тех пор, пока он не будет удовлетворять всем 5 свойствам для конкретного исполнителя (человека, компьютера или кого-либо еще) (Видео 1.1.2).

Видео 1.1.2 — Как нужно намазывать бутерброд?

1.1.3. Вычислительные устройства: классификация и история¶

При наличии более-менее формализованного алгоритма, возникает вопрос — как можно «поручить» устройству его выполнение?

История знает 3 класса устройств, созданных человечеством для решения данной проблемы (Таблица 1.1.2).

Таблица 1.1.2 — 3 класса устройств ¶

Выполнение определенной задачи

Обычный калькулятор, счеты и т.д.

Выполнение определенной задачи на произвольных (изменяемых) данных

Видеоплееры, CD-проигрыватель и др.

Выполнение произвольной (изменяемой) задачи на произвольных (изменяемых) данных

Все такие устройства могут считаться компьютером (англ. Computer — «вычислитель»), под которым в широком смысле понимается любое устройство или система, способное выполнять заданную четко определенную изменяемую последовательность операций (численных расчетов и манипулирования данными, операции ввода-вывода). Используемое нами в повседневной жизни понятие «компьютер» — это электронная вычислительная машина (ЭВМ) — одна из реализация компьютера, которая подразумевает использование электронных компонентов в качестве ее функциональных узлов.

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

1.1.3.1. Класс 1 — Определенная задача¶

Изначально человечество шло по первому пути и вычислительные устройства были способны выполнять лишь заранее заложенные инструкции (как правило, математические вычисления), ограниченные конфигурацией самих устройств. Фундаментальный недостаток подобной архитектуры — необходимость полной физической переконфигурации для выполнения других задач.

К устройствам подобного типа можно отнести абак, счеты, арифмометр и логарифмическую линейку (Рисунки 1.1.7‑1.1.9).

_images/01_01_07.png

Рисунок 1.1.7 — «Паскалина» (1642 г.) — первое реально осуществленное и получившее известность механическое цифровое вычислительное устройство, изобретенное французским ученым Блезом Паскалем. Прототип устройства суммировал и вычитал пятиразрядные десятичные числа 57 ¶

_images/01_01_08.png

Рисунок 1.1.8 — Арифмометр — вычислительная машина, предназначенная для точного умножения и деления, а также для сложения и вычитания 58 ¶

_images/01_01_09.png

Рисунок 1.1.9 — Логарифмические линейка — аналоговое вычислительное устройство, позволяющее выполнять несколько математических операций. Принцип действия основан на том, что умножение и деление чисел заменяется соответственно сложением и вычитанием их логарифмов 59 ¶

Известная электронно-механическая машина Turing Bombe, созданная английским математиком, логиком и криптографом Аланом Тьюрингом, и использовавшаяся во время Второй мировой войны для расшифровки «Энигмы» (немецкой шифровальной машины) также являлась непрограммируемым устройством (Рисунок 1.1.10).

_images/01_01_10.png

Рисунок 1.1.10 — Дешифровальная машина Bombe 60 ¶

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

1.1.3.2. Класс 2 — Произвольные данные¶

Первой попыткой «программирования» устройства был ткацкий станок французского изобретателя Жозефа Мари Жаккарда (1801 г.), где вышивка определялась «динамически» — перфокартой . Перфокарта содержала информацию наличием или отсутствием отверстий в определенных позициях карты и в дальнейшем стала предшественником современных устройств ввода информации (магнитной ленты, дискет, дисков, флеш-памяти и др.) (Рисунки 1.1.11‑1.1.12).

_images/01_01_11.png

Рисунок 1.1.11 — Ткацкий станок с управлением с помощью перфокарт 61 ¶

_images/01_01_12.png

Рисунок 1.1.12 — Заполненная перфокарта конца XX века 62 ¶

К середине XIX века английский математик Чарлз Бэббидж разработал проект аналитической машины — прообраза современной ЭВМ (Рисунок 1.1.13).

_images/01_01_13.png

Рисунок 1.1.13 — Аналитическая машина Бэббиджа (первый механический общецелевой компьютер) в Музее естествознания (Лондон) 63 ¶

В аналитической машине Бэббидж предусмотрел следующие части:

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

склад (хранение данных и результатов обработки);

фабрика или мельница (производит операции над данными);

управляющий элемент (control);

устройства ввода‑вывода информации.

Для создания компьютера в современном понимании оставалось лишь придумать схему с хранимой программой, что было сделано 100 лет спустя в проекте ЭНИАК.

Коллега Бэббиджа Ада Лавлейс принимала участие в создании описания машины, составила первую в мире программу для этой машины (вычисление чисел Бернулли), а также ввела в употребление термины «цикл» и «рабочая ячейка», и считается первым программистом в истории.

В конце XIX века на основе идеи Беббиджа американский инженер Герман Холлерит создает первый табулятор — электромеханическую машину, предназначенную для автоматической обработки (суммирования и категоризации) числовой и буквенной информации, записанной на перфокартах, с выдачей результатов на бумажную ленту или специальные бланки (Рисунок 1.1.14).

_images/01_01_14.png

Рисунок 1.1.14 — Ранний табулятор фирмы IBM 64 ¶

1.1.3.3. Класс 3 — Произвольные задачи и данные¶

Идея хранение программы в памяти устройства начала зарождаться в 1936 г., когда Алан Тьюринг описал гипотетическую машину (названную им универсальной вычислительной машиной), известной сегодня как Машина Тьюринга. Машина имела бесконечное хранилище в виде ленты (память в современной терминологии), содержащее как данные, так и инструкции для манипулирования ими (в виде 0 и 1), а также имела простые инструкции для чтения/записи и перемещения этой ленты. Тезис Черча-Тьюринга гласил о том, что если какой‑либо процесс является вычисляемым, машина Тьюринга сможет его вычислить (быть запрограммирована для вычисления) 29.

Архитектура фон Неймана

Венгеро‑американский математик Джон фон Нейман, впечатленный работами Тьюринга, во время работы в Манхэттенском проекте был привлечен к работе над компьютером с хранимой в памяти программой. В это время он сформулировал идею архитектуры такого устройства, названной в последствии архитектурой фон Неймана, которая используется в виде базовой в большинстве современных ЭВМ (Рисунок 1.1.15).

_images/01_01_15.png

Рисунок 1.1.15 — Архитектура фон Неймана (одинарные линии показывают управляющие связи, двойные — информационные) 65 ¶

Компьютер состоит из нескольких основных устройств (арифметико‑логическое устройство, управляющее устройство, память, внешняя память, устройства ввода и вывода).

Арифметико‑логическое устройство выполняет логические и арифметические действия, необходимые для переработки информации, хранящейся в памяти.

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

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

Данные, которые хранятся в запоминающем устройстве, представлены в двоичной форме.

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

Выполнение кода программы на компьютере с архитектурой фон Неймана определяет командный цикл (fetch-execute cycle) 30. Т.к. программа находится в памяти, а выполняет ее процессор 48, необходимо каждую инструкцию предварительно скопировать из памяти в память процессора (регистр). Адрес следующей команды сохраняется в процессоре в программном счетчике.

В простом виде командный цикл выглядит следующим образом:

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

Одним из первых по‑настоящему современных компьютеров, реализующим архитектуру фон Неймана, был британский Манчестерский Марк I (1949 г.) — полностью электронный компьютер с хранимой в оперативной памяти программой (Рисунок 1.1.16). Аналогичные компьютеры (на собственной элементной базе) с разницей в несколько лет появились в дальнейшем в СССР, США и других странах.

_images/01_01_16.png

Рисунок 1.1.16 — Манчестерский Марк I 66 ¶

Марк I имел длину около 17 м., включал в себя 75 тысяч электронных ламп и выполнял операцию сложения за 3 с. (Видео 1.1.3).

Видео 1.1.3 — Машина Марк I

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

1.1.3.4. Программирование на первых ЭВМ¶

До реализации компьютера на базе архитектуры фон Неймана решение задачи включало 3 отдельных этапа.

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

через панель ввода: обычно это были тумблеры (кнопки переключения состояний) (Рисунок 1.1.17);

через устройство автоматического ввода: используя перфоленту или перфокарту (Рисунок 1.1.18).

_images/01_01_17.png

Рисунок 1.1.17 — Советский компьютер БЭСМ-2: ввод программы осуществлялся с помощью тумблерной панели 67 ¶

_images/01_01_18.png

Рисунок 1.1.18 — Британский Марк I: ввод программы осуществлялся с помощью перфоленты 68 ¶

Команда распознавалась устройством и выполнялась им.

Оператор снимал результаты выполнения команд и расшифровывал их на «человеческий» язык (Рисунок 1.1.19).

_images/01_01_19.png

Рисунок 1.1.19 — Советская МЭСМ и академик Лебедев С.А. 69 ¶

Схематично данный процесс выглядел так, как показано на Рисунке 1.1.20.

_images/01_01_20.png

Рисунок 1.1.20 — Схематичный процесс решения задачи на первых компьютерах ¶

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

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

СССР внес огромный вклад в становление и развитие вычислительной техники, что признается во всем мире: Google: Remembering a remarkable Soviet computing pioneer, Советские компьютеры: преданные и забытые.

Рекомендуется дополнительно изучить историю вычислительной техники, например, на ресурсах 1, 2, 3 и др.

Обзор современного состояния отечественной IT-сферы и сферы микроэлектроники можно посмотреть на сайте Русский эксперт: Российские микропроцессоры, Российский_IT-сектор и др.

1.1.4. Языки программирования¶

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

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

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

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

лексических (словарный запас языка);

синтаксических (набор правил, описывающий комбинации символов алфавита, считающиеся правильно структурированной программой (документом) или ее фрагментом);

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

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

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

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

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

Например, язык С++ имеет официальный стандарт (ISO/IEC 14882:2014) и различные реализации: GNU C++, Microsoft Visual C++ и др.

1.1.4.1. Машинный код¶

Первым языком программирования можно считать Машинный код где каждая инструкция выполняет определенное действие:

операция с данными (например, сложение или копирование машинного слова в регистре или в памяти);

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

при этом представляя несколько 0 и 1 в более удобном виде.

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

Пример одного из вариантов программы для вывода на экран фразы «Hello, world!» на машинном коде (в шестнадцатеричном и двоичном представлении) приведен в Листинге 1.1.1.

1.1.4.2. Языки ассемблера¶

Попытка сделать машинные команды более человекочитаемыми привели к созданию языков ассемблера (1950‑е гг.). Команды языков данного вида как правило один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов.

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

Программа из Листинга 1.1.1, записанная на языке ассемблера приведена в Листинге 1.1.2.

Несомненным плюсом языков ассемблера по сегодняшний день является крайне эффективная работа программы (быстрый и компактный код).

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

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

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

Участки кода на языке ассемблера также могут встраиваться в другие языки (например, C++) для оптимизации критичных участков кода.

1.1.4.3. 40-е гг.: первый язык высокого уровня¶

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

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

Языки программирования, которые имеют достаточный уровень абстракции — оперируют сложными структурами данных и умеют выполнять над ними комплексные операции (что в машинном коде повлекло бы длинные и сложные цепочки кода), относят к языкам высокого уровня. Примеры таких языков — C, Pascal, Python, Java и др.

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

На Рисунке 1.1.21 приведено дерево развития наиболее известных языков программирования по конец 2000-х гг. (рост идет и в настоящий момент). Еще один вариант дерева приведен тут 73.

_images/01_01_21.png

Рисунок 1.1.21 — Дерево наиболее известных языков программирования высокого уровня 4 ¶

На Видео 1.1.4 приведен краткий исторический обзор языков программирования (англ.).

Видео 1.1.4 — History Of Programming (Educational Video)

Исторически первым спроектированным языком программирования высокого уровня был Планкалкюль (нем. Plankalkül — исчисление планов), созданный немецким инженером Конрадом Цузе в 1943-45 году и впервые опубликованный в 1948 году.

Планкалкюль обладал многими возможностями, которыми обладают современные языки, однако, работа в отрыве от других специалистов Европы и США привела к тому, что лишь незначительная часть его работы стала известной, а сама разработка осталась теоретической. Полностью работа Цузе была издана лишь в 1972 году, а первая реализация языка Планкалкюль (для современных компьютеров) была создана в Свободном университете Берлина лишь в 2000 году, через пять лет после смерти Конрада Цузе.

1.1.4.4. 50-е гг.: сфера науки и бизнеса¶

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

В период 1954-1957 гг. американским ученым в области информатики Джоном Бэкусом совместно с компанией IBM разрабатывается Fortran (англ. FORmula TRANslator) — первый язык программирования общего назначения применяемый до сих пор (он совершенствуется и вбирает в себя различные нововведения, а последняя версия датируется 2010 г.), существует большое количество написанных на нем программ и библиотек подпрограмм.

Пример программы на одном из диалектов Фортрана приведен в Листинге 1.1.3.

В 1958 г. американский информатик Джон Маккарти изобретает язык Lisp (англ. LISt Processing language) — первый язык программирования, который до сих пор является одним из основных средств моделирования различных аспектов искусственного интеллекта.

Нововведениями Лиспа являлись:

представление программ и данных системами линейных списков символов;

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

Пример программы на одном из диалектов Лиспа приведен в Листинге 1.1.4.

В 1959 г. под руководством американской ученой и контр-адмирала флота США Грейс Хоппер создается язык COBOL (англ. COmmon Business Oriented Language), предназначенный, в первую очередь, для разработки бизнес-приложений.

Начиная карьеру как программист компьютера Марк I, Хоппер также вошла в историю как:

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

сторонник и разработчик концепции машинно-независимых языков программирования;

популяризатор термина «отладка» (исправление сбоев в работе программы).

Кобол — стандартизованный язык практически с момента своего рождения, используемый и сегодня — еще в 2006 году Кобол считался языком программирования, на котором было написано больше всего строк кода.

Пример программы на одном из диалектов КОБОЛа приведен в Листинге 1.1.5.

В 1958—1960 гг. появляется Algol (англ. ALGOrithmic Language) — язык, повлиявший практически на все языки следующего десятилетия (Pascal, С и другие). Алгол был популярен в Европе, в том числе в СССР, в то время как сравнимый с ним язык Фортран был распространен в США и Канаде. Алгол является предком довольно большого числа современных языков программирования (от Си и далее).

К нововведениям Алгола стоит отнести:

вложенные блоки: код мог быть сгруппирован в блоки (например, условие внутри условия) без необходимости вынесения кода в отдельную процедуру;

понятие области видимости: блок программы мог иметь свои закрытые переменные, процедуры и функции, невидимые для внешнего кода.

Пример программы на одном из диалектов Алгола (ALGOL 68) приведен в Листинге 1.1.6.

1.1.4.5. 60-70-е гг.: универсальность¶

С повышением доступности компьютеров (например, в 1964 г. появляется популярная модель IBM 360) и появлением возможности работы в режиме разделения времени (time-sharing), доступ к компьютеру получили не только крупные научно-исследовательские центры, но и предприятия, образовательные учреждения, в том числе учащиеся и специалисты, не являющиеся подготовленными программистами, но нуждающиеся в решении на компьютере своих задач.

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

В 1964 г. IBM разрабатывает язык PL/I (англ. Programming Language I), предназначавшийся для научных, инженерных и бизнес-ориентированных вычислений. В это время научные и бухгалтерские программы не только использовали разные компьютеры, но еще и писались на разных языках: научные — на Фортране, бухгалтерские — в основном на Коболе. Целью ПЛ/1 было создание языка, подходящего для обоих типов приложений.

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

большой набор встроенных типов данных;

мощный механизм итераций;

обработка исключительных ситуаций;

макросы и отладка.

Несмотря на заявленные характеристики и мощные возможности, PL/I не добился такого же успеха как Fortran или COBOL в виду сложной и неоптимальной для того времени реализации.

Пример программы на PL/I приведен в Листинге 1.1.7.

К 1964 г. появляется язык Basic (англ. Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих), создававшийся как инструмент, основной задачей которого было предоставить студентам-непрограммистам возможность после минимального обучения самостоятельно писать простейшие программы для собственных нужд, чтобы не отвлекать на эту работу специалистов. При этом подразумевалось, что на Бейсике должна быть возможность писать относительно эффективные программы, хоть и без знания принципов аппаратного обеспечения.

Несмотря на свою простоту Бейсик завоевал популярность и даже сегодня остается востребованным и используется в различных диалектах, например, в качестве встроенного языка текстового процессора Microsoft Word (VBA), или средства визуального программирования Visual Basic, а также других вариантах.

Пример программы на одном из диалектов Бейсика (QuickBASIC 4.5) приведен в Листинге 1.1.8.

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

Несмотря на угасающую популярность, язык непрерывно развивается: сегодня существует множество диалектов, поддерживающих как визуальное и объектное программирование (Delphi или Lazarus/FreePascal), так и являющихся прямыми «улучшенными» потомками (Modula, Oberon и др.).

Пример программы на Паскале приведен в Листинге 1.1.9.

В 1972 г. появляется первый язык логического программирования Prolog, основанный на теории и аппарате математической логики.

Пример программы на одном из диалектов Пролога (GNU Prolog) приведен в Листинге 1.1.10.

В 1972 г. в научно-исследовательской компании Xerox PARC американский ученый в области теории вычислительных систем Алан Кэй с коллегами разрабатывает первый объектно-ориентированный язык общего назначения Smalltalk.

Smalltalk привнес следующие нововведения:

все — объекты: строки, целые числа, логические значения, определения классов, блоки кода и т.д.;

работа программы — изменение свойств объекта и вызов действий, которые они поддерживают;

динамическая типизация: типы переменных не указываются в программе, а является ли операция правильной, определяет объект-получатель;

автоматическая сборка мусора;

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

Пример программы на одном из диалектов Smalltalk приведен в Листинге 1.1.11.

В период с 1969 по 1973 г. сотрудники американской телекоммуникационной компании Bell Labs Деннис Ритчи и Кен Томпсон разрабатывают язык C — язык общего назначения, изначально предназначенный для реализации операционной системы UNIX.

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

Пример программы на Си приведен в Листинге 1.1.12.

Ada — язык, разрабатываемый в течение 70-х гг. Министерством обороны США с целью разработать единый язык программирования для встроенных систем (бортовых систем управления военными объектами — кораблями, самолетами, танками, ракетами, снарядами и т.п.), функционирующих в режиме реального времени.

Синтаксис Ады унаследован от языков типа Algol или Паскаль, но расширен, а также сделан более строгим и логичным. Для удовлетворения требованиям надежности язык построен таким образом, чтобы как можно большее количество ошибок обнаруживалось на этапе компиляции. Кроме того, одним из требований при разработке языка была максимально легкая читаемость текстов программ, даже в ущерб легкости написания. Язык используется в том числе отечественными военными (на нем, например, написана станция документальной связи МО РФ), однако в целом малопопулярен.

Пример программы на Ada приведен в Листинге 1.1.13.

1.1.4.6. 80-е гг.: консолидация идей и модульность¶

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

При проектировании языков программирования возросло внимание к программированию масштабируемых систем с использованием модулей (модуль — функционально законченный фрагмент программы, который можно использовать в программе). Удобство использования модульной архитектуры заключается в возможности обновления (замены) модуля, без необходимости изменения остальной системы.

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

В 1983 г. программист компании Bell Бьерн Страуструп представляет язык C++ — первый язык, совместивший черты высокоуровневого языка (объектно-ориентированного, в частности), и низкоуровнего.

C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его применения включает создание операционных систем, разнообразных прикладных программ, драйверов устройств, приложений для встраиваемых систем, высокопроизводительных серверов, а также развлекательных приложений. Имеет компиляторы практически под все популярные платформы и операционные системы. Сегодня также позволяет создавать приложения с графическим интерфейсом (Microsoft Visual C++, С++Qt и др.).

Оказав огромное влияние на более современные языки Java и C#, язык постоянно развивается и представляет собой собранную воедино большую массу технологий. Последний стандарт языка, известный как C++14, датируется 2014 г.

Пример программы на C++ приведен в Листинге 1.1.14.

В то же время 1983 г. в компании Apple под руководством Брэда Кокса разрабатывается собственный Си с классами – Objective-C, построенный на основе языка Си и идей Smalltalk.

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

Пример программы на Objective-C приведен в Листинге 1.1.15.

В 1986 г. французский ученый в области информатики Бертран Мейер создает язык Eiffel (Эйфель) — объектно-ориентированный язык программирования с алголоподобным синтаксисом, в котором впервые был реализован метод контрактного программирования.

Метод контрактного программирования предполагает, что проектировщик должен определить формальные, точные и верифицируемые спецификации интерфейсов для компонентов системы. Данные спецификации называются «контрактами» в соответствии с концептуальной метафорой условий и ответственности в гражданско-правовых договорах.

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

Пример программы на Eiffel приведен в Листинге 1.1.16.

Ларри Уолл, лингвист по образованию, в 1987 г. создает язык Perl (англ. Practical Extraction and Report Language — «практический язык для извлечения данных и составления отчетов») — язык программирования общего назначения, который был первоначально создан для манипуляций с текстом, но на данный момент используется для выполнения широкого спектра задач, включая системное администрирование, веб-разработку, сетевое программирование, игры, биоинформатику, разработку графических пользовательских интерфейсов. Язык можно охарактеризовать скорее как практичный (легкость в использовании, эффективность, полнота), чем красивый (элегантность, минималистичность).

Пример программы на Perl приведен в Листинге 1.1.17.

В 1988 г. американский ученый в области информатики Джон Оустерхаут создает язык Tcl (англ. Tool Command Language — «командный язык инструментов») — один из первых скриптовых языков высокого уровня. Основная область применения — быстрое прототипирование, создание графических интерфейсов для консольных программ (пакетов программ), встраивание в прикладные программы, тестирование. Также Tcl применяется в веб-разработке.

Пример программы на Tcl приведен в Листинге 1.1.18.

1.1.4.7. 90-е гг.: Интернет-эпоха¶

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

Можно выделить несколько тенденций и идей развития в это время:

продолжение комбинации идей предыдущих десятилетий и распространение функциональных языков;

повышение продуктивности разработки;

продолжение развития скриптовых (динамических) языков;

Желание увеличить производительность работы программиста в совокупности с сохранением проверенных временем идей привело к появлению новых языков высокого уровня, а также сред быстрой разработки (англ. Rapid Application Development — RAD), включающих кроме самого языка и транслятора интегрированную среду разработки (англ. Integrated Development Environment — IDE). Все такие языки программирования были объектно-ориентированными, а в ряде случаев IDE также позволяла выполнять графическое проектирование приложений.

В 1991 г. нидерландский программист Гвидо ван Россум представляет Python — высокоуровневый мультипарадигменный язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен, в то же время стандартная библиотека включает большой объем полезных функций.

Python портирован и работает почти на всех известных платформах — от КПК до мейнфреймов. Язык используется в различных качествах: как основной язык программирования или для создания расширений и интеграции приложений. На Python реализовано большое количество проектов, также он активно используется для создания прототипов будущих программ. Python используется в основном в качестве языка веб-программирования, обработки данных и научных задач.

Пример программы на Python приведен в Листинге 1.1.19.

Спустя 2 года, в 1993 г., японский разработчик Юкихиро Мацумото создает язык Ruby — высокоуровневый язык программирования для быстрого и удобного объектно-ориентированного программирования, который, по словам автора, более мощный, чем Perl, и более объектно-ориентированный, чем Python.

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

Основные сферы применения приблизительно такие же, как и у Python.

Пример программы на Ruby приведен в Листинге 1.1.20.

Еще один скриптовый язык программирования Lua в 1993 г. в Бразилии разрабатывает преподаватель университета Роберто Иерусалимский совместно с коллегами.

Язык широко используется для создания тиражируемого программного обеспечения (например, на нем написан графический интерфейс пакета Adobe Lightroom). Также получил известность как язык программирования уровней и расширений во многих играх (в том числе World of Warcraft) из-за удобства встраивания, скорости исполнения кода и легкости обучения.

Пример программы на Lua приведен в Листинге 1.1.21.

В 1993 г. также создается R — язык программирования для статистической обработки данных и работы с графикой. R широко используется как программное обеспечение для анализа данных и фактически стал стандартом для статистических программ, имеет собственные IDE.

Пример программы на R приведен в Листинге 1.1.22.

В 1995 г. набирает популярность язык JavaScript как встраиваемый язык для программного доступа к объектам приложений. Наиболее широко применяется в браузерах как язык сценариев для придания интерактивности веб-страницам.

Пример программы на JavaScript приведен в Листинге 1.1.23.

В 1995 г. появляется PHP (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста») — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков, применяющихся для создания динамических веб-сайтов.

Пример программы на PHP приведен в Листинге 1.1.24.

Также в 1995 г. появляется язык Java — язык программирования, разработанный компанией Sun Microsystems (в последующем приобретенной компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре, с помощью виртуальной Java-машины.

Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности, в рамках которой исполнение программы полностью контролируется виртуальной машиной — любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером), вызывают немедленное прерывание.

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

Пример программы на Java приведен в Листинге 1.1.25.

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

На Рисунке 1.1.22 приведен пример IDE Delphi (Object Pascal), аналогичной средой, но для языка Basic выступал Visual Basic (1991), в качестве одного из вариантов для C++ выступала графическая библиотека Qt (Рисунок 1.1.23).

_images/01_01_22.png

Рисунок 1.1.22 — IDE Borland Delphi 1 (1995 г.) 70 ¶

_images/01_01_23.png

Рисунок 1.1.23 — IDE Qt Creator 71 ¶

1.1.4.8. 2000-е и текущие тренды¶

Развитие языков продолжилось в 2000-е гг. и идет до сих пор. Некоторые тренды:

увеличение поддержки функционального программирования в ключевых языках программирования для упрощения кода;

введение конструкций для поддержки параллельного программирования (несколько процессов) и распределенных вычислений (несколько компьютеров);

механизмы увеличения безопасности языка (проверки типов, зависимостей и т.д.);

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

компонентно-ориентированная разработка (в т.ч. использование различных фреймворков);

автоматизация процесса программирования (XML for graphical interface (XUL, XAML));

интеграция с базами данных;

открытое программное обеспечение как философия создания и развития языков программирования;

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

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

C# и .NET Framework

В 2000 г. корпорация Майкрософт под руководством Андерса Хейлсберга представляет язык C# — объектно-ориентированный язык программирования для специально созданной платформы Microsoft .NET Framework, основной идеей которой являлось обеспечение свободы разработчика за счет предоставления ему возможности создавать приложения различных типов, способные выполняться на различных типах устройств и в различных средах.

Общая схема работы языков в рамках платформы .NET приведена на Рисунке 1.1.24.

_images/01_01_24.png

Рисунок 1.1.24 — Принцип работы языков платформы .NET 72 ¶

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. В языке представлены практически все современные достижения «языкостроения», а реализация языка доступна в том числе на не-Windows средах (проект Mono).

Пример программы на C# приведен в Листинге 1.1.26.

Go — компилируемый, многопоточный язык программирования, разработанный компанией Google в 2009 г. Первоначальная разработка Go началась в сентябре 2007 года, а его непосредственным проектированием занимались Роберт Гризмер, Роб Пайк и Кен Томпсон.

На данный момент его поддержка осуществляется для операционных систем: FreeBSD, OpenBSD, Linux, Mac OS X, Windows, начиная с версии 1.3 в язык Go включена экспериментальная поддержка DragonFly BSD, Plan 9 и Solaris, начиная с версии 1.4 поддержка платформы Android.

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

Пример программы на Go приведен в Листинге 1.1.27.

Rust (англ. Rust — ржавчина) — мультипарадигменнй компилируемый язык программирования общего назначения, спонсируемый Mozilla Research, поддерживающий функциональное программирование, модель акторов (один из подходов к распараллеливанию программ, где одновременно выполняющиеся процессы передают друг другу сообщения), процедурное программирование, объектно-ориентированное программирование.

Rust — системный язык программирования, внимание которого сосредоточено на трех задачах: безопасность, скорость и параллелизм. Он сопоставим по скорости и возможностям с C++, однако, дает большую безопасность при работе с памятью, что обеспечивается механизмами ограничения. Rust также направлен на достижение «абстракции с нулевой стоимостью».

После нескольких лет активной разработки первая стабильная версия (1.0) вышла 15 мая 2015 года, после чего новые версии выходят раз в 6 недель. Программы, написанные на ранних стабильных версиях языка будут собираться и на более новых стабильных версиях.

Что такое ЭВМ?

Компьютер (от английского computer — вычислитель) – это программируемое электронно-вычислительное устройство, предназначенное для хранения и передачи информации, а также обработки данных. То есть компьютер представляет собой комплекс программно-управляемых электронных устройств.

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

Что такое ЭВМ?

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

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

По принципам фон Неймана компьютер должен состоять из следующих устройств:

арифметическо-логическое устройство, которое выполняет логические и арифметические операции;

запоминающее устройство для хранения данных;

устройство управления, организующее процесс выполнения программ;

устройства ввода-вывода информации.

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

Большинство компьютеров проектируются по принципу открытой архитектуры:

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

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

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

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

Применение компьютеров

Первые ЭВМ были созданы только для вычислений (что следует из названия), и первым высокоуровневым языком программирования стал Фортран, который был предназначен только для производства математических расчетов.

Затем компьютерам нашли еще одно применение – базы данных. В первую очередь в них нуждались банки и правительства. Для баз данных требовались более сложные компьютеры с развитыми системами хранения информации и ввода-вывода. Был разработан соответствующий этим требованиям язык Кобол. Через некоторое время появились системы управления базами данных (СУБД), у которых были собственные языки программирования.

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

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

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

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

Электронно-вычислительная машина

  • Электро́нно-вычисли́тельная маши́на (сокращённо ЭВМ) — комплекс технических, аппаратных и программных средств, предназначенных для автоматической обработки информации, вычислений, автоматического управления. При этом основные функциональные элементы (логические, запоминающие, индикационные и др.) выполнены на электронных элементах .

Согласно Большому энциклопедическому словарю,2000 ЭВМ — то же, что компьютер.

Связанные понятия

Существуют и иные значения этого слова, см. Мир«МИР» (сокращение от «Машина для Инженерных Расчётов») — серия электронных вычислительных машин, созданных Институтом кибернетики Академии наук Украины, под руководством академика В. М. Глушкова.

Необходимость разделять вычислительные задачи и выполнять их одновременно (параллельно) возникла задолго до появления первых вычислительных машин.

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

Интегра́льная (микро)схе́ма (ИС, ИМС, IC (англ.)), микросхе́ма, м/сх, чип (англ. chip «тонкая пластинка»: первоначально термин относился к пластинке кристалла микросхемы) — микроэлектронное устройство — электронная схема произвольной сложности (кристалл), изготовленная на полупроводниковой подложке (пластине или плёнке) и помещённая в неразборный корпус или без такового, в случае вхождения в состав микросборки.

Система числового программного управления (СЧПУ) «Электроника НЦ-31» — это система контурного управления типа ЧПУ. Она предназначена для оперативного управления станками со следящими электроприводами по двум линейным осям, главным приводом и измерительными фотоимпульсными датчиками. Система позволяет создавать мультипроцессорные конфигурации (до четырёх процессоров), стандартная корзина позволяет использовать два процессора, но во всех станочных применениях используется однопроцессорная конфигурация.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *