« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
    Популярное
Взаимодействие с чужими окнами

Сохранение и загрузка данных в объекты на примере коллекций.

Использование клавиатуры средствами DirectInput

Запись звука

Исследование Perl модулей, часть 1. Создание графики на лету с использованием GD

Описание функций C (Си) / C++ - access

Функция AccessResource

Принципы построения интерфейсов

Забудем про captcha

Мультибраузерный сайт или как его сделать




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 227
Пользователей: 0

Статьи:: Delphi :: Разные статьи :: Простейшее средство от бесконечного кодинга



отправить ссылку другу версия для печати  Обсудить на форуме

Простейшее средство от бесконечного кодинга



Простейшее средство от бесконечного кодинга:

Программеры всех стран уже более 30 лет борются с проблемой многоразового использования однажды написанного кода. Так уж повелось, что в 30-50% кода в простых офисных приложениях схожи между собой или решают одни и те же задачи. Ни один программер не захочет каждый раз снова кодить одно и то же. Как хорошо, когда можно использовать один раз написанный код многократно ....

Я сам не люблю в каждой новой проге писать одно и то же. Как хорошо, когда написал какой-то универсальный код, а потом только используешь его.

РЕШЕНИЕ №1 :

Самым первым решением этой проблемы стал модульный кодинг. Ты пишешь какой-то кусок кода, оформляешь его в виде модуля, а потом просто используешь его в своих прогах. Все прекрасно и удобно, а главное, что все довольны. Теперь не надо каждый раз выдумывать велосипед, просто добавил к своей проге определенный модуль и без проблем используй код когда-то написанный тобой или кем-то другим.

Казалось, что это было самое простое и самое эффективное решение. Но все было прекрасно, пока не появилась многозадачность. Вот тут программеры заметили, что еще не все так эффективно и полно места, куда можно приложить свои ручонки.

ПРОБЛЕМА 1 :

Давай представим ситуацию, когда один добрый чел написал прекрасный модуль размером 1 метр. Другой добрый чел решил воспользоваться его возможностями и подключил к своей проге. Модуль и прога слились в одно целое. Вроде все нормально, но я же сказал, что прога и модуль слились в одно целое. Это значит, что размер проги увеличился на размер модуля, т.е. на 1 мег. Не фига себе пельмень :). А теперь представь, что другой чел написал другую утилу с использованием этого модуля.... Его прога тоже увеличилась на 1 мег. Получается, что на винте пользователя хранится две проги, в которых по 1 мегу кода одинаковых. И кому это нужно?

Ну конечно же на счет модуля в 1 мег я загнул. В те времена даже 100 кило модуль тяжело было найти. Но надо учитывать, что и винты тогда были не бесконечные. Тогда крутым винтом считался диск в 20 метров. Это тебе не нынешние десятки гига на одной пластине. Возможно, ты тогда еще под стол ходил. Я сам застал такие машины только на первом курсе института, а это было лет 8 назад.

ПРОБЛЕМА 2 :

Пока существовали только однозадачные ОСи, проблема с излишней растратой дискового пространства была единственной. Но как только задумались о многозадачности и в мыслях Гейтса появились идеи создать Windows (будь проклят тот день:)), так сразу возникла другая проблема.... Представь себе ситуацию, когда ты запускаешь обе этих проги одновременно. При старте любая прога грузится в оперативку и только потом выполняется. Так что получается, что обе проги загрузят в оперативку один и тот же код. Вот это уже абсолютно никому не нужно.

Это этим летом память подешевела в несколько раз, и теперь лишние сто кило погоды не сделают. А раньше она стоила достаточно дорого, и люди боролись за каждый байтик потом и кровью. Но если ты думаешь, что если поставить в свою тачку 500 мегов мозгов и проблема ушла сама собой, то ты крупно ошибаешься.

Хотя память и дешевая, проги от этого меньше не станут. Если посмотреть на запросы той же Windows 2000, то сразу хочется взять зонтик, вставить его Билу в задний проход и раскрыть :). Это че он там такое натворил, что Windows 2000 Server просит для нормальной работы минимум 256 мегов? А если учесть, что современные чипсеты не поддерживают памяти более 512 мегов, то о нормальной одновременной работе Windows 2000 Server + 3D Studio Max + MPEG4 можно забыть. Они всю память сожрут как термиты за пять сек.

РЕШЕНИЕ 2 :

И вот тут было найдено вполне солидное решение: не стыковать модули с основной прогой, а сохранять их в отдельный файл и пусть любая прога загружает его по мере надобности. Ляпнул, отвечай за базар. Так появились библиотеки DLL, что означает Dynamic Link Library. Это библиотеки, которые подключаются к программе динамически. В них можно хранить исполняемый код в виде процедур или функций, ресурсы проги, графику или даже видеоролики.

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

К СВЕТЛОМУ БУДУЩЕМУ :

Сейчас уже DLL - это не просто динамически подгружаемая библиотека. Ты наверно уже не раз слышал про компоненты ActiveX. Они так же могут быть выполнены в виде ocx или dll файлов. Да оно и понятно, ActiveX используются сейчас достаточно много и весят они в несколько раз больше чем самая большая DLL библиотека. Так что единственный и нормальный выход экономить место винта и памяти это засунуть ActiveX в динамически подгружаемую библиотеку. Хотя это уже не та DLL, но всё же работает по тем же принципам.

ЗАГРУЗКА БИБЛИОТЕК :

У динамических библиотек есть единственный недостаток - на ее загрузку тратится лишнее время. Зато если библиотека уже загружена другой прогой, то она появляется намного быстрей. Не веришь? Отложи сейчас журнал и возьми в руки секундомер. Теперь запусти Word или Excel. Засеки сколько времени будет проходить загрузка. Теперь закрой прогу и запусти ее снова. Она появится на экране практически моментально. Это потому что после выхода из проги, DLL файл не выгружается из памяти. Это происходит только тогда, когда окнам не хватает памяти и ни одна из прог не использует в данный момент эту библиотеку.

А теперь представь себе, что такое Word .... Представил? Это и текстовый редактор, и проверка орфографии, и построитель диаграмм, редактор формул и куча еще всякой всячины. Представь себе, что было бы, если все это засунуть в один файл? Нет, ты это не можешь представить. Это был бы один запускной файл размером в 30-50 мегов.

А теперь вспомни, что я тебе сегодня говорил: перед запуском, прога загружается в память. Представляешь теперь, сколько бы грузился Word? А сколько памяти он сожрал бы? А тебе ведь и половина его возможностей абсолютно не нужна. И зачем же их грузить в память?

А при использовании динамических библиотек в запускном файле находится только самое основное, а дополнительные возможности подгружаются по мере надобности из DLL-файлов. Таким образом, суммарная скорость загрузки уменьшается, причем очень даже значительно.

ИТОГ :

У динамических библиотек сплошные преимущества и ни одного существенного недостатка. Поэтому они получили такое широкое распространение и программеры используют их на каждом углу, когда надо и когда не надо. Ни когда нельзя быть уверенным, что какой-то код уже больше никогда не понадобится. Всегда нужно рассчитывать на будущее.

Я надеюсь, что я тебя убедил в великих возможностях DLL. Это действительно так. Конечно же, ActiveX более продвинуты, но они требуют геморной регистрации в системе и намного сложнее в кодинге. Но если ты разберешься с этим, то сможешь поднять свой уровень кодинга на новую высоту.

Из чего же сделан Windows? :

Все наверно помнят такую песенку: "Из чего же, из чего же, из чего же, сделаны эти мальчишки?". Глупейшая песня, и я со слезами на глазах вспоминаю, как я в лагере (я имею ввиду пионерский, а не концлагерь :)) распевал ее вместе с остальными пионерами. Ох и веселые были времена. Жаль сейчас так не развлечешься :(. О чем это я? Ах да... Я хотел рассказать тебе, из чего состоит Windows.

Большинство думает, что Windows - это все что находится в папке c:Windows, а ее ядро - это win.com. В какой-то степени это так, но не совсем. Ядро окошек - это простой DLL файл, а если быть конкретнее, то это Kernel32.dll. При старте Windows эта библиотека загружается в память в единственном экземпляре и любая прога может обращаться к содержащемуся в ней коду и использовать его в своих целях.

Точно так же, за вывод графики в Windows отвечает GDI32.DLL, которая так же загружается при старте в единственном экземпляре.

В Windows очень много дыр, но динамические библиотеки это достаточно гениальное решение многократно используемого кода.

Графические движки :

Любой геймер обязан знать про существование OpenGL. Что это такое? Какой-то пакет программ? Какой-то SDK для создания графики? Ничего подобного, это всего лишь две динамические библиотеки opengl.dll (opengl32.dll) и glu.dll (glu32.dll).

Что такое DirectX? Это графическая библиотека, которая состоит из DirectDraw, DirectInput, DirectMusic, DirectPlay и так далее. Все это не что иное, как простые динамически подгружаемые библиотеки. DirectDraw это Ddraw.dll, DirectInput это Dinput.dll, DirectMusic это Dmusic.dll и так далее.

Любые игровые движки выполнены в виде динамически загружаемых библиотек.




Рубрика: Разные статьи




Вышел MySQL 5.1.30, первый стабильный рели....

MySQL

После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:


Подробнее... | Рубрика: MySQL | Добавлено: 28.11.2008

Тестирование параллельных программ.

Тестирование

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


Подробнее... | Рубрика: Тестирование | Добавлено: 28.11.2008

Архитектура AMD64 (EM64T).

Архитектура AMD

Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.


Подробнее... | Рубрика: Архитектура AMD | Добавлено: 27.11.2008

Остальные статьи:

Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия