Скачиваний:
15
Добавлен:
01.05.2014
Размер:
112.89 Кб
Скачать

1.3.Гибкость

Гибкость проявляется в том, что язык должен предоставлять программисту достаточно различных возможностей для выражения всех операций,

ЯП 2-4

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

Требование гибкости конфликтует с требованием надежности.

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

1.4. Простота

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

Для достижения простоты не обязательно избегать сложных языковых механизмов, а следует стараться не накладывать случайные ограничения на их использование.

Например, при реализации механизма массивов следует дать возможность программисту объявлять массивы любого типа данных, допускаемого языком. Если же, наоборот, в языке запретить исполь­зовать массивы некоторого типа, то в результате язык окажется скорее более сложным, чем простым, так как основные правила изучения языка изучить и запомнить проще, чем запомнить связанные с ними списки условий и ограничений на их применение.

1.5. Мобильность

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

На практике мобильность достичь довольно трудно, особенно в системах реального времени, где одна из задач состоит в извлече­нии максимальных

ЯП 2-5

выгод из базового машинного оборудования. Осо­бенно трудно поддаются решению проблемы, связанные с различающи­мися длинами слов памяти.

1.6. Эффективность

Критерий эффективности играет большую роль для систем реаль­ного времени. Системы реального времени должны обеспечивать высо­кую пропускную способность, чтобы не нарушать ограничений, накла­дываемых управляемым производственным или технологическим процес­сом или внешним оборудованием. Поскольку необходимо гарантировать определенное время реакции системы, следует избегать языковых конструкций, ведущих к непредсказуемым издержкам времени выполне­ния программ (например, сборки мусора в схеме динамического расп­ределения памяти).

Для обычных приложений все снижающаяся стоимость машинного оборудования и все возрастающая стоимость программного обеспече­ния позволяет считать, что необходимость эффективности не являет­ся критичной.

2. Механизмы типизации

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

Различают языки программирования:

  • со слабой типизацией;

  • с сильной типизацией.

2.1. Слабая типизация

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

Недостатки слабой типизации:

ЯП 2-6

  1. Операция, которая может восприниматься машиной как кор­ректная, может быть некорректной на абстрактном уровне программы.

Пример

Пусть имеется фрагмент программы на языке С:

char c;

с=4;

Конец примера

Данный оператор присваивания корректен, так как на машинном уровне символы представлены целыми числами от 0 до 255.

Если программист на абстрактном уровне программы допустил ошибку, собираясь написать

c = '4';

то при слабой типизации такого рода ошибки не отслеживаются.

2) При работе с разными типами слабо типизированный язык предусматривает выполнение операций преобразования типа.

Пример

Рассмотрим фрагмент программы на языке С:

int i;

float x;

i = x;

Конец примера

Фрагмент является корректным, но требует преобразования вещественной пере­менной x из ее внутреннего представления с плавающей запятой в целое представление. Если при этом значение x выходит за пределы реализуемой области целых чисел, то на этапе выполнения программы будет иметь место ошибка.

Если переменные i и k - целого типа, а x - вещественное, то для выяснения, в какой последовательности будут выполняться опе­рации преобразования типа для оператора

k = x - i;

ЯП 2-7

необходимо знать, какой порядок преобразования типов определен в компиляторе.

Возможные варианты:

  • x преобразуется к целому типу;

  • i преобразуется к вещественному типу, а затем x-i - к це­лому.

3) Слабая типизация позволяет определить для некоторых типов некорректные операции.

Пример

Язык С позволяет использовать для целых операндов логические операции. Например, если длина слова равна 16 битам, оператор

i = (k<< 12) || 1

упаковывает значение k в четырех левых разрядах i и засылает 1 в крайний правый разряд.

Конец примера

Вывод

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

2.2. Сильная типизация

В сильно типизированном языке:

  • каждый объект обладает уникальным типом

  • каждый тип определяет множество значений и множество операций;

  • в каждой операции присваивания тип присваиваемого значения и тип объекта, которому присваивается значение, должны быть эквивалентны.

  • каждая примененная к объекту операция должна принадлежать множеству операций, определяемому типом объекта;

  • преобразования типа должно задаваться явно, например, i = (int)x;

ЯП 2-8