Систем программирования

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

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

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

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

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

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

В процессе развития систем программирования состав библиотек постоянно рас­ширялся. В них включалось все большее и большее число функций. Это было вызвано тем, что система программирования, предоставляющая пользователю более широкий выбор библиотечных функций, получала лучшие позиции на рынке средств разработки программного обеспечения. Сами по себе библиотеки подпрограмм и функций, созданных для того или иного языка, также станови­лись товаром на рынке средств разработки. Этот естественный процесс продол­жается до сих пор, и чем длиннее история существования того или иного языка программирования, тем шире диапазон существующих для него библиотек. Системы программирования для некоторых языков продолжают существовать во многом благодаря тому, что для них создан мощный аппарат библиотечных функций. Так язык FORTRAN существует благодаря широчайшему набору ма­тематических и физических функций, а язык COBOL— функций из финансо­вой сферы.

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

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

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

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

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

 

Контрольные вопросы

1.Компилятор – что это?

2.Основное назначение компиляторов;

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

4. В задачу разработчика программы входило обеспечить взаимосвязь всех используемых технических средств:…;

5.командный язык - язык Makefile (назначение);

6.интегрированная среда разработки – что это, возможности, назначение?

7.средства графического интерфейса пользователя - что это, возможности, назначение?

8.ресурсами прикладной программы называются - …..;

9.системой программирования называется….;

10.общая структура современной системы программирова­ния (упрощенный рис.);

11.4GL - что это, возможности, назначение?

12.RAD что это, возможности, назначение?

13.CASE-системы - что это, возможности, назначение?

14.Текстовый редактор в системе программирования — это…;

15.Именно технические характеристики компилятора, прежде всего, влияют на….;

16.Компоновщик (или редактор связей) предназначен для…..;

17. Функции загрузчика?

18.эту функцию выполняет компоновщик -?

19.Отладчик — это?

20. процесс называется отладкой и включает в себя сле­дующие основные возможности:….;

21. Дальнейшее развитие отладчиков связано со следующими принципиальными моментами:….;

22.С точки зрения системы программирования, библиотеки подпрограмм состоят из двух основных компонентов:…;

23.Динамические библиотеки - что это, возможности, назначение?

24.Динамические библиотеки в отличие от традиционных (статических) библио­тек подключаются к программе….;