Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 16
Текст из файла (страница 16)
2. Для того чтобы скрыть имена, в языках программирования часто используются правили определения облптпи видичости. Если в некоторой подпрограмме содержится еще одна поди ро грамм а, то другим раздельно коми илируемым программам будет известно только имя самой внешней подпрограммы. Этот механизм используется в таких языках, как Разов!, С и Ада, Более подробно блочная структура и область видимости имен рассмотрены в разделе 9.2.2. 3. Имена могут становиться известными путем явного добанления их определений из внешней библиотеки. В объектно-ориентированных языках этот способ является основным механизмом реализации паследовппия.
Путем добавления описания внешних классов в подпрограмму становится возможным определять друпгс объекты этого класса, как в языках Лда и Сч-ч-. В языке Лда имена также могут быть перегружеиы (очсг1оадсд), то ссчт несколько объектов могут иметь одно и то же имя. До тех пор пака компилятор может определить, иа какай именно объект указывает данное пмя, не требуется никаких изменений в вызывающей программе. Более подробно перегрузка описана в главе 7.
Тестирование и отладка. Большинство языков имеют различные вазможности для облегчения тестирования и отладки. Ниже приведено несколько характерных примеров. 1. Возможность трассировки. Рго)оя, Е1ЯР и многие другис интерактивные языки предоставляют программисту возможность отмечать конкретные операторы или переменные для их отслеживания но время выполнения программы. Всегда, когда выполняется помеченный оператор или помеченная переменная принимает новое значение, выполнение программы прерывается и вызывается заданная подпрограмма трассировки (которая, как правило, выводит на печать соответствующую информацию по отладке). 2.
Точки оапвпава. В интерактивных средах программирования обычно обеспечивается возможность обозначать некоторые места программы как точки останови. Когда в процессе выполнения программы достигается точка аста- 56 Глава 1. Проблемы разработки языка нова, выполнснис программы прерывается и контроль псрсдастся программисту, сидя щсму за терминалом. Он может проверить и изменить значсния переменных и запустить программу заново с момента останова. 3.
Утвсрэкденив. Утверждение — зто условное выражснис, которое вставляется в программу в видс отдсльного оператора, напримср, аааегт (Х>0 апв А.=1)ог (Х-О апд АпВа101 Утверждснис опрсдсляст, какие соотношения должны выполняться между персмснпыми в данном место программы.
Если включен режим обработки утвсрждспий, компилятор вставляет в откомпилированную программу соответствуюгций код для проверки указанных условий. Если в процессе выполнения программы переменные нс удовлетворяет заданным соотношениям, то выполнение программы прерывается и обработчик исключительных ситуаций выводит на печать некоторое сообшенис или прсдпринимаст какое-либо иное дсйствис.
После отладки программы утвсрждснпя могут быть отключены, так что компилятор пе будет генерировать код для их проверки. Впоследствии они могут использоваться как полсзныс комментарии, облсгчающис документированно программы. Эта простая концепция присутствует в нескольких языках, в том числе и в С+-ь 1.4.2. Среда разработки Среди разработки (спч!гошпспг 1гашскчог!г) состоит из вспомогатсльпых средств и инструмснтов, отражающих в коночном счстс инфраструктуру среды существования программы и используемых для управления разработкой программы. Она обеспсчивает программиста необходимыми при разработке программ ссрвисами, позволяющими организовать хранснис данных, быстро разработать графический интерфейс пользователя, обеспечить безопасность и коммуникационную связь с другими программами. Программисты цсизосжпо используют инфраструктурные ссрвпсы как компоненты при разработке своих программ.
Соотввтствснно, иногда языки разрабатываются таким образом, чтобы облегчить доступ к этим сервисам. Например, программы, написанные в 60-с гг., содержали специальные стандартные процедуры ввода-вывода для обсспсчсния связи с пользоватслсм. С развитисм интерактивных систем стандартным форматом вывода стали окна, выводимыс на экран. В настоящее время среды разработки должны включать в ссбя базовую программу управления окнами (наприьчс!х МоВГ, которая использует систему Х Ю!поо~чз), а пользовательской программе остается только вызывать специальные функции этой программы для отображения окон, меню, полос прокрутки и выполнения большинства других стандартных дсйствий с окнами. Интерфейсы Х Ю1пдочгз являются составной частью среды разработки, которая предоставляет возможность всем использующим сс программам обеспечить для пользователя, работаюшсго с ними за терминалом, некоторый стандартный образец поведения.
Такис систсмы, как Ч!зпа! Вагйс и М!сгозо!1 У!апа! Вгцо!о прсдлагают библиотеки ссрвисов для постросния оконных приложений на языках Счч, )ага и ВАэ1С. 1,4. Среда программирования 57 1.4.3. Языки управления заданиями и языки создания процессов Понятно управления заданиями имсст цскоторос отношение к среде разработки, В настояшес время, если вы хотите запустить некоторую программу, такую как компилятор С или текстовый процессор, вы наволитс указатель мыши на соотвстствуюшую картинку и,ти значок на экране и шслкастс иа нсм мышью.
До того как наступила эпоха оконных систем, для запуска программы вам нада было вручную набрать се имя в командной строке (сегодня это можно сдсл ать в режиме МБ-ООБ). Еще ран ыпс, в эпоху псрфокарт, для запуска программы вначале нужно было вставить перфокарту с именем программы, а затсм ужо перфокарты, содсржашис данныс.
Все эти способы позволяют пользоватслю осушсствлять непосредственный контроль над послсдоватсльцостыо действий, необходимых для выполнения работы. Если процесс компиляции программы завершился с ошибками, пользователь может запустить редактор, чтобы исправить тскст программы. Если компиляция прошла успешно, пользователь может запустить загрузчик и выполнить программу. Как было кратко описано в разделе 1.2.3, в 60-с гг,, когда функция управления выполнснисм программ псрсшла к компьютерам, появилось понятие процесс.
Оператору нс нужно стало ждать успешного вынолнсния какого-либо этапа программы. Каждая программа стала выдавать код возврснпи, и команда для опрсдслсния следующего этапа могла проверить код возврата прсдыдущсго этапа и в зависимости от атого кода припять то нли иное рсшснис относительно слсдуюгцсго этапа. Таким образом, послсдоватсльность этапов — компиляция, загрузка, выполнснис первой программы, выполнение второй программы -- могла быть загружена в компьютср зарансс и операционная система должна была выполнить эту послсдоватсльность действий указанным образом.
Фирма 1ВМ стала использовать этот подход в своем языке управления заданиями !о1> Соп!го! Ьапйиаяс ЦСЬ) для компыотсров сории Бузгсш 360 в 1963 г. Опсрационная систсма 1)К1Х расширила эту концспцшо. Вместо того чтобы просто провсрять код возврата нрсдыдущсго этапа, язык управления стал выполнять болсс сложные функции и превратился в более сложную структуру с данными, операциями и операторами. В атом случас объектами данных являются программы и файлы имеющейся компьютерной системы. Таким образом, пользователь мог писать программы, которые связывают между собой различные операции, взятыс из других программ.
Можно было запрограммировать послсдоватслышс выполненно этапов, основываясь на содержании файлов с данными н результатах предыдуших этапов. Это привело к появлснию в операционной системс 1)с1!Х комацдного иятерпретшлара зЬе!1, имсюшсго различные разновидности, такие как Вонгпс зЬс!1, С эЬс!1, Когп зЬсй и т, д. Файлы с расширением *.Ьа1на персональном компьютере являются простой формой таких командных файлов. Концепция командного интерпретатора породила много родственных языков.
Всс они относятся к катсгории языков сцшшрцвв или языков процессов. В основном зто интсрпрстирусмыс языки, которые характеризуются тем, что файлы и программы в них рассматриваотся как базовые данныс. Такие языки, как АНИЧК, Рог! и 58 Глава 1. Проблемы разработки языка ТСЕ в течение многих лет использовались для создания сценариев, и последние двадцать лет они являются неотьемлемым атрибутом системного программирования. Однако их популярность резко выросла с появлением Всемирной паутины ~Ч%Ъ'. Такие языки сценариев имеют большое значение при передаче информации в обоих направлениях между ттеЬ-браузсром пользователя и шеЬ-сервером.
Позже, в разделе 12.2.2, будет показано, как один из таких языков, а именно Рег1, используется для разработки тгеЬ-прогрэ»г»с В настоящее время мы находимся в ситуации, когда каждая компания старается создавать продукты «быстрее, лучше, дешевле». Термин время Оншерявгла появился для обозначения того, что процесс разработки программного обеспечения должен происходить со скоростью Интернета — мегабиты в секунду. Использование интерпретируемых языков, такцх как языки управления заданиями и языки сценариев, позволяет разработчикам бысглро создавать ирототипы приложений.
Языки типа Рег! позволяют очень быстро строить простые алгоритмы, которые вызывают написанные ранее программные продукты, используя сценарии вйеП 1.5. Обзор языка С Язык С является одним из языков, который тесно связан со своей средой программирования. Истории языка, Язык С был разработан в 1972 г.
Ляписом Ритчн (1)епп!з Я!геЫе) и Кевом Томпсоном ( Кеп Т1юш рэоп) пз ЛТАТ Ве1! Те! ерйо пе 1 аЬогагог!ез. По стилю он похож на ЛЕСОТО и Равса!, а также использует свойства языка !'1./1. Хотя он и является универсальным языком, компактный глштаксис и эффективность выполнения ншшсанных на нем программ сделали его популярным языком систс»шаго программирования, В конце 60-х ЛТАТ Вой Те!ер!юпс 1.аЬогагопсз закончила совместный с М1Т и СЕ (Сспега! Е!есгпс) проект по созданию операционной системы Мп!без; тем нс менее целью Кена Томпсона оставалась разработка удобной операционной системы.