Пред.
След.
Макеты страниц
Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
ЯЗЫКИ ПРОГРАММИРОВАНИЯ— формальные языки связи человека с цифровой вычислительной машиной, предназначенные для описания данных (информации) и алгоритмов (программ) их обработки на вычислительной машине. Я. п. задается своим синтаксисом и семантикой — множеством правил, определяющих, какой вид фраз можно использовать для задания программ и каково их операционное значение.Одно из наиболее важных понятий в Я. п. составляет понятие соответствия имени (названия, адреса, идентификатора) и значения (объекта, содержимого адреса) — аналогично понятию переменной и значения в алгебре; использование имен предоставляет средства для записи операторов не только над объектами, задаваемыми своим явным представлением, но и посредством имен и позволяет придавать программам сколь угодно общую форму. Каждый Я. п. посредством своего синтаксиса и семантики определяет некоторый присущий ему процессор (преобразователь), реальный или мыслимый, которым этот язык, в свою очередь, определяется однозначно. Таким, образом, программа на данном Я. п. определяет порядок и вид действий, которые должен выполнить соответствующий данному языку процессор при ее реализации. Теоретическую основу Я. п. составляют алгоритмические языки. Допустимые наборы операторов в Я. п. значительно превышают минимальные наборы, необходимые для их алгоритмической универсальности, что обусловлено практической ориентацией этих языков. Осн. требования, предъявляемые к Я. п., — обеспечение обозримости, определенного удобства в их использовании и эффективной реализации их процессоров. Возникновение и развитие Я. п. неразрывно связано с развитием ЦВМ и с расширением сферы их применения. Я. п. являются, напр., внутренние языки машинные (т. е. языки непосредственной интерпретации ЦВМ, задаваемые команд системами этих ЦВМ), которые явились первыми Я. п. В дальнейшем был предложен ряд Я. п., в большей или меньшей степени укрупненных и алгебраизированных. Существующие в настоящее время Я. п. подразделяют на три больших класса: машин-но-ориентированные, процедурно-ориентированные и проблемно-ориентированные. К машинно-ориентированным Я. п. относятся языки, в которых, с одной стороны, явно выражена связь с конкретной ЦВМ (структура команд, памяти, внешних устройств и т. д.), а с другой — в язык введены элементы, упрощающие и автоматизирующие процесс программирования (символьное обозначение команд и ячеек памяти, широкое использование привычных для человека обозначений и т. д.). Машинноориентированные Я. п. позволяют писать программы, не уступающие по эффективности программам, написанным непосредственно в кодах машины, но в значительной степени облегчают работу по их отладке. Как правило, машинно-ориентированные Я. п. предназначены для системных программистов, работающих на обслуживании ЦВМ и построении матем. обеспечения для них. В зависимости от степени связи человека с ЦВМ, машинно-ориентированные Я. п. делятся на машинные Я. п., автокоды (или языки символьного кодирования, или ассемблерные языки) и машиннонезависимые Я. п. Отличительной особенностью маш. языков является цифровое кодирование команд (в некоторой системе счисления) и, следовательно, отсутствие различия между внутр. представлением операторов (команд), с помощью которых в этих языках описываются программы, и формой представления данных. Последнее является залогом возможности реализации на ЦВМ таких программ, которые в результате работы составляют другие программы (трансляторы, генераторы программ и др.) или преобразуют в процессе выполнения самих себя. Я. п. более высоких уровней этой особенностью маш. языков не обладают и только в новейших языках появляются некоторые ограниченные возможности воздействия на программы в процессе их реализации (напр., в языке АЛГОЛ-68). Уже реализация простейших алгоритмов на первых ЦВМ (циклических и разветвляющихся процессов и подпрограмм) приводила к необходимости преобразования команд в процессе их выполнения (к т. н. команд модификации). Анализ программ позволил предъявить к структурам ЦВМ определенные требования с целью упрощения выполнения программ за счет совершенствования языков ЦВМ внутренних. Так, наличие в системе команд ЦВМ операций по адресам 2-го ранга (косвенной адресации) позволяет реализовать любую программу без модификации ее записи при выполнении (следовательно, дает возможность размещать программы в односторонней памяти), сделать так, чтобы запись любой программы не зависела от ее места в памяти ЦВМ, от размеров обрабатываемых массивов, места размещения данных и др. Поэтому уже с конца 60-х гг. во внутр. языки включаются те или иные эквиваленты косвенной адресации (индекс-регистры и указатели, адреса высших рангов). Названные особенности машинных языков вошли в Я. п. более высоких уровней. Вместе с тем уже машинным языкам присущи наиболее характерные черты всех Я. п. фразовой структуры: команды языка состоят из символов, обозначающих ссылки на подлежащую выполнению операцию и на данные, над которыми она должна быть выполнена, или на команду, которая должна быть выполнена после данной, или на устр-во, которое должно быть подключено для работы. Описание процессов автоматической обработки данных внутр. языками ЦВМ сопряжено со значительными трудностями, вызванными малой наглядностью этих языков и наличием специфических особенностей, налагаемых конкретной тех. реализацией. Исключение составляют внутр. языки машин с высоким уровнем интерпретации, т. е. машин, внутр. языки которых являются языками процедурноориентированными (напр., языки машин «МИР-1», «МИР-2»). Однако машинные языки находят применение (как правило, посредством символьного кодирования) при подготовке системного программного обеспечения ЦВМ. Задача формального описания машинных языков связана с проблемой точного описания находящихся в развитии возможностей реальных машин (устройств ввода — вывода, систем прерывания ЦВМ, работы в реальном масштабе времени и др.) и до настоящего времени не может считаться решенной. Автокоды (или языки один к одному; 1 : 1) предназначены для замены двоичных кодов операций и адресов команд их символьными обозначениями, а в более развитых языках (макроязыках или автокодах Языки символьного кодирования нашли применение уже в машинах 1-го поколения, что позволило упростить процесс программирования за счет автоматизации памяти распределения, учета ее ступеней и др. Применение универсальных средств описания процессов обработки данных, предоставляемых Я. п. более высоких уровней, может приводить к менее эффективному использованию оборудования и к потере скорости выполнения программ. Языки символьного кодирования являются базовыми в операционных системах и используются в качестве языков сборки, поэтому их также наз. ассемблерными языками, или языками сборки (см. Ассемблер). Поскольку эти языки, как правило, охватывают все возможности машинных языков, они находят применение в машинах последующих поколений при создании системного программного обеспечения — программ, от которых требуется наиболее высокая эффективность. По своему уровню к ассемблерным языкам приближаются универсальные машинно-ориентированные языки, используемые в качестве языков промежуточных в системах автомат, программирования. Эти языки учитывают особенности внутр. языков некоторого класса машин, для которых они играют роль языка-посредника. Таким языком является, напр., язык АЛМО, ориентированный на класс машин с фиксированной структурой памяти. Процедурно-ориентированные языки представляют собой следующий, более высокий уровень Я. п., предназначаемых для различных сфер применения ЦВМ и учитывающих специфику этих применений. Во всяком Я. п. можно выделить две самостоятельные части. Первая из них предназначается для описания объектов перерабатываемой информации (исходных, промежуточных, окончательных результатов), а вторая — набор средств для описания процессов переработки этих данных. В зависимости от ориентации языка указанные части могут быть более или менее развиты. Так, в языках, ориентированных на решение научно-тех. задач вычисл. характера, первая часть языка, как правило, незначительна и состоит из описания типов числовых данных (целые, вещественные, булевые), иногда дополняемого описанием некоторых других величин (векторных, строчных и др.), а вторая — довольно сильно развита за счет суперпозиций произвольной глубины над базисными операциями, являющимися в основном обычными арифм. операциями и отношениями, а также элементарными ф-циями матем. анализа. Другие языки, напр., ориентированные на обработку эконом, данных, характеризуются более развитым аппаратом, предназначенным для описания перерабатываемой информации, которая, как правило, представляет собой совокупность объектов сложной структуры. Под сложностью структуры данных подразумевается их представление в виде «дерева», к-во ярусов которого может практически достигать нескольких десятков и каждый из ярусов может иметь большое к-во вершин. При этом каждая из вершин дерева представляет собой объект, наделенный некоторым многообразием свойств. Таковы, напр., размер (к-во символов или знаков, составляющих его), разновидность представления данного в машинном коде (двоичное, двоично-десятичное, плавающее или фиксированное и др.). Выбор средств, предназначенных для описания процессов переработки данных - операторов, в значительной мере определяется ориентацией языка на класс задач и формой задания данных. Специфика задач и обусловила необходимость создания процедурноориентированных языков. Отличительной особенностью таких языков является выделение класса объектов, подлежащих обработке, и фиксация наглядных форм их представления, использование сложных выражений (арифметических, булевых, текстовых и др.), а также операторов, обеспечивающих удобство записи программ (функций, циклических вычислений, процедур и др.). Из наиболее ранних зарубежных Я. п., ориентированных на класс вычисл. и науч. задач, наибольшее распространение получил язык ФОРТРАН, первоначально предназначавшийся для системы машин «IВМ-704». В дальнейшем было предложено несколько вариантов этого языка и их обобщений. Из отечественных Я. п. к наиболее ранним языкам этого уровня относится язык прорабов и адресный язык. Отличительной чертой этих языков является богатство изобразительных средств и выделение из множества особенностей реализации алгоритмов на конкретных ЦВМ лишь наиболее существенных, таких, как понятие адресного соответствия (отношение адреса или идентификатора к его содержимому), косвенного адреса (адреса, содержимым которого является некоторый адрес), индексации и др. По мере расширения области применения ЦВМ возникла необходимость существенно расширить этот аппарат в направлении развития средств для обработки объектов сложной структуры и в создании соответствующих Я. п. К этим средствам относится аппарат, допускающий эффективное обращение к произвольной вершине дерева данных; работу с большими массивами информации; взаимные перемещения вершин, дерева данных, имеющих различные форматы; возможность изменения структуры дерева; построение новых деревьев, вершины которых удовлетворяют некоторым отношениям, в частности, переупорядочения строк в массивах по признаку возрастания или убывания (т. н. задачи сортировки), построение новых массивов, определенные элементы которых удовлетворяют заданным свойствам; обработка списков, графической информации и др. Использование процедурно-ориентированных языков явилось мощным толчком к разработке и созданию систем автомат, программирования как транслирующего, так и интерпретирующего типов. За короткий срок было предложено огромное число языков различной ориентации. Разработка и реализация процедурно-ориентированных языков связана с развитием 2-го и последующих поколений ЦВМ. Особое место среди этих языков занимают языки ФОРТРАН, АЛГОЛ-60 и КОБОЛ. Значение первого из них определяется его широким распространением, реализацией на всех более или менее распространенных ЦВМ, а также наличием огромных библиотек, насчитывающих сотни и тысячи программ, описанных на этом языке. Обилие Я. п., в частности ориентированных на класс вычисл. задач, имело и свои отрицательные стороны, т. к. приводило к разобщению усилий, направленных на создание соответствующих систем автомат, программирования. В связи с этим рядом зарубежных ученых был предложен язык АЛГОЛ-60, привлекший к себе всеобщее внимание в силу ряда новых идей и понятий, положенных в его основу. Наиболее плодотворными из них явились понятия блочной структуры и связанные с ним понятия области действия обозначений и динамического распределения памяти, а также развитый аппарат вызова процедур, в т. ч. процедур рекурсивных. Наличие блочной структуры в языке позволило поставить вопрос о создании систем, в которых память под массивы с переменными границами выделяется динамически при каждом входе в блок, в котором описан данный массив. Значительное число новых проблем возникло в связи с понятием рекурсивного использования процедур. АЛГОЛ был запроектирован не только как эффективный Я. п., но и как средство для публикации алгоритмов. Существенное влияние на развитие общих идей в программировании оказал способ формального описания синтаксиса языка АЛГОЛ-60 с помощью контекстно-свободных языков, задаваемых Бэкуса нормальной формой. Применение этих форм (а в дальнейшем и их различных модификаций), наряду с рассмотрением методов реализации новых средств языка, связанных в частности, с реализацией рекурсивных процедур, позволило теоретически осмыслить новые понятия и установить связь между Я. п. и абстрактной теорией автоматов. В частности, удалось выяснить роль автоматов магазинных в проблеме анализа Я. п., занимающей центр, место в реализации языков. Стройность и общность АЛГОЛа послужили толчком к созданию систем программирования как из его подмножеств, так и из его расширений. Разработка первых была вызвана сложностью реализации этого языка на машинах 2-го поколения и стремлением к получению таких реализаций в более сжатые сроки. Наиболее известными подмножествами АЛГОЛ-60 являются САБСЕТ-АЛГОЛ и АЛГАМС. Разработкой расширений языка стремились достичь еще больших удобств при описании вычисл. задач (прежде всего за счет включения аппарата обработки векторно-матричных величин и комплексных чисел, напр., в АЛЬФА-ЯЗЫКЕ) и его применений для решения др. классов задач. Действительно, АЛГОЛ-60 в силу своей недостаточной машинной ориентации, в частности, недостаточной разработанности средств ввода — вывода, практически неприемлем для решения задач, связанных с обработкой списков и эконом, данных, в которых осуществляется обработка больших массивов (файлов). Среди языков, выражающих осн. понятия проблемы обработки эконом, информации, наиболее видное место занимает КОБОЛ. Обширный аппарат этого языка направлен на эффективное использование характерных особенностей современных ЦВМ. КОБОЛ допускает эффективное описание алгоритмов, оперирующих с данными сложной иерархической структуры. Осн. понятием в КОБОЛе является понятие записи как единицы информации, состоящей в общем случае из структуры данных, включающей числовые (номер, цена, к-во и т. д.) и нечисловые данные (фамилия, название объекта, шифр и т. п.), и массива (файла) записей — упорядоченного их ряда. Записью может быть строка ведомости, наряд на отгрузку и др. Над этими данными могут выполняться сравнительно простые операции, такие, как поиск (адресный и ассоциативный — по совокупности определенных признаков), засылка, сортировка, редактирование и др. Однотипные записи объединяются в массивы, размещаемые на магнитных лентах, и извлекаются из них на входное поле оперативной памяти для обработки. Промежуточные данные размещаются в поле рабочей памяти, а результаты — в виде записей на выходном поле, откуда выводятся во внешнюю память для последующей обработки или в виде готовых документов для печатания. Чтобы ускорить процесс обработки, короткие записи можно объединять в блоки и процесс обработки осуществлять поблочно. Принятая в КОБОЛе форма описания данных, отражающая природу объектов и их взаимосвязей, и наличие средств общения с операционной системой при обработке массивов позволили этому языку занять базисное положение среди многих языков и послужили причиной его широкого распространения и включения содержащегося в нем аппарата в др. языки (напр., ПЛ-1). Отличительной чертой КОБОЛ а является наличие в нем средств для описания окружающей среды — оборудования, зависящего от конкретной конфигурации машины. Одной из важных сфер применения ЦВМ является использование их для манипуляций над информацией, представленной с помощью символов (выполнение операций над числами — частный случай операций над их символьными представлениями). Таковыми являются аналитические преобразования формул, дифференцирование, интегрирование выражений, обработка лингвистических текстов и др. В связи с решением задач обработки символьной информации был предложен ряд языков, называемых языками оперирования над символами и строками, среди которых выделяются языки для аналитических выкладок и для обработки строк и списков. Примерами первых из них являются языки FORMАС, ФОРМУЛА-АЛГОЛ, АНАЛИТИК и «СИРИУС». FORMAC — расширение ФОРТРАНА, допускающее новый вид переменных, значениями которых являются алгебр, выражения, в свою очередь, относящиеся к выражениям, допустимым в языке ФОРТРАН. Последние мож но соединять для образования новых выражений; предусмотрены операции их сокращения, сравнения, дифференцирования и др. Язык ФОРМУЛА-АЛГОЛ является расширением АЛГОЛа-60 средствами языка нормальных алгорифмов Маркова. Реализованный непосредственно в машине «МИР-2» язык АНАЛИТИК и близкий к нему язык «СИРИУС» отличаются от языка FORМАС большей универсальностью средств и богатством изобразительных возможностей. Эти языки, в отличие от языков типа АЛГОЛ, позволяют описывать и решать задачи методами, сочетающими возможности численного и аналитического решения задач, требующих зачастую применения эвристических приемов, иапр., при отсутствии алгоритмов, решающих задачу в общем случае. В целом упомянутые языки обладают рядом существенных особенностей (напр., ориентация на преобразования, в произвольных алгебрах, самоприменимость — возможность рассмотрения выполняемой программы в качестве объекта обработки, реализовапные в АНАЛИТИКе) и имеют большое значение для алгоритмизации сложных мыслительных процессов. Поэтому естественной является тенденция развития указанных языков в направлении их применимости в диалога режиме, когда речь идет не о предварительном программировании, а лишь о выработке программы (которую пользователь и не может составить заранее) в процессе решения задачи. Языки, используемые в таких двунаправленных линиях связи «человек — машина» и «машина — машина», в которых происходит обмен сообщениями в реальном масштабе времени, приобретают все большее значение для отладки программ, отработки алгоритмов, обучения (в частности, обучения Я. п. пользователей ЦВМ) и др. Они получили название языков разговорного программирования, или диалога. В процессорах, реализующих языки такого рода, особое значение приобретают вопросы упрощения записи операций над массивами с целью экономии времени ввода — вывода и др. Языками, предназначенными для обработки строк, являются, напр., языки КОМИТ и СНОБОЛ. От др. языков этого класса они отличаются значительной общностью. В основу этих языков положено понятие алгоритмов Маркова. Программа в них представляется в виде упорядоченного конечного мн-ва правил преобразования — подстановок. Языки для обработки строк удобны для анализа лингвистических текстов и используются для алгебр, выкладок. Наиболее распространенными среди языков для обработки списков являются языки IPL-V, ЛИСП, ЛИСП-2. Первый из них предназначен для использования в области исследований по искусственному интеллекту, в частности для автоматизации доказательств теорем. Отличительной особенностью языка ЛИСП является использование цепной адресации — каждый член списка содержит информацию о самом себе в виде непосредственного значения или адреса и адрес следующего члена списка. Язык удобен для обработки информации, содержание и объем которой заранее не определены, и для реализации рекурсивных процедур. ЛИСП-2 является расширением осн. языка ЛИСП средствами АЛГОЛа-60. В отдельный класс Я. п. следует выделить языки, предназначенные для обслуживания информационно-справочных систем, в которых выделяются средства для описания запросов к системе, с одной стороны, и алгоритмов формирования на них ответов — с другой. Языком запросов является, напр., язык Easy English. Особый класс процедурно-ориентированных языков представляют собой языки моделирования, подразделяемые на языки моделирования дискретных и непрерывных систем. Языки этого класса представляют собой, прежде всего, матем. аппарат для формального определения динамических систем, для которых характерна временная зависимость переменной состояния от внеш. воздействий и внутр. состояния, определяемого законом динамики системы. Различие в моделировании дискретных и непрерывных процессов определяется дискретным и непрерывным временем их протекания. Дискретное моделирование характеризуется серией мгновенных актов и состояниями ожидания, которым соответствует, напр., время ожидания очереди, время посадки пассажиров и др.; длительность последних может быть или заведомо определена, или получена как значение некоторой случайной величины, подчиненной заданному закону распределения. Помимо понятия «время ожидания» все языки дискретного моделирования характеризуются наличием списка будущих событий, формируемого в ходе эволюции системы. Последняя рассматривается как одна из многих конкурирующих систем, число которых может измениться во времени (напр., число претендентов на обслуживание). Отдельные процессы в ходе эволюции системы могут активироваться и деактивироваться, приостанавливаться и завершаться и т. д. При этом для всех элементов, находящихся в данное время в системе, данные рассматриваются как существующие параллельно. В случае, когда возникают конфликтные ситуации (попытка одновременного входа в одну и ту же очередь, несовместимые требования двух разных процессов к одному и тому же объекту), используется определенный аппарат очередей (с учетом приоритетов) или выдается сообщение, по которому программист должен принять сам определенное решение. Языки моделирования представляют собой в целом обширный класс языков, отличающихся, в частности, способами определения условий изменения состояния системы. Так, язык GPSS основан на понятии прохождения дел через блок-схему с топологической структурой, подобной структуре моделируемой системы, а язык CSL — на понятии деятельностей, которые в определенные моменты времени просматриваются циклически до тех пор, пока не появится операция, которая может быть выполнена заданное время. В этом случае системное время продвигается ко времени следующего будущего события, назначенного для некоторого элемента. Язык моделирования SOL по структуре близок к обычным Я. п. и использует понятие дела (язык GPSS) и процесса (язык CSL). Язык моделирования СИМ-СКРИПТ, основанный на ФОРТРАНе, допускает логические манипуляции с упорядоченными совокупностями данных и использует сложные списковые структуры, определяемые программистом. Наиболее общим и эффективным языком моделирования является язык СИМУЛА, являющийся расширением АЛГОЛа-60. Языком для моделирования непрерывных процессов является, напр., язык DIANA, предназначенный для моделирования мех. систем. Языки этого класса предоставляют средства для спецификации результатов. Другим языком этого класса является язык MIDAS, основанный на ФОРТРАНе и блок-схемном методе описания и использующий автомат, сортировку процедур, предназначенных для выполнения вычислений на функциональных блоках. Более поздняя система MIMIC, базирующаяся на ФОРТРАНе, допускает описания динамических систем в терминах алгебр, и дифф. уравнений. Уравнения, описанные в ФОРТРАНо-подобной форме, расширенной операторами дифференцирования и интегрирования, Особый класс составляют языки, предназначенные для описания спец. проблем и называемые непроцедурными, или проблемно-ориентированными. Программа работы на таком языке содержит, помимо описания условия задачи, указание решить задачу данного класса. Языком такого рода является, напр., язык STRESS, предназначенный для описания задач конструирования. Программа на языке STRESS содержит ряд общих характеристик системы (размерности, число вершин и др.) и данные, а также указание: решить задачу и представить определенные данные в виде некоторой табл. Для использования таких языков разрабатывают или универсальный для данного класса задач алгоритм, интерпретирующий исходные данные, или алгоритм анализа исходных данных и определения частной задачи, для которой генерируется соответствующая разрешающая процедура. Последняя может порождаться в машинном или машинно-ориентированном языке или же в одном из Я. п. более высокого уровня. Т. о., при использовании языков данного класса предполагается, что процессору известно, как надо решать любую конкретную задачу, описываемую в этом языке. Хотя разработка и совершенствование методов решения задач представляет собой неограниченный процесс, а в иных случаях логически невозможно построить единую разрешающую процедуру для решения данного класса задач (см. Неразрешимые алгоритмические проблемы), развитие таких языков имеет весьма важное практическое значение в силу чрезвычайной простоты их использования. На развитие Я. п. оказывают существенное влияние, с одной стороны, исследования по теории языков формальных, а с другой — расширение средств общения человека с ЦВМ (создание экранных пультов, ввод информации с голоса и звуковой вывод и др.), совершенствование средств, предназначаемых для повышения эффективности вычисл. процесса (мультипрограммный режим работы, разделение времени, механизм прерываний и др. средства для реализации операционных систем). Несмотря на значительное к-во реализованных языков, разработка процедурно-ориентированных Я. п. продолжается и в настоящее время. Среди др. языков следует назвать Я. п., ориентированные на автоматизацию проектирования ЦВМ, конструкций судов, зданий и др. объектов, а также на программное управление станками (см. Языки управления технологическими процессами). Существенное значение при этом приобретает разработка средств манипулирования с рисунками и пространственными объектами. П рименение процедурно-ориентированных языков явилось существенным шагом в развитии программирования, т. к. оно решает задачу совместимости программ для различных машин, т. е. позволяет ставить одну и ту же программу, описанную на некотором языке (иногда с небольшими изменениями), на различных машинах; облегчает взаимодействие человека с вычислительной машиной, упрощая процесс написания и отладки программ (см. Отладочные программы), обучение программированию; оно ведет к стандартизации в области приложений посредством высокой степени стандартизации в самом языке, создает базу для строгой документации программ. Применение Я. п. для описания процессов обработки данных дает возможность разрабатывать методы эквивалентных преобразований алгоритмов с целью удовлетворения некоторому критерию оптимальности (по скорости реализации алгоритма, по минимизации используемой памяти и др.), а также выработать определенные требования к разработке алгоритмических структур ЦВМ для более удобного их использования. Расширение сфер использования ЦВМ привело к необходимости решать задачи, компактное описание которых выходит за рамки одного процедурно-ориентированного языка. Так, в процессе обработки эконом, информации появилась необходимость выполнять сложные вычисления (связанные с операций исследованием, программированием линейным, статистическими предсказаниями), а для проведения научно-инженерных расчетов был необходим язык, удобный для представления различных сообщений, сортировки, редактирования данных и пр. Попытки использовать процедурноориентированные языки для решения задач, выходящих за пределы их ориентации, привели к практически непреодолимым трудностям. Т. о., специализация языков при необходимости решения больших задач стала препятствием на пути их универсализации. Возникла необходимость создания единой базы, пригодной и удобной для описания процессов обработки данных при решении любого, имеющего практическое значение, класса задач и обеспечивающей унификацию стиля языков. Перед языками такого уровня (их можно назвать языками машин 3-го поколения) была поставлена цель: наряду с представлением средств для описания процессов обработки данных, присущих предшествовавшим процедурноориентированным языкам высокого уровня, сохранить доступ ко всем имеющимся средствам ЦВМ и возможностям их операционных систем — работы в реальном масштабе времени, описания нескольких одновременно выполняемых заданий, мультипрограммирования, прерывания, разделения времени, работы со световым карандашом и др. устройствами ввода — вывода и т. д. Тенденция расширения сферы применения ЦВМ, с одной стороны, и возможностей этих машин — с другой, поставила задачу создания систем язык — процессор, которые содержали бы аппарат для собственного развития. Во время дефицита машинного времени к Я. п. предъявлялось, как одно из основных, требование возможности построения таких трансляторов с них, которые могли бы составлять эффективные рабочие программы, сравнимые с программами, составляемыми искусными программистами. В настоящее время критерием эффективности использования ЭВМ становится время, затрачиваемое на решение задачи от ее постановки до получения результатов в надлежащей форме. В связи с этим перед Я. п. выдвигается новая цель — упростить программирование, быть может, даже за счет известной потери эффективности использования ЦВМ. Задача оптимизации тем самым отделяется от задачи составления работающей программы. Средства оптимизации в языке — это та его часть, знание которой не обязательно для рядового пользователя. Вместе с тем часть ф-ций по оптимизации рабочих программ может взять на себя некоторый блок транслятора или спец. трансляторы, подключаемые к работе по мере необходимости. Языками, отвечающими указанным требованиям, явились языки общего назначения ПЛ-1, СИМУЛА-67 и АЛГОЛ-68. СИМУЛА-67 представляет собой мощное расширеиие языка АЛГОЛ-60. Одним из осн. понятий в этом языке является понятие класса, позволяющее определять в языке классы подобных элементов, обладающих произвольным видом статических и динамических определений и механизмов связи. Последний является мощным средством вызова необходимого контекста или окружающей среды вне данного блока. Возможности развития аппарата описания этого языка ставят этот язык в ряд наиболее перспективных. Язык ПЛ-1 по замыслу предназначается для широкого применения — для науч. и коммерческих целей, для описания процессов, выполняемых в реальном масштабе времени и для использования системными программистами. Существенной особенностью языка является его модульность, позволяющая выделять из языка упрощенные подмножества — языки для спец. целей, предназначаемые для использования неспециалистами и начинающими программистами. Язык характеризуется большим разнообразием типов данных (числа с фиксированной и плавающей запятой, в десятичном и двоичном представлении, с произвольной точностью, вещественные и комплексные; строки, массивы и структуры любой сложности, объединяемые в списки) и операторов, компонентами которых могут быть массивы, структуры и списки, высокой степенью доступа к реальной машине и ее операционной системе, свободой выражений, возможностью распараллеливания операций и синхронизации ветвей, блочной структурой программ. В языке предусмотрены средства отладки программ (т. н. операторы периода компиляции); последовательно проводится идея передачи информации «по умолчанию», когда при отсутствии соответствующих указаний операторам или данным приписываются наиболее употребительные варианты их использования. Данные и переменные обладают определенными свойствами, которые могут быть описаны составителем программы или автоматически предписаны им «по умолчанию». Блочная структура, принятая в ПЛ-1, более развита, чем в АЛГОЛе-60, и позволяет управлять механизмом динамического распределения памяти. Язык включает аппарат рекурсивного использования процедур и обширный аппарат ввода — вывода, а также ряд средств для управления работой транслятора с целью создания им эффективных рабочих программ. Язык АЛГОЛ-68, разработанный фактически на новой основе, вобрал в себя весь опыт предшествующих Я. п. и является языком более мощным по сравнению с языком АЛ-ГОЛ-60. АЛГОЛ-68 допускает разнообразие видов данных (числовые данные, вещественные, целые, данные произвольной точности, байтовые, битовые данные, массивы данных и рекурсивно определяемые структуры самой широкой общности). Понятие переменной определяется парой имя (название) — значение, причем имя (название) может быть, в свою очередь, значением. Тем самым в языке определяется возможность использования адресов высших рангов (см. Адресный язык). В языке широко развит аппарат описаний, позволяющий посредством соответствующего контекста определять новые виды и новые операторы, вводить новые символы или предписывать введенным символам новые операционные значения. Понятие процедуры в АЛГОЛе-68 обобщено в понятие программы, которое само по себе является значением; для значений определен некоторый аппарат оптимизации в процессе выполнения программы. Язык содержит средства для описания ввода—вывода, обеспечения удобного использования каналов и массивов и средства для описания параллельного выполнения операций. Т. о., языки-оболочки (языки общего назначения) включили в себя ряд средств, развитых и оправдавших себя в предшествовавших им языках (в частности, аппарат для вычисления имен, принцип блочной структуры программ; аппарат процедур и возможности динамического распределения памяти). Новым в этих языках является наличие средств, направленвых на повышение качества и эффективности работы трансляторов и создаваемых ими рабочих программ, а также наличного машинного оборудования, в т. ч. возможностей программной реакции на прерывания, возможности описания параллельного выполнения программ, наличие средств для отладки программ. Существенной особенностью этих языков является их модульность — возможность доопределения средств или выбора того комплекта языка, который является необходимым для конкретных целей. Несмотря на весьма удачные попытки построить такие языки, как ПЛ-1, СИМУ-ЛА-67, АЛГОЛ-68, проблема создания единого универсального Я. п. фактически находится в стадии развития, что связано с наличием противоречий между тенденцией создания общего языка и необходимостью учета специфики решения задач в конкретных применениях. В связи с этим задача создания Я. п., практически удобных для формализации задач и принципов их решения, и в настоящее время продолжает оставаться одной из основных в теории и практике программирования наряду с проблемой разработки эффективных методов построения соответствующих эффективных процессоров. Для реализации обширных изобразительных средств, предоставляемых новыми языками, первостепенное значение приобретает задача автоматизации процесса проектирования и создания соответствующих систем автомат, программирования, основанных на этих языках, а также проблема построения автоматизированных систем обучения языкам пользователей ЦВМ. Решение этих больших проблем связано с созданием машин 4-го поколения и с разработкой для них операционных систем и аффективных тех. средств общения с ЦВМ, с унификацией и стандартизацией периферийного оборудования и внеш. носителей информации, а также с разработкой средств автомат, сбора и первичной обработки данных, библиотек общего и частного назначения и информационно-справочных систем, вт. ч., систем, обслуживающих системы математического обеспечения ЦВМ и их комплексы. Лит. см. к ст. Автоматизация программирования, Адресный язык, АЛГОЛ-60, АЛГОЛ-68, КОБОЛ, ФОРТРАН, Язык машинно-ориентированный, Язык ЦВМ внутренний. В. М. Глушпов, Е. Л. Ющенко.
|
1 |
Оглавление
|