Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Какова хронология развития языков программирования?

ТехнологииПрограммированиеIt (информационные технологии)
Михаил Ребровский
  · 6,3 K

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

Для каждой команды был какой-то код, для удобства записываемый как 16-ричное число. Например (условно), код: "A3 DD 05 00" мог загружать в регистр A число 5, а код "DD" - складывать регистр A с регистром B, помещая результат в B.

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

MOV A, 5
ADD B, A

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

Поэтому появились языки высокого уровня, программы на которых переводятся в машинный код или в тот же ассемблер, который от него почти не отличается. В таких программах уже как правило не нужно знать как устроен процессор, можно давать команды, работающие непосредственно с устройствами (экран, клавиатура). Но главное, что в них появились более наглядные структуры - циклы, условия. Постепенно появилось понимание того, что программы должны иметь правильную структуру. Дело в том, что первые языки типа Бейсика и Фортрана активно использовали операторы "GOTO метка", доходя до которых процессор перескакивал на заданную метку и продолжал выполнять программу с этого места, а потом по каким-то условиям мог вернуться назад. Такие программы было очень сложно отлаживать и понимать, что они делают. Код называли "лапшой" из-за его запутанности. Поэтому были разработаны структуры, допустимые в программировании - циклы, функции, а оператор GOTO либо был исключён, либо его использование крайне ограничили. Самым популярным языком на этот момент развития стал язык Си. Преимущественно в учебных целях также использовался Паскаль.

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

Сейчас большинство языков являются объектно-ориентированными: Java, JavaScript, C++.

Существуют и другие типы языков - функциональные или с их элементами (Лисп, Scala, Haskell), декларативные (Пролог, SQL, HTML).

Можно ещё выделить момент появления сред разработки, дающих возможность рисовать интерфейс программы мышкой и создавать простые программы почти без написания кода. Это Visual Basic, Delphi, потом Visual Studio, C#. Однако такой подход не всегда оправдан.

Сейчас, на мой взгляд, есть активизация интереса к функциональным языкам вроде Scala.

На этом, пожалуй, завершу.