Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 10
Текст из файла (страница 10)
Над базовой системой типов возможны только пирровы победы. С«-» поддерживает постепенный подход к обучению. Ваш путь к изучению нового языка программирования зависит от того, что вы уже знаете и что хотите узнать. Нет единого для всех подхода. Я полагаю, что вы изучаете С-н-, чтобы повысить свое профессиональное мастерство программиста и проектировщика, То есть я полагаю, что вашей целью изучения С+ а является нс просто освоение нового синтаксиса для применения в том же духе, как вы это делали раньше, а изучение новых и лу ппих способов 'построения систем.
Обучение должно происхолить постепенно, потому что освоение существенно новых навыков требует времени и практики. Подумайтс о том, сколько времени заняло бы качественное изучение нового для вас естественного языка или обучение игре на новом музыкальном инструменте. Стать более профессиональным разработчиком легче и быстрее, но не настолько легко и быстро, как хотелось бы большинству людей. Из этого следует, что вы будете использовать С++ (зачастую лля построения реальных систем) ло того, как поймете все свойства и методы языка. Поддерживая 42 Глава 1, Обращение к читателю несколько парадигм программирования (глава 2), С««позволяет продуктивно писать на нескольких уровнях мастерства, Каждый новый стиль программпровашия добавляет инструмент в вашу коллекцию, но каждый действенен и сам по себе, повышая эффективность вашей работы как программиста.
С««организован таким образом, что вы можете изучать его кош1епции строго последовательно и получать практические результаты уже в процессе изучения. Кроме того, результаты, как правило, оказываются прямо пропорциональны вложенным усилиям. Несмотря на продолжительность дебатов на тему «стоит ли изучать С до С««», я твердо убежден, что лучше всего начинать непосредственно с С««.
С««безопаснее, выразительнее, он уменьшает необходимость концентрации внимания на низкоуровневой технике. Вам будет легче выучить хитроумные штучки на С, которые требуются для компенсации отсутствия в нем высокоуровневых возмозкностей, после того, как вы познакомитесь с общим подмножеством С и С««и с некоторыми методами высокого уровня, поддерживаемыми в С««непосредственно. Приложение Б является руководством для программистов, перехолящих с С««на С, например с целью использования уже созданного кола.
Существует несколько независимо разработанных и распространяемых реализаций С';ж. Вы можете выбирать среди большого количества инструментальных средств, библиотек и сред разработки программ. Существуег масса учебников, руководств. журналов, газет, электронных досок обьявлений, списков рассылки, конференций и курсов, которые могут познакомить вас с последними достижениями в области С««, его использования, инструментов, библиотек, реализаций и т.
п. Если вы собираетесь серьезно использовать С««, я настоятельно рекомендую получить доступ к таким источникам. Каждый имеет свои приоритеты и склонности, поэтомувоспользуйгесь по крайней мере двумя. Например, см. [Ваггоп, 19941, [Воосл, 19941, [Нспсйсзоп, 19971, [Коеп1д, 1997], [Магт1п, 19951. 1.3. Структура С++ Важным критерием при проектировании языка была простота. Там где существовал выбор между упрощением определения языка и упрощением компилятора, делался выбор в пользу первого. Однако, большое внимание было уделено совместимости с С [Коеп1д, 19891, [Яегопзтгир, 19941, (приложение Б), что выразилось в сохранении синтаксиса С.
В С««нет встроенных высокоуровневых типов данных и операций. Например, в С '-«нет типа «матршга с операцией взятия обратной» или «строка с оператором конкатенациям Если пользователю нужен такой тип, он может быть определен средствами языка. В действительности, определение новых типов общего назначения или специфичных для данного приложения является основной работой при программировании на С«~-. Хорошо спроектированный тип, определяемый пользователем, отличается от встроенного только тем, как он определен, а не тем, как он используется. Стандартная библиотека Сч», описанная в части П1, предоставляет множество примеров таких типов. С точки зрения пользователя, разница между встроенным типом и типом, предоставляемым стандартной библиотекой, невелика. При проектировании С««избегались средства, которые потребовали бы дополнительных затрат времени или ресурсов на этапе выполнения даже в тех случаях, когда они не используются.
Например, конструкции, которые потребовали бы хранения «внутренней информации» для каждого объекта не были реализованы; поэтому, аз 1.3. Структура С++ если пользователь объявляет структуру, состоящую из двух 1б-битных элементов, эта структура поместится в один 32-битный, регистр. С++ разрабатывался для использования в традиционной среде «компиляция — выполнение», то есть типичной среде программирования на С в системе 11Ы1Х. К счастью, Сл-+ нллкогда не огранллчивался только 1Л~11Х, он просто использовал 11Х!Х н С в качестве модели для связи языка с библиотеками, компиляторами, компоновщиками, средой выполнения и т. и.
Эта минимальная модель помогла С-~-+ успешно работать практически на любой платформе. Тем не менее, существуют веские причины использовать С ' + в окружении, обеспечивающем гораздо большую поддержку. Такие средства, как динамическая загрузка, инкрементная компиляция и база данных определений типов могут с успехом использоваться, нс оказывая влияния на сам язык. Проверка типов и сокрытие данных в Сь+ базируются на анализе программы во время компиляции, что предохраняет от случайной порчи данных. Эти меры не обеспечивают секретности нли защиты от того, кто намеренно нарушает правила.
Однако, они могут свободно использоваться, не влияя па время выполнения плп требуемые ресурсы. Идея состоит в том, что свойство языка должно быть не только элегантным, но и приемлемым в контексте реальной программы. Систематическое и детальное описание структуры С++ см, в [Зътоллзггцр, 1994'1. 1.3.1. Эффективность и структура Съж создан на основе языка программирования С, и, за небольшим исключением, С остается подмножеством С++. Основа языка, С-подмножество С++, разработана таким образом, что существует очень тесная связь между типами, операторами, инструкциями и объектами, с которымн непосредственно работает компьютер: чнсламп, символами, адресами.
За исключением операторов лев, гге1е1е, 1уреЫ, Нуглалис саз1, 16гош и блока 1гд, отдельные выражения и инструкции Сь«не требуют поддержки во время выполнения. С++ может использовать тс же механизмы вызова функций и возвращения результатов, что н С, илп даже более аффективные. В тех случаях, когда даже такис эффективные механизмы слишком дороги, функция в С++ может быть встроена в место вызова.
Таким образом, мы получаем преимущества функций, не неся прн этом дополнительных накладных расходов. Одной из целей языка С было устранение необходимости кодировать на ассемблере наиболес критичныс системные программы. При развитии С+ г достижение компромисса в этой области нс было главной задачей. Разница между С и С+ состоит, в первую очередь, в степени акцента на типах и структуре. С вЂ” выразителен и гибок. С++ — елце более выразителен. Однако, для достижения этой выразительности вы должны уделять большее внимание типам обьектов.
Зная типы объектов, компилятор может правильно обращаться с выражениями, тогда как в противном случае вы должны были бы детально определять операции. Знание типов объектов также позволяет компилятору обнаруживать ошибки, которые в противном случае не были бы выявлены до этапа тестирования или даже во время тестирования.
Имейте в виду, что использование системы типов для проверки аргументов функций, защиты данных от случайного излленения, создания новых типов, введения новых операторов и т, д, не увеличивает времени выполнения и не требует дополнителъных системных ресурсов. Глава 1. Обращение к читателю Акцент на структуры в С++ отражает увеличение размеров программ по сравнению с временами С. Вы можете написать небольшую программу (скажем 1000 строк), используя грубую силу и нарушая все правила хорошего стиля. Для программ большего размера вы не сможете этого сделать.
Если структура программы, состоящей из 100 000 строк, плоха, вы обнаружите, что новые ошибки появляются с той же скоростью, с которой исправляются старые. С-~.+ разрабатывался таким образом, чтобы предоставить возможность рационально структурировать большие программы, и чтобы один человек мог работать с большим объемом кода.
Кроме того, хотелось, чтобы средняя строка кола С+-л имела большую выразительность, нежели средняя строка на С или Разе а!. К настоящему времени С+ л перевыполнил этн задачи. Не каждый фрагмент кода может быть хорошо структурирован, независим от аппаратуры, легко чптасм и т.д. В С->+ вы можете работать с аппаратными средствами непосредственно и эффективно, не принося в жертву безопасность и легкость понимания.
Язык также имеет средства сокрытия такого кода за элегантными и безопасными интерфсйсами. Естественно, использование Сч-ь для написания больших программ ведет к применению С++ группами программистов. При этом акцент С++ на модульность, интерфейсы со строгим определением типов и гибкость окупается сторицей. Сч-+ имеет столь же удовлетворительный набор средств для написания больших программ, как и любой другой язык.