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

с сайта http://shatalov.su/ru/articles/theory/programming_languages.php

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

История языков программирования

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

Для процессора любая программа - это просто последовательные перепады напряжения. Умные инженеры придали этим перепадам числовые значения.

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

Итак, любая программа для процессора выглядит вот так:

01011000101101011000110101011100000101010111101001010101111100000101001001010100101010010101

Инженерам приходилось писать и читать такие программы.

В начале 50-х появляется ассемблер. Это язык программирования низкого уровня. Программа на ассемблере выглядит намного понятнее. В ассемблере команды соответствуют инструкциям процессора. Когда программист написал программу на ассемблере, он запускает специальную одноимённую программу, которая переводит команды ассемблера в нули и единицы.

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

В 1957 году был придуман первый язык программирования высокого уровня - Fortran (Formula Translation). Создателем языка был Джон Бэкус, а сам язык использовался в IBM 704. В то время ещё не существовало удобных устройст ввода/вывода и для этих целей использовали перфокарты. Первоначально Фортран мог обрабатывать только числа (обработка текста появилась позднее).

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

История языков программирования

Нас интересует ветка, которая привела к С++. Предками языка C были ALGOL-60 (Algorithmic Language) - 1960 и PL-1 (Programming Language) - 1966. ALGOL был первым языком программирования, реализованным в нашей стране.

Язык C (1970) (читается как си) был побочным продуктом создания операционной системы UNIX (1971) в BellLabs. Создателем C был Деннис Ритчи. А сам язык (как и операционная система UNIX) впервые использовался в компьютерах PDP-11.

C++ был создан в 1983г. Бъярном Страуструпом и расширял язык C (добавлял в него возможности ООП - подробности мы узнаем позже).

Далее, кратко пройдусь по другим языкам:
COBOL (Common Business Oriented Language) – 1960. Язык для обработки в основном текстовой информации.
Pascal (1970) был создан талантивым человеком - Никлаусом Виртом, который участвовал в создании многих других языков. К сожалению, ему не сильно везло. В 1995г. была выпущена интегрированная среда для потомка Pascal'а - Delphi.
Симула-67 – впервые реализованы концепции объектно-ориентированного программирования (ООП). Симула была создана в Норвегии и во многом являлась потомком ALGOL-60. Развитие ООП привело к созданию Smalltalk в 1972г.
Особняком стоит язык Forth (1977), созданный Чарльзом Муром. Единственный язык высокого уровня, для которого есть реализация процессора (т.е. командами процессора являются команды языка Forth).

Концепции программирования

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

Основными концепциями мы будем считать две: структурное программирование и объектно-ориентированное. Они появились примерно в одно время (60-е годы). Мы ещё обсудим эти концепции подробно в следующих уроках.

Теперь нам необходимо ответить на несколько вопросов касательно программирования:

Что такое "программа"?

Программа - это инструкция компьютеру (процессору) что-то сделать. При этом разные программы решают разные задачи.

Что должен уметь делать программист?

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

Исходный код - это просто текст (на определённом языке программирования). Чтобы исходный текст превратился в рабочуй программу требуется перевести его на ассемблер. Этим занимаются специальные программы: интерпретаторы и компиляторы. Для каждого языка (и под каждую операционную систему) нужен свой компилятор (или интерпретатор).

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

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

Выполнение программ

Выполнение программы выглядит так:
- Берётся исходный код на определённом языке высокого уровня.
- Исходный код переводится на ассемблер (в двоичную форму из текстовой) посредством компиляции/интерпретации. На этом этапе проверяется правильность написанной программы.
- Операционная система выполняет программу - даёт задание процессору.

Также программу можно представить в виде уровней:
- Исходный код (текст) на языке высокого уровня.
- Компиляция/интерпретация.
- Язык ассемблера (программа превратилась в нули и единицы).
- Инструкции процессора.
- Взаимодействие физических элементов (полупроводников) посредством электричества.

Заключение

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