Файл: Классификация языков программирования. Критерии выбора среды и языка разработки программ (История развития и появления языков программирования).pdf
Добавлен: 28.03.2023
Просмотров: 349
Скачиваний: 3
Примером самого первого логического языка программирования является язык PLANNER, который был разработан Карлом Хьюитом в лаборатории искусственного интеллекта Массачусетского технологического института в 1969 году. В нем была заложена возможность автоматического получения (вывода) результата из данных и заданных правил путем переборки вариантов (совокупность таковых называется планом). А в свою очередь самым известным языком логического программирования является язык PROLOG, который был создан во Франции в Марсельском университете в 1971 году Аленом Кольмеро.
Программы составленные на языке программирования PROLOG содержат две составные части – факты и правила.
Факты представляют собой данные которыми оперирует программа, а совокупность фактов составляет базу данных PROLOG, которая, является реляционной базой данных. Основная операция, которая выполняется над данными – это операция сопоставления, которую также называют операцией унификации или согласования. Правила состоят из заголовков и подцелей. Выполнение таковой программы, начинается с запроса и состоит в доказательстве истинности некоторого логического утверждения в рамках заданной совокупности фактов и правил. Алгоритм такого доказательства (алгоритм логического вывода) определяет принципы исполнения программы, написанной на языке программирования PROLOG/
В свою очередь функциональное программирование формулирует задачу как совокупность определенных функций.
Первым языком функционального типа является язык LISP, который был создан в Массачусетском технологическом институте в 1956-1959 годах Джоном Маккарти, который в 1956 году на Дармутской конференции в США впервые предложил термин «искусственный интеллект».
Значительное число работ по искусственному интеллекту реализовано на языке программирования LISP. Однако до сих пор не утихают споры вокруг этого термина и научного направления развившегося в его рамках, исследователи единодушны в использовании функциональных и логических языков для данной области.
Программа, которая написана на функциональном языке, состоит из неупорядоченного набора уравнений, которые определяют функции и значения, которые в свою очередь задаются как функции от других значений. Программы и данные языка программирования LISP существуют в форме символьных выражений, которые хранятся в форме списковых структур. LISP работает с двумя видами объектов – атомами и списками.
Атомы – это символы, которые используются для идентификации числовых или символьных объектов (понятия, материалы, люди и пр.).
Список – это последовательность из нуля или более элементов, которые заключены в круглые скобки, каждый из которых в свою очередь является либо атомом, либо списком. Над списками выполняются три довольно примитивные операции: извлечение первого элемента списка; получение части списка, которая осталась после удаления первого элемента; объединение первого элемента списка и оставшейся части списка.
Основными свойствами функциональных языков программирования обычно рассматриваются:
Краткость и простота;
Строгая типизация;
Модульность;
Функции – объекты вычислений;
Чистота, то есть отсутствие побочных эффектов;
И отложенные (ленивые) вычисления.
Можно сформулировать ряд требований к языкам программирования и классифицировать языки по их особенностям.
Основные требования, предъявляемые к языкам программирования:
Наглядность - использование в языке по возможности уже существующих символов, хорошо известных и понятных как программистам, так и пользователям ЭВМ;
Единство - использование одних и тех же символов для обозначения одних и тех же или родственных понятий в разных частях алгоритма. Количество этих символов должно быть по возможности минимальным;
Гибкость - возможность относительно удобного, несложного описания распространенных приемов математических вычислений с помощью имеющегося в языке ограниченного набора изобразительных средств;
Модульность - возможность описания сложных алгоритмов в виде совокупности простых модулей, которые могут быть составлены отдельно и использованы в различных сложных алгоритмах;
Однозначность - недвусмысленность записи любого алгоритма. Отсутствие ее могло бы привести к неправильным ответам при решении задач.
В настоящее время в мире существует несколько сотен реально используемых языков программирования. Для каждого есть своя область применения.
Любой алгоритм - это последовательность предписаний, выполнив которые можно за определенное число шагов перейти от исходных данных к результату. В зависимости от степени детализации предписаний обычно определяется уровень языка программирования — чем меньше детализация, тем выше уровень языка.
Разнообразие классов задач привело к тому, что на сегодняшний день разработано более нескольких сотен алгоритмических языков. Правда, широкое распространение и международное признание получили лишь некоторые из них. В первую очередь среди них следует отметить:
FORTRAN и ALGOL – языки, которые предназначены для решения научно-технических задач.
COBOL – предназначен для решения экономических задач
BASIC – необходим для решения небольших вычислительных задач в диалоговом режиме.
В принципе каждый из этих языков можно использовать для решения задач не своего класса. Однако, как правило, применение оказывается достаточно неудобным.
Машинно-ориентированные языки - это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.). Машинно-ориентированные языки позволяют использовать все возможности и особенности машинно-зависимых языков:
- высокое качество создаваемых программ (компактность и скорость выполнения);
- возможность использования конкретных аппаратных ресурсов;
- предсказуемость объектного кода и заказов памяти;
- для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;
- трудоемкость процесса составления программ (особенно на машинных языках и языки символического кодирования), плохо защищенного от появления ошибок;
- низкая скорость программирования;
- невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.
Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.
Машинный язык
Отдельный компьютер имеет свой определенный машинный язык, ему предписывают выполнение указываемых операций над определяемыми ими операндами, поэтому машинный язык является командным. Однако, некоторые семейства ЭВМ (например, ЕС ЭВМ, IBM/370/ и др.) имеют единый машинный язык для ЭВМ разной мощности. В команде любого из них сообщается информация о местонахождении операндов и типе выполняемой операции.
В новых моделях ЭВМ намечается тенденция к повышению внутренних языков машинно-аппаратным путем реализовывать более сложные команды, приближающиеся по своим функциональным действиям к операторам алгоритмических языков программирования.
Основные компоненты алгоритмического языка:
алфавит,
синтаксис,
семантика.
Алфавит — это набор основных символов, т.е. "букв алфавита", из которых должен состоять любой текст на этом языке — никакие другие символы в тексте не допускаются, фиксированный для данного языка
Синтаксис — это правила построения фраз, позволяющие определить, правильно или неправильно написана та или иная фраза. Точнее говоря, синтаксис языка представляет собой набор правил, устанавливающих, какие комбинации символов являются осмысленными предложениями на этом языке.
Семантика определяет смысл значения предложений языка. Семантика является системой правил истолкования отдельных языковых конструкций, устанавливает, какие последовательности действий описываются теми или иными фразами языка и, в конечном итоге, какой алгоритм определен данным текстом на алгоритмическом языке.
Языки Символического Кодирования
Командные языки - языки символического кодирования, так же, как и машинный язык, являются командными. Однако коды операций и адреса в машинных командах, представляющие собой последовательность двоичных (во внутреннем коде) или восьмеричных (часто используемых при написании программ) цифр, в языки символического кодирования заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции. Это обеспечивает существенное уменьшение числа ошибок при составлении программ.
Использование символических адресов - это первый шаг к созданию языков символического кодирования. Команды ЭВМ вместо истинных (физических) адресов содержат символические адреса. По результатам составленной программы определяется требуемое количество ячеек для хранения исходных промежуточных и результирующих значений. Назначение адресов, выполняемое отдельно от составления программы в символических адресах, может проводиться менее квалифицированным программистом или специальной программой, что в значительной степени облегчает труд программиста.
Автокоды
Есть также языки, включающие в себя все возможности языки символического кодирования, посредством расширенного введения макрокоманд - они называются Автокоды.
В различных программах встречаются некоторые достаточно часто использующиеся командные последовательности, которые соответствуют определенным процедурам преобразования информации. Эффективная реализация таких процедур обеспечивается оформлением их в виде специальных макрокоманд и включением последних в язык программирования, доступный программисту. Макрокоманды переводятся в машинные команды двумашинный язык путями - расстановкой и генерированием. В постановочной системе содержатся «остовы» - серии команд, реализующих требуемую функцию, обозначенную макрокомандой. Макрокоманды обеспечивают передачу фактических параметров, которые в процессе трансляции вставляются в «остов» программы, превращая её в реальную машинную программу.
В системе с генерацией имеются специальные программы, анализирующие макрокоманду, которые определяют, какую функцию необходимо выполнить и формируют необходимую последовательность команд, реализующих данную функцию.
Обе указанных системы используют трансляторы с языки символического кодирования и набор макрокоманд, которые также являются операторами автокода.
Развитые автокоды получили название ASSEMBLER. Сервисные программы и пр., как правило, составлены на языках типа ASSEMBLER.
Макрос
Язык, являющийся средством для замены последовательности символов, описывающих выполнение требуемых действий ЭВМ на более сжатую форму - называется Макрос (средство замены).
В основном, Макрос предназначен для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает макроопределяющий и исходный текст. Реакция макропроцессора на вызов-выдача выходного текста.
Макрос одинаково может работать, как с программами, так и с данными.
Машинно-независимые языки
Машинно-независимые языки - это средство описания алгоритмов решения задач и информации, подлежащей обработке. Они удобны в использовании для широкого круга пользователей и не требуют от них знания особенностей организации функционирования ЭВМ и ВС.
Подобные языки получили название высокоуровневых языков программирования. Программы, составляемые на таких языках, представляют собой последовательности операторов, структурированные согласно правилам рассматривания языка (задачи, сегменты, блоки и т.д.). Операторы языка описывают действия, которые должна выполнять система после трансляции программы на машинный язык.
командные последовательности (процедуры, подпрограммы), часто используемые в машинных программах, представлены в высокоуровневых языках отдельными операторами. Программист получил возможность не расписывать в деталях вычислительный процесс на уровне машинных команд, а сосредоточиться на основных особенностях алгоритма.
Проблемно-ориентированные языки
С расширением областей применения вычислительной техники возникла необходимость формализовать представление постановки и решение новых классов задач. Необходимо было создать такие языки программирования, которые, используя в данной области обозначения и терминологию, позволили бы описывать требуемые алгоритмы решения для поставленных задач, ими стали проблемно-ориентированные языки. Эти языки, ориентированные на решение определенных проблем, должны обеспечить программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме.