Бьерн Страуструп - Абстракция данных в языке С++ - Сравнение с другими языками
ОГЛАВЛЕНИЕ
Сравнение с другими языками
Сравнение двух языков занимает целую статью, если не книгу.
Следовательно, в данной секции отражено только несколько
персональных замечаний к основным сторонам различия между
языками. Для создания целостной картины С сам критикуется в том
же духе, что и другие языки.
Конструкции классов С основаны на оригинальных классах
Simula68 [6,7]. Simulа полагается на сборку мусора как для
объектов класса, так и для записей активации процедур, и не
предоставляет возможностей по перегрузке имен функций и знаков
операций. Это, однако, наиболее красивыйи выразительный язык,и
классы С обязаны больше именно этому, не какому-либо другому
языку.
Smalltalk [9] - еще один язык с подобными возможностями
виртуальными и контроль типов осуществляется во время выполнения.
Это значит, что там, где базовый класс С предоставляет
фиксированныйа интерфейсс типовым контролем для множества
производных классов, суперкласс языка Smalltalk предлагает
нетипизированное множество возможностей, которое может быть
произвольно модифицировано. Smalltalk полагается на сборку мусора
и динамическое разрешение имен составляющих функций. Он не
предоставляет возможности перегрузки знаков операций в обычном
смысле, но знак операции может быть именем составляющей функции.
Smalltalk предоставляетв высшей степени хорошо организованную
среду для конструирования программ, однако в очень сильной
степени зависит от ресурсов.
Modula-2 [10] предоставляет рудиментарную возможность
абстракции, называемую модулем. Модуль не является типом,
но является единым объектом, содержащим данныеи функции, имеющих
доступ к этим данным. Он в чем-то подобен классу со всеми данными
статическими. Нет возможностей, эквивалентных производным
классам. Он не допускает перегрузки имен функций или знаков
операций. Нет сборки мусора.
Модули языка mesс [11] отличаются полным и гибким
разделением интерфейса модуля от его реализации. Это дает
возможность раздельной компиляции, но и требует не тривиальной
реализации связывания. Модуль может импортировать и
экспортировать имена как процедур, так и типов. Правила
конкретизации модулей (создание объектов и инициализация)
настолько общи, что делают их элегантными. Использование модулей
приводит к некоторым издержкам по памятии времени исполнения.
Нет возможностей по созданию иерархии модулей и по перегрузке
знаков операций. Mesса основывается на сборке мусора как для
объектов данных, так и для записей активных процедур.
Следовательно, он может эффективно использоваться только там, где
имеется аппаратная поддержка для сборки мусора.
С не предоставляет законченной среды по редактированию,
отладке, управлению раздельной компиляцией или управлению
исходным кодом. Программная среда С под управлением OC UNIX [1,8]
предоставляет набор средств таких возможностей, однако оставляет
желать много лучшего. Не предоставляется сборка мусора. Классы С
отличаются сочетанием возможностей по созданию объектов и
инициализации. Возможности по перегрузке присваивания и передаче
аргументов в С являются уникальными.