
Что такое DLL и зачем они нужны
Xakep, номер #035, стр. 035-074-1
Horrific (smirnandr@mail.ru) www.cydsoft.com/vr-online/
Программеры всех стран уже более 30 лет борются с проблемой многоразового использования однажды написанного кода. Так уж повелось, что 30-50% кода в простых офисных приложениях схожи между собой или решают одни и те же задачи. Ни один программер не захочет каждый раз снова кодить одно и то же. Как хорошо, когда можно использовать один раз написанный код многократно ....
Я сам не люблю в каждой новой проге писать одно и то же. Как хорошо, когда написал какой-то универсальный код, а потом только его и используешь.
РЕШЕНИЕ №1
Самым первым решением этой проблемы стал модульный кодинг. Ты пишешь какой-то кусок кода, оформляешь его в виде модуля, а потом просто используешь в своих прогах. Все прекрасно и удобно, а главное, что все довольны. Теперь не надо каждый раз выдумывать велосипед, просто добавил к своей проге определенный модуль и без проблем используй код, когда-то написанный тобой или кем-то другим.
Казалось, что это было самое простое и самое эффективное решение. Но все было прекрасно, пока не появилась многозадачность. Вот тут программеры заметили, что еще не все так эффективно и полно места, куда можно приложить свои ручонки.
ПРОБЛЕМА 1
Давай представим ситуацию, когда один добрый чел написал прекрасный модуль размером 1 метр. Другой добрый чел решил воспользоваться его возможностями и подключил к своей проге. Модуль и прога слились в одно целое. Вроде все нормально, но я же сказал, что прога и модуль слились в одно целое. Это значит, что размер проги увеличился на размер модуля, т.е. на 1 мег. Ни фига себе пельмень :). А теперь представь, что другой чел написал другую утилу с использованием этого модуля.... Его прога тоже увеличилась на 1 мег. Получается, что на винте пользователя хранятся две проги, в которых по 1 мегу кода одинаковых. И кому это нужно?
Ну, конечно же, насчет модуля в 1 мег я загнул. В те времена даже 100-килобайтный модуль было тяжело найти. Но надо учитывать, что и винты тогда были не бесконечные. Тогда крутым винтом считался диск в 20 метров. Это тебе не нынешние десятки гигов на одной пластине. Возможно, ты тогда еще под стол ходил. Я сам застал такие машины только на первом курсе института, а это было лет 8 назад.
ПРОБЛЕМА 2
Пока существовали только однозадачные ОСи, проблема с излишней растратой дискового пространства была единственной. Но как только задумались о многозадачности и в мыслях Гейтса появились идеи создать Windows, так сразу возникла другая проблема.... Представь себе ситуацию, когда ты запускаешь обе этих проги одновременно. При старте любая прога грузится в оперативку и только потом выполняется. Так что получается, что обе проги загрузят в оперативку один и тот же код. Вот это уже абсолютно никому не нужно.
Это нынешним летом память подешевела в несколько раз, и теперь лишние сто кило погоды не сделают. А раньше она стоила достаточно дорого, и люди каждый байтик доставался потом и кровью. Но если ты думаешь, что установка в свою тачку 500 мегов мозгов решит проблему, то ты крупно ошибаешься.