FeyFre
А теперь откомпилируйте в EXE свой вариант(с той же функциональностью) и скажите его размер(и таблицу импорта). У меня это 2.5Кб(+5 символов импорта)
Замечательно. У меня это
Code: Select all
program Project1;
procedure OutputDebugString(lpOutputString: PWideChar); stdcall; external 'kernel32.dll' name 'OutputDebugStringW';
begin
OutputDebugString('foo' + 'bar');
end.
= 3 значащих строки и 20.992 байт. Я потратил на написание кода две минуты с нуля. А сколько потрачено в твоём варианте (2.5 Кб, 17 значащих строк)?
Также давай прикинем, на сколько времени мой вариант будет закачиваться дольше на модемной скорости: 4.4 секунды. Кого это волнует?
Нельзя также забывать, что мой вариант без увеличения размера умеет куда больше, чем твой обгрызенный, куда на каждый чих придется добавлять кучу экспортов. Однако как proof of concept можно взять урезанные системные модули, которые дадут порядка 5 КБ (можно почитать
тут).
Так что пусть Дельфи и не самый минималистичный, но разрыв с Си не так уж и велик в абсолютных единицах. А кто высчитывает лишние байты - тот пусть пишет на асме.
Если же говорить не про синтетические проекты из серии "интересная фигулина", а про реальные вещи, то Сишные проги тоже жиреют с наращиванием функционала.
Я тоже не дурак поглядеть на размер, намекнуть на bloatware-ность и поругать жирные фреймворки, но до фанатизма-то доходить не надо.
Во-первых, плагин на 700Кб никому не нужен отожрет много места в PlugsPack что в свою очередь выливается в тормоза обновления.
Если он будет делать что-то полезное, то вот лично мне абсолютно похрен, сколько он занимает (в разумных пределах, конечно). И уверен, большинству народа тоже похрен. Прогресс, хвала Небесам, несется вперед как в зад ужаленный, гигагерцы с гигабайтами и гигабитами доступны даже нигерийцу, так что микроминиатюризация кода отходит в разряд умозрительных задач. Ну и для всяческих встроенных слабеньких девайсов.
Во-вторых, у нас всё-таки работа с данными, и чем больше свободной памяти, тем лучше.
...сказал человек, с вероятностью 90% располагающий >2 Гб RAM и с вероятностью 60% - ОСью, которая занимает 1 Гб RAM и 10 Гб на диске.
Мы на С большинство задач можем сделать экономнее на порядки, и с точки зрения памяти, и с точки зрения шустроватости. Например, мне в Templates одну большую строку нужно разбить на две штуки. На паскале Вы бы это делали методом копирования. Мне достаточно поменять 2-байта.
...
Как обойти всё это на паскале я понятия не имею, и так подозреваю если не невозможно, то очень геморно, и результирующий код нечитаемый.
Всё, что можно сделать на С, можно сделать и на Дельфях, причем с практически тем же быстродействием.
А вот обратное - неверно. Достаточно взять строку размером мегов этак 100 и вычислить ее длину.
Задачу о разбиении строк в Дельфях можно решить абсолютно тем же макаром - вставкой нулей в место разрыва. Но можем и проверить, если дашь точную формулировку задачи.
Что же касается 3 и 4, то даже при разбиении копированием это с большой долей вероятности неверно, т.к. у встроенного менеджера памяти своя куча, заранее откушенная у системы, и мелкие копошения в ней никак не затрагивают системную кучу.