Языки программирования
Язык программирования — система обозначений для описания данных (информации) и программ (алгоритмов) их обработки на цифровой вычислительной машине. Сейчас программисты повсеместно используют современные языки высокого уровня: Java, C#, PHP, C++, JavaScript, Python, Objective‑C, Ruby и др. Однако программы для первых вычислительных машин составлялись на простейшем из языков программирования — машинном языке. Конечно, простейшим он был не для программистов, которые писали программы, а для машины.
Машины, как правило, работают в_двоичной системе счисления, и_программы на_машинном языке записывают при помощи только двух символов: нуля и_единицы. Правда, программисты сразу придумали себе облегчение_— писали программы не_в_двоичной, а_в_восьмеричной системе счисления, а_перевод из_восьмеричной в_двоичную очень прост_— каждая восьмеричная цифра заменяется на_три двоичные. Например, (507)8 = (101_000_111)2. В_машину программа вводилась все равно в_двоичном виде и_благодаря этому могла непосредственно восприниматься и_выполняться аппаратурой машины.
Программа на машинном языке имеет вид таблицы из цифр, каждая её строчка соответствует одному оператору — машинной команде, которая является приказом машине выполнить определенные действия. При этом в команде, например, первые несколько цифр являются кодом операции, т. е. указывают машине, что надо делать (складывать, умножать и т.п.), а остальные цифры указывают обрабатываемые данные или где именно в памяти машины находятся нужные числа (слагаемые, сомножители и т.п.) и где следует запомнить результат операции (сумму, произведение и т. п.).
Например, команда сложения для ЭВМ БЭСМ‑2 выглядела так: 01 0070 0071 0072.
Первые две цифры 01 — это код операции сложения. По такой команде машина складывала число, хранящееся в ячейке памяти с номером 0070, с числом из ячейки с номером 0071. Результат записывался в ячейку с номером 0072. Номера ячеек в команде могут совпадать. Если перед выполнением команды 01 0073 0074 0073 в ячейку 0074 записать число 1, то число в ячейке 0073 увеличится на единицу, а после выполнения команды 01 0075 0075 0075 число в ячейке 0075 увеличится вдвое.
Составление программ на машинном языке — очень тяжелая и кропотливая работа, требующая чрезвычайного внимания и высокой квалификации программиста. Чтобы облегчить и повысить производительность его труда, были разработаны языки программирования, похожие на привычный язык математических формул.
Язык программирования задается тремя компонентами: алфавитом, синтаксисом и семантикой.
Алфавит — это набор различимых символов: букв, цифр, специальных знаков и т.п.
Например, алфавит машинного языка состоит из двух символов: 0 и 1, а если программа записана в восьмеричной системе счисления, то из восьми символов: 0, 1, 2, 3, 4, 5, 6 и 7.
Алфавит одного из ранее популярных языков программирования — ФОРТРАНа (ФОРТРАН — сокращение от ФОРмульный ТРАНслятор, т. е. формульный переводчик) содержит такие символы:
- двадцать шесть прописных (заглавных) букв латинского алфавита: A, B, C, …, Z;
- десять арабских цифр: 0, 1, 2, …, 9 (цифра 0 обычно выглядела перечеркнуто, чтобы отличить её от буквы O);
- специальные знаки: « » (пробел), «=» (для операции присваивания), «+» (для операции сложения), «−» (для операции вычитания), «*» (для операции умножения), «* *» (для операции возведения в степень) «/» (для операции деления), «(» и «)» (для изменения порядка проведения вычислений, для записи функций и др.), «,» (используется как разделительный знак при перечислениях), «.» (для отделения целой части числа от дробной вместо более привычной десятичной запятой), «'» (апостроф используется при печати текстов), «¤» (служебный знак для обозначения денежной единицы, иногда заменяемый на знак доллара «$» или на ромб «◊»).
Синтаксис в языке программирования — это совокупность правил образования конструкций языка из символов, определенных алфавитом. Например, правило образования одной из конструкций языка ФОРТРАН — идентификатора, или просто имени, заключается в следующем: идентификатор — это последовательность от одной до шести букв или цифр, обязательно начинающаяся с буквы. Примеры идентификаторов:
- A A 12345 ALFA
- I 1067890 INDEX
Семантикой в языке программирования называют совокупность правил истолкования конструкций языка, образованных в соответствии с синтаксисом.
Например, правила истолкования идентификатора переменной в ФОРТРАНе состоят в следующем:
- идентификатор определяет место в памяти машины, выделенное для хранения текущего значения переменной;
- первая буква идентификатора указывает, какого вида информация хранится в определяемом месте: если идентификатор начинается с одной из букв I, J, K, L, M или N, то переменная может принимать только целочисленные значения.
Большинство из языков программирования, разработанных к настоящему времени, являются последовательными. Программы, написанные на них, представляют собой последовательность приказов (инструкций, операторов). Эти операторы последовательно один за другим перерабатываются на машине в машинный код при помощи так называемых компиляторов. Как правило, компилятор — это довольно большая программа на машинном языке, которая заменяет каждый оператор языка программирования соответствующей ему группой машинных команд.
В результате использования языков программирования труд программиста существенно облегчился, появилась возможность для создания всё более сложных программ. Их использование требует всё больших мощностей компьютеров, что ведет к необходимости технологического прогресса в микроэлектронике.
Различают языки программирования низкого и высокого уровня.
Языки низкого уровня существенно зависят от организации и принципов работы конкретной машины, поэтому они называются машинно-зависимыми, или машинно-ориентированными языками. К ним относятся автокоды, ассемблеры, а также машинные языки. В отличие от машинного, автокоды и ассемблеры допускают использование условных (мнемонических) обозначений, которые с помощью трансляторов переводятся в команды данного процессора.
Языки высокого уровня, или машинно-независимые языки практически никак не связаны с устройством конкретной ЭВМ. Программы, написанные на таких языках, имеют наглядный, близкий к математическому языку вид, дают возможность использовать выражения, символические имена для переменных и функций.
Существующие языки программирования отличаются между собой допускаемыми типами данных, а также типами операций и средств, управляющих последовательностью применения операций к данным. Данные являются пассивной компонентой — это информация, хранящаяся в памяти машины. Активная компонента — операции — позволяет создавать, уничтожать и преобразовывать данные. Средства управления связывают данные и операции таким образом, что каждая операция применяется к соответствующим данным в соответствующее время.
Дальнейшее развитие вычислительной техники неминуемо влечет за собой развитие и совершенствование языков программирования. Производительность вычислительных машин повышается за счет параллельного (одновременного) выполнения операций, а большинство существующих языков программирования рассчитано на последовательное выполнение операций. Поэтому будущее, по‑видимому, за такими языками программирования, которые позволят описывать саму решаемую задачу, а не последовательность выполнения операторов. Последовательность же должна генерироваться уже самой машиной в процессе решения задачи.