Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 9
Текст из файла (страница 9)
кроме оператора кереас, используется пара специальных слов Ьедяп-епгз. причем даже там, где она может быть пропушена (свидетельство нелостатка ортогональности в языке Разса!). В языке С с той же целью используются фигурные скобки. В обоих языках недостатком является единообразное завершение группы операторов. поскольку довольно трудно определить, какая именно группа замыкается очередным оператором епс) или символом ). В языках ГОКТКА)ч 90 и Аг)а эта проблема не так остра, поскольку лля каждого типа группы операторов используется отдельный синтаксис замыкания.
В языке Ада, например, для замыкания конструкции ветвления используется оператор епс( хх, а для замыкания цикла— оператор ецс( моор. Это — пример противоречия между простотой языка Разса!, приволяшей к малому количество зарезервированных слов, и лучшей читабельностью языка Аг)а, обеспеченной многочисленными зарезервированными словами. Другим важным вопросом является использование специальных слов языка в качестве гглген переменных в програлгме.
Если такая возможность есть. то программа может оказаться очень запутанной. Например, в языке ГОКТКА)л! 90 такие специальные слова. как 00 и ЕИ0. можно использовать в качестве имен переменных, так что их появление в программе может не означать ничего особенного. ° Форэга и значение. Облегчить чтение программы могут также операторы. само появление которых хотя бы отчасти указывает на их цели. Семантика. идн смысл, может слеловать непосредственно из синтаксиса, иди формы. В некоторых случаях этот принцип нарушается двумя языковыми конструкциями. идентичными или похожими по форме.
но различными по смыслу, который может зависеть от контекста. В языке С. например. значение зарезервированного слова акакзо зависит 1.3. Критерии оценки языков программирования от контекста, в котором оно появляется. Если оно использовано при определении некоторой переменной внутри функции, это означает. что данная переменная создается во время компиляции. Если слово ававхо используется при определении переменной вне всех функций. это означает.
что она является видимой только в файле. содержащем данное описание. Следовательно. эта переменная не может экспортироваться из ланного файла. Одна из основных жалоб на команды оболочки операционной системы (ЛЧ1Х (Кегп!8)чап ап6 Р!ке. 1984) связана с тем. что названия этих команд не всегда связаны с их прелназначением. Например.
название используемой в системе ()Н1Х команды 9гер может быть расшифровано только при наличии предварительных знаний или должной смекалки. а также опыта работы с текстовым редактором е6 систекчы ОН1Х. Для начинающих пользователей системы ()МХ появление указанной команды ни о чем не говорит. (В текстовом редакторе е6 команда /стандартное выражение/ выполняет поиск подстроки, совпадающей с указанным стандартным выражением, Если предварить эту команд> атрибутом 9, то ее выполнение станет глобальным, определяя весь редактируемый файл как область поиска.
Употребление атрибута р после указанной команды приведет к печати строки, содержащей искомое выражение. Таким образом, команда 9/стандартное выражение/р, которая сокращается до 9гер (по первым буквам английских слов, образующих эту команду), печатает все строки файла, содержащие подстроку, совпадающую с искомым стандартным выражением.) 1.3.2. Лвгиость создания программ Легкость создания программ характеризует удобство языка для создания программ в выбранной области.
Легкость создания программ в большинстве случаев определяется теми же характеристиками, что и читабельность. Это объясняется тем, что в процессе создания программы автор вынужден часто перечитывать уже написанные части программы. Так же, как и читабельность. легкость создания программ должна рассматриваться в контексте конкретной области применения языка. Просто неразумно сравнивать легкость использования двух языков для решения одной задачи, когда олин из языков был разработан именно лля этого.
а дрчгой — нет. Например. легкость создания программ на языках СОВОГО (А)чЯ, 1985) и АРЕ (Сй!гпап ап6 йозе, !97б) совершенно различается при обработке двумерных структур. поскольку язык АРЬ подходит лля этой цели идеально. А создавать сложные финансовые отчеты намного легче на языке СОВО) . поскольку он разрабатывался специально для этой цели. а язык АР(. — нет. В следующих подразделах описаны важнейшие факторы, влияющие на легкость использования языка. 1.3.2.1.
Простого и ортогонолвности Если язык содержит много разнообразных конструкций, то некогорые программисты могут просто не знать каждую из них. Это приводит к неправильному использованию одних свойств и игнорированию других. В результате программисты пишут менее изящные и менее эффективные программы, чем могли бы. Как отметил в 1973 году Хоар (Ноаге), некоторые неизвестные свойства могут быть использованы случайно, что приводит к странным результатам. Следовательно. испояьзовать небольшое количество элементарных конструкций и согласованные между собой правила их комбинирования (т.е. ортогональность) намного лучше. чем применять большое количество примитивов.
36 Глава!. Вводные замечания В этом случае программист может решить сложную проблечь, изучив лишь небольшой набор элементарных конструкций. С другой стороны. слишком ортогональная структура усложняет использование языка. Если можно использовать любую комбинацию элементарных конструкций. то ошибки, допущенные при создании программы. моат просто остаться незамеченными.
Это приведет к логическим противоречиям в программе. которые не сможет выявить компилятор. 1.3.2.2. Поддержка абстракции Кратко говоря. абстракция — это возможность определять. а затем использовать сложные структуры или операции. игнорируя при этом многие детали. Абстракция — это ключевая концепция разработки современных языков программирования.
Следовательно, высокая степень абстракции. допускаемая языком программирования и его выражениями, значительно облегчает его использование. Языки программирования поддерживают две различные категории абстракции: абстракцию процессов и абстракцию данных. Простым примером абстракции процесса может служить подпрограмма. реализующая алгоритм сортировки. которая несколько раз вызывается в разных местах главной программы. Если бы этой подпрограммы не было, то команды, выполняющие сортировку, слеловало бы внедрять везде. где это нужно, что очень сложно и утомительно. Кроме того, в этом случае детали алгоритма сортировки загромоздили бы основную программу.
делая неясным ее общий смысл. В качестве примера абстракции данных можно рассмотреть двоичное дерево, хранящее в своих узлах целочисленные данные. На языке РОйТйАМ 77 такое лерево обычно реализуется в виде трех параллельных целочисленных массивов. в которых два целых числа используются в качестве индексов для идентификащщ положения данных на дереве. На языках Сь+ и Зава эти деревья можно реазизовать. описав узел дерева в форме простого класса. содержащего дяа указателя и целое число.
Такое описание является более естественным, поэтому написать програчму. использующую двоичное дерево, на языке. поддерживающем такую абстракцию. легче. чем на языке ГОйТКАХ 77. Это означает только то, что следует выбирать язык. наиболее близкий к расматриваемой предметной области. Очевидно, что полная поддержка абстракции значительно влияет на легкость использования языка. 1.3.2.3. Выразительности Выразительность языка может относиться к нескольким различным характеристикам.
В языке, подобном языку АРЕ. она означает начичие очень мощных операторов. позволяющих производить большое количество вычислений с помощью очень маленькой программы. В более широком смысле выразительность позволяет произволить вычисления более удобными и менее громозлкими способами. Например. в языке С запись соипг я+ удобнее и короче записи соцпг = соиле + 1. Аналогично, булевские операторы апсз и сззеп в языке Айа помогают описать сокращенное вычисление булевских выражений. В языке Рааса! циклы со счетчиком проще создавать с помощью оператора хок. чем с помощью оператора нпхэ.е.
Очевидно. что все перечисленные возможности облегчают использование языка. ЗУ 1.3. Критерии оценки языков программирования 1.3.3. Надежность Программа называется надежной, если она соответствует своему предназначению в любых условиях, В следующих полразделах описаны языковые свойства, имеюшие значительное влияние на надежность программ, написанных на данном языке. 1.З.З.1. Проверка типов Проверка типов — это обычная проверка совместимости типов в программе, осуществляемая при компиляции либо при выполнении программы. Проверка типов является важным фактором надежности языка.
В целях экономии рекомендуется проводить проверку в процессе компиляции. Более того, чем раньше в программе будет обнаружена ошибка, тем дешевле обойдется ее устранение. Структура языка Аба требует проверки типов практически всех переменных и выражений в процессе компиляции, если только пользователь не дал явного указания заблокировать проверку типов.