SoftCraft
разноликое программирование

Top.Mail.Ru

Языки программирования – эволюция?


Орехов Антон Игоревич
© 2005

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

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

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

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

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

Языки программирования часто оценивают по уровню. Уровень языка показывает, насколько язык близок к естественной для человека записи. Процедурные языки – самого низкого уровня. Функциональные – значительно выше. Логические языки в принципе могут быть самого высокого уровня, но из-за высокой сложности теории, лежащей в их основе, разрабатываются довольно медленно. Широко распространённых в мире языков логической группы довольно мало.

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

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

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

Рисунок 1 - Диаграмма уровня языков математической записи.

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

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

Остаётся вопрос, что находится в правом нижнем углу диаграммы? Это должен быть язык максимально приближенный к машинной специфике, но при этом быть крайне декларативным. Один мой друг предложил название для такого языка – Идея Ассемблер. Возможно в будущем (может быть и не таком уже и далёком) такие сверх интеллектуальные процессоры будут созданы. Будем внимательно следить за новыми достижениями нанотехнологии и квантовой теории :-).