История и тенденции развития ЯП

Пример1

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

Пример2

Необходимо скопировать файл из одного места в другое, используя давно устаревшую версию DOS и новую операционную оболочку Windows. В первом случае в командной строке надо набрать:

COPYПуть Имя файлаПуть Новое имя файла

(Откуда и что) (Куда и что)

Во втором случае – перетащить указателем файл с одного места на другое. Тогда примитивная версия DOS, как средство общения человека с ЭВМ будет низкого уровня, а Windows – высокого.

Замечание

Почти вся работа по компиляции ИМ, включая оптимизацию, проводится на первом этапе (блок 2).

Вывод

Модульная структура компилятора позволяет разработчикам ИПО при изменении архитектуры процессора преобразовать только блоки 3 и 4, оставив для пользователя неизменным блок 2.

 

История и тенденции развития ЯП

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

 

№ поколения Языки и системы программирования Характерные черты программных средств
Машинные. Машинно-зависимые, быстрые, сложные для освоения, требуют хорошего знания архитектуры ЭВМ.
Ассемблеры, макроассемблеры. В отличие от предыдущих боле удобны для использования, быстрые.
ЯВУ (Fortran, Algol, LOGO, Basic, Pascal, Forth, APL, Modula, PLM, Cobol, C, Simula и др. Во многом мобильные, более человеко-ориентированные, проще в освоении, более медленные.
Непроцедурные, генераторы отчетов, объектно-ориентированные, языки запросов, параллельные. Ориентированные на непрофессионального пользователя и ЭВМ с параллельной архитектурой.
Языки Искусственного интеллекта (ИИ), экспертных систем и баз знаний (БЗ), естественные языки. Повышение интеллектуального уровня ЭВМ и интерфейса с ними.

 

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

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

Третье поколение начинается с появления в 1956 г. первого ЯВУ Fortran, разработанного под руководством Дж. Бэкуса в фирме IBM. Первоначально Fortran обладал весьма ограниченными средствами обеспечения работы с символьной информацией и системой ввода/вывода. Однако его постоянное развитие, сделало его одним из самых распространенных ЯВУ. Он великолепно приспособлен для решения инженерно-технических и научных задач.

В настоящее время насчитывается более 2000 различных ЯВУ, а по оценкам некоторых специалистов и более 3000. Многие из них применяются весьма ограниченно, либо вовсе вышли из употребления (Algol, RPG), другие не утратили своих позиций с момента своего создания (Fortran, Forth, Ada, Lisp и др.).

Новые технологии программирования, используемые в ЯВУ 3-го поколения, привели к новым понятиям.

Стали различать:

· характер языка программирования: процедурный и непроцедурный;

· технологию программирования: модульная, структурная и неструктурная;

Суть процедурного языка программирования состоит в том, что все действия в программе, написанной на этом языке, строго определены. Например, в старых версиях Fortran вывод численных значений производился по установленным форматам ( Пример: F 7.2 означал, что выводимое число состоит из 7 символов: по одному символу отводится на знак «+» или «-» и десятичную точку; три цифры до и две после десятичной точки). В C++ над этой проблемой не задумываешься.

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

Структурное программирование – отсутствие (или минимальное использование) в управляющих структурах языка программирования меток и операторов условного и безусловного переходов. К структурным ЯВУ относятся Pascal, C, Ada и др.; к неструктурным: Fortran, Basic и др. Хотя, следует заметить, что языки первой группы и допускают организацию в программах управляющих структур посредством механизма меток и операторов условного и безусловного переходов, а второй (Fortran и др.) – создание структурированных программ.

Языки 4-го поколения характеризуются четырьмя направлениями развития:

1. Ярко выраженное непроцедурное программирование.

2. Объектно-ориентированное программирование.

3. Программирование с использованием сервисных системных услуг.

4. Параллельное программирование.

Непроцедурный характер языка программирования определяется тем, что программы на таких языках описывают только что, но не как надо сделать. В них скорее формируются соотношения, а не последовательности шагов выполнения выражения или функции. Например, на процедурном языке x = a + b (Fortran), на непроцедурном – x (n(a,b)) (Указать точную формулу на Lisp). Непроцедурные языки часто используются для решения задач по созданию искусственного интеллекта. Типичными представителями этого типа языков являются Prolog, Langin, Lisp и др.

Объектно-ориентированные языки базируются на понятии программного объекта, впервые использованного в языке Simula-67 и составившего впоследствии основу языка SmallTalk. Программный объект состоит из структур данных и алгоритмов и предназначен для выполнения операций со своими данными. Для остальной части программы – это черный ящик. Например, объекты с целыми, комплексными числами и массивами в качестве данных будут использовать различные алгоритмы, но одно и тоже ключевое слово (*), при выполнении операций умножения. К объектно-ориентированным языкам относятся: Pascal, C++, Simula, Actor и ряд других языков.

Системные сервисные услуги позволяют пользователю получать нужную информацию из баз данных на основе запросов, близких к естественным языкам и построенных на синтаксически простых правилах. Можно сказать, что это языки запросов. Примерами таких языков являются SQL, QBE фирмы IBM, Intellect фирмы Artificial Intelligence и т.д. Среди языков запросов фактически стандартом стал SQL - язык, на основе которого созданы и создаются ряд СУБД (dBase IV, RiBase и др.). Для большинства пользователей бывает трудно уловить разницу между языком запросов и СУБД. Яркий пример тому Access.

Языки параллельного программирования основаны на двух способах распараллеливания процессов. Первый способ – программист сам определяет и описывает параллельную структуру программы. Во втором – параллелизм определяет и реализует сам компилятор с языка программирования. Оба механизма распараллеливания имеют свои плюсы и минусы. Первый дает возможность во многих случаях получать высокий уровень распараллеливания с учетом специфики задачи и архитектуры ЭВМ, но требует существенной переделки традиционного алгоритма и больших затрат на разработку структуры управляющей программы. Второй дает менее существенный эффект от распараллеливания, но не требует от программиста разбиения задачи на параллельные подзадачи. В качестве примера языка параллельного программирования может служить язык PL/1, который еще лет 20 назад позволял одновременно выполнять операции ввода/вывода и обработки основной программы.

К пятому поколению, в настоящее время, можно отнести ЯВУ искусственного интеллекта, естественные, экспертные системы и базы знаний. К языкам искусственного интеллекта (ИИ) относят такие языки, как Lisp, Prolog, Interlisp, Expertlisp, IQLisp и др.

Естественные языки программирования отличаются от языков запросов тем, что пользователь освобождается от необходимости освоения каких-либо специальных словарей, грамматики и синтаксиса. Предложения естественного языка программирования (ЕЯП) похожи на предложения человеческой речи. В настоящее время используются следующие ЕЯП с ограниченными возможностями: Clout, Q&A, Savvy Retriever, HAL и др. Мнение, что естественный язык является наилучшим способом организации интерфейса пользователя с ЭВМ, не столь уже очевидно. Тщательно отработанный формальный язык предметной области бывает выразительнее естественного языка. Иногда рисунок легче понять, чем сказать о его сути. Например, пиктограммы. Скорее всего развитый языковый интерфейс будет представлять симбиоз естественного и формального языков.

 

Основные понятия лингвистического обеспечения

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

Определение 1

Программа – это последовательность символов, определяющее вычисление.

Определение 2

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

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

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

Определение 3

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

Вывод

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

 

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

Из концепции абстракции вытекает общее правило: чем выше уровень абстракции, тем больше деталей исчезает.

Если Вы пишете программу на языке C, то теряете возможность задавать распределение регистров, которая есть в ассемблере. Если пишете на языке Prolog, то теряете, имеющуюся в C, возможность определять произвольные связанные структуры с помощью указателей.

 








Дата добавления: 2016-08-08; просмотров: 640;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.013 сек.