Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 173

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 167 168 169 170 171 172 < 173 > 174 175 176 177 178 179 .. 316 >> Следующая

Способы приведения различны для разных языков, но реально всегда предоставляется возмо ность их явного задания, например, с помои указания имени типа, к которому ну но привести значение. Варианты неявнх приведений зависят от того, насколько строг контроль типов в данном язке.
менно так ну но подходить к конкретным приведениям, предусматриваемым в том или ином случае. Концепция, когда 'все приводится ко всему', все ее имеет своих заитников среди ассемблерных программистов, особенно тех, кто пиет маленькие, автономно работаие и практически не модифицируемые модули. о если говорить о наденом коллективном программировании, то задача строгого контроля типов занимает ваное место.
Обсуждая базовые структуры данных и конструкторы, нужно затронуть вопрос о способах задания литералов и, вообе, изобра ения значений, как базовых, так и структурных данных. Разнобой, который при этом демонстри-ру т язки, свидетельствует об отсуствии достаточно обоснованных критериев выбора того или иного реения.
Литералы обладают атрибутом, исключительно существенным для вычислений, — фиксированным значением, независимым от контекста. Значения, а не изобра ения значений, воспринима тся абстрактнм вычислителем, выполняим программу. ринципиально, что значения как атрибуты фиксиру тся у е при реализации язка, которая задает их в соответствии с возможностями конкретного вычислителя моделировать действия абстрактного вычислителя.
Есть ряд моментов, которые ну но учитывать:
a) Литералы воспринимаются человеком, следовательно, они должны быть для него понятн . оэтому в качестве изобра ений значений использу-тся числа в привычной нотации, строки, идентификаторы, осмысленные с точки зрения естественного язка.
490
ГЛАВА 9. СТРУКТУРЫ ДАННЫХ
b) о причине реальной неперечислимости всех возмо нх значений большинства базовых типов и необходимости естественных для человека правил записи изображений значений, возникают общие синтаксические понятия: число, строка и др.
c) Неестественность использования литералов для большинства конструи-руемх структурных типов приводит к введени соответствуих ограничений прагматического характера с тем, чтобы изобра ения таких значений было возмо но лиь в соверенно неизбеных частных случаях;3
d) Hеобходим учет назначения данных (пример из С/С++ — логические значения, которе все-таки прилось определить, хотя первоначально язк обходился без них).
Говоря о распространении стандартных средств программирования на новые структуры, в перву очередь следует обсудить присваивание, которое часто рассматривается как универсальная операция копирования любых зна-чений,4 и потому при конструировании структур данных ее распространяют на новые значения чае всего.
Так сделано, к примеру, в Pascal. Распространение присваивания здесь означает, что с кадым конструктором типа связана подпрограмма присваивания с двумя параметрами, указываими на источник и получатель значения новых типов данных. В С/С++ с новым типом ассоциируется указательный тип и все оперирование с конструируемыми значениями осуествляется
3 Поясним пункт с). Типы значений, определяемые в программе, обычно принадлежат ее локальному контексту и не известны в среде, в которой работает программа, а возможность передавать информацию о них — весьма ограничена и плохо разработана. Как следствие, внешнее использование литералов определяемых типов требует специальной интерпретации, которая никакого отношения к логике программы не имеет. В результате, скажем, операции ввода-вывода для литералов усложняются настолько, что зачастую просто не употребляются (вместо этого строятся дополнительные программы, пополняющие окружение и/или систему программирования).
4 Главная причина преувеличения значимости присваиваний — выбор модели вычислений фон Неймана в качестве основы большинства языков программирования. Характерными качествами этой модели являются пассивность памяти и единственность активного компонента, называемого процессором. Следовательно, только присваивание значений может изменить состояние вычислителя. Для других моделей универсальность присваивания не обязана сохраняться. Более того, как отмечал еще Бэкус, именно присваивание в качестве основы смены состояний является препятствием для повышения производительности вычислительных систем (см. § 1.2 про традиционные языки).
9.1. СТРУКТУРИРОВАНИЕ ДАННЫХ
491
посредством доступа к ним через указатели. рисваивание указателей приводит лишь к получению нескольких ссылок на общую память (см. рис. 7.6; если необходимо копирование, то об этом следует особо позаботиться, например, разработать специальну процедуру).
Что касается других операций, то чаще всего они не распространяются на конструируеме структуры данных. помянем несколько искл чений. з-вестны попытки распространять арифметические операции на массивы, что демонстрирует, например, язык Альфа, разработанный в Новосибирске. В неоднократно упомянутом языке APL определяется механизм, который позволяет единообразно распространять суествуие операции на значения и переменне новх типов.
Предыдущая << 1 .. 167 168 169 170 171 172 < 173 > 174 175 176 177 178 179 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100