Бьерн Страуструп - Абстракция данных в языке С++
Страница 23. Реализация и совместимость


 

        Реализация и совместимость

      Синтаксический анализатор компилятора С++, c f r o n t м
  состоит из программы синтаксического разбора на языке YACC [8]
  программы на С++. Классы использовались очень широко. Он
  примерно такого же размера, как эквивалентная часть компилятора
  РСС для старого С (13,501 строк, включая комментарии).
      Он выполняется немного быстрее, но использует больше памяти.
  Количество используемой памяти зависит от числа внешних
  переменных и размера наибольшей функции. Он не может выполняться
  на машинах со 128К-байтовым адресным пространством (типа
  PDP-11/71 (*1) ; более подходящее количество требуемой памяти
  примерно раза в три больше. Выходом является код во внутреннем
  представлении, полностью прошедший типовой контроль. Затем он
  может быть преобразован в подходящий ввод для старого и нового
  кодогенераторов.В частности, можно получить версию любой С++ -
  программы на "старом" С. Это обстоятельство делает тривиальным
  перенос c f r o n t в любую систему со старым С-компилятором.
      С некоторыми исключениями компилятор С++ понимает старый С.
  Среда времени выполнения, соглашения по редактору связей, методы
  спецификации раздельной компиляции остаются без изменений. Самая
  главная несовместимость состоит в том, что описание функции,
  например:

      int f();

  в старом С объявляют функцию с неизвестным числом аргументов
  неизвестных типов.В С++ данное описание определяет,что f не
  принимает аргументов. Существует С++ - версия описаний стандартных
  библиотек, такжеа разрабатывается программаа для получения
  "отсутствующих описаний" для набора исходных файлов. Другое
  отличие состоит в том, что в С++ нелокальное имя может быть
  использовано только в том файле, где оно определено, если только
  оно явно не объявлено внешним ; в старом С нелокальное имя
  является общим для всех файлов (многофайловой) программы, если
  только оно явно не объявлено статическим. Некоторые
  незначительные неприятности могут вызвать имена, совпадающие с
  новыми ключевыми словами: c l a s s , c o n s t , d e l e t e,
  f r i e n d , i n l i n e , n e w , o p e r a t o r ,
  o v e r l o a d , p u b l i c , t h i s , v i r t u a l .
      Часто утверждается, что одним из достоинст в С является то,
  что он настолько мал, что любой программист понимает каждую
  конструкцию языка. Напротив, такие языки, как PL/1 и Ада,
  представляют так, что, якобы, каждый программист пишет на своем
  собственном подмножестве языка и весьма с большим трудом понимает
  программы, написанные другими. Отсюда следует, что расширять С -
  плохо. Этот аргумент против "больших" языков игнорирует тот
  простой факт, что зависимости между структурами данныха и
  функциями, использующими их, существуют в программе независимо от
  того, входят функции или не входят в описание класса.
_________________________
  (*1) - Торговая марка Digital Equipment Corporation.

  Программы, использующие классы, имеют тенденцию к тому, чтобы быть
  неожиданно короче, чем их неструктурированные эквиваленты (обычно
  - от 1 до 10 короче; имело место и 50%-ое сокращение). Более
  того, С уже достаточно большой язык для того, чтобы существовали
  "субкультуры", использующие подмножества языка,
  макровозможности часто используются для создания сомнительных,
  маловразумительных вариаций языка С.

      Руководство по c f r o n t всего на 14 длиннее руководства
  по старому С, так что усилия по овладению новыми возможностями
  языка не должны быть непосильноа велики. В частности, усилия
  должны быть незначительны по сравнению с изучением нового языка
  со свойствами абстракции данных. Однако в случае, если классы
  используются для создания нового типа данных, фактически создается
  новый диалект языка. Это ведет к созданию различных несовместимых
  "диалектов". Это не так уж сильно отличается от существующего
  состояния дел, и есть надежда, что "стандартные" классы,
  предоставляющие базовые возможности типа в/в, множеств, таблиц,
  строк, графикии т.п.м обретут широкое использование.

 
« Предыдущая статья   Следующая статья »