Masm32 и Delphi - битва за размер...

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by execom, 19 Sep 2007.

Thread Status:
Not open for further replies.
  1. execom

    execom Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    46
    Likes Received:
    71
    Reputations:
    18
    Часто говорят о потребностях в оптимизации проекта с целью уменьшения размера программы... Delphi является аутсайдером по этому показателю среди основных языков для разработки системных приложений... Действительно у ламеров есть очень сильный (как им кажется) аргумент - Делфи создаёт пустой проект весом почти 400 кб)).. Напротив асемблер считается передовиком направления создания компактных приложений и по мнению ламеров разница в размерах огромна по сравнению с делфи... Да это так.. но всё же давайте попробуем написать программу хеллоу ворлд... выводящую просто окошко с заголовком Hallo и строкой Hallo World!!! напишим мы эти проги на Delphi и Asm... и посмотрим какая будет разница в размере...

    Asm:


    Code:
    .386
    .model flat, stdcall
    option casemap:none
    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\user32.inc
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    
    .data
    MsgCaption      db "Hello World!!!",0
    MsgBoxText      db "Hello",0
    
    .code
    start:
    	invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
    	invoke ExitProcess,NULL
    end start
    Компиляция:
    из MASM32 + окороченный стаб весом 64 байта..
    Сохраняем код и кидаем его в файл: asm.asm...
    Создаём ВАТ-ник с текстом:


    Code:
    @ml /c /coff /nologo asm.asm
    @Link /ALIGN:4 /FORCE:UNRESOLVED /SUBSYSTEM:WINDOWS /MERGE:.data=.text /MERGE:.rdata=.text /stub:stub.bin asm.obj
    Имеем ехе-шник весом 624 байта... Нормально... Теперь давай тоже самое на делфи...

    DeLpHi:


    Code:
    unit H;
    interface
    Procedure Start;
    implementation
    function MessageBoxA(hWnd: cardinal; lpText, lpCaption: PChar; uType: Cardinal): Integer; stdcall; external 'user32.dll' name '_MessageBoxA@16';
    Procedure Start;
    begin
    MessageBoxA(0,'Hello World!!!','Hello',0);
    end;
    end.
    Компиляция:
    dcc32.exe (от делфи3), Link.ExE, MSPDB50.DLL,(SYSINIT.DCU,SYSTEM.DCU - c урезанным RTL),USER32.LIB.....+ стаб 64 байт. Сохраняем код в файл: pas.pas... Создаем ВАТ-ник c текстом:


    Code:
    @dcc32.exe -JP pas.pas
    @link.exe /ALIGN:4 /FORCE:UNRESOLVED /SUBSYSTEM:WINDOWS /MERGE:.data=.text /MERGE:.rdata=.text /ENTRY:Start$qqrv /STUB:stub.bin user32.lib pas.obj
    Кидаем в одну папку получаем размер ехе - 668 байта...

    Итог: ни вижу ни малейшего повода поводя считать делфи громозким языком))))


    ПС: Большая просьба не искать аналогий со статьёй МС-РЕМа из августского номера 2005г Хакера... Там размер 832 байта... Статья не опирается на ту... просто действительно это апсолютно очевидный хеллоу ворлд, главная цель моего исследования получить минимальный вес прог на делфи...
     
    #1 execom, 19 Sep 2007
    Last edited: 19 Sep 2007
  2. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Это все очевидно. На делфи просто неудобно, потому что это плохой язык.
     
  3. execom

    execom Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    46
    Likes Received:
    71
    Reputations:
    18
    Делфи это язык на основе паскаль, а он считается наиболее удобным и доступным... и вообще неудобно спать на потолке... а на счёт очевидности... я такого размера хелоу ворлда на делфи в сети не видел....
     
  4. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Все описанное документировано, а тот кто собирает программу так или иначе с этой документацией столкнется, т.к. он просто обязан знать что и как умеет делать линкер и компилятор. Вообщем "статья" ни о чем.
    Делфи/пасаль - очень неудобные языки. Кроме того, в отличие, например, от С, при написании программы в некоторых местах будет затруднительно сходу представить себе то, как это будет смотреться в машинных командах, а на С практически всегда это очевидно и дает волю программисту самому оптимизировать свой код по размеру или по скорости. Говорят, для обучения всякой простенькой алгоритмизации (циклы/условные переходы/структуры всякие вроде деревьев - вобщем основ программирования) паскаль - самое то. Ну разве что так, и то. Мне так не кажется например.
     
    #4 DWORD, 19 Sep 2007
    Last edited: 19 Sep 2007
    1 person likes this.
  5. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    execom Тут ещё дело в оптимизации кода, кодогенератор у делфи не очень! Поэтому когда начнешь писать, даже и на чистом winAPI, то все равно бинарник очень поползет вверх, попробуй пример с более обширным кодом ;)
    Как всегда вечный спор. Все хорошо для своих целей. Делфи для одного, асм для другого!

    // P.S. ASM - это для понта больше! А так оптимально Си. Си - хороший язык :)
     
    1 person likes this.
  6. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Автор, ну ктоже так сравнивает? Причем тут язык? Начнем с того, что дельфи как язык не виноват в размере, виноват убогий компилятор у которого качество кодогенерации, как говорили выше, оставляет желать лучшего. Несмотря на то, что я не люблю дельфи, нельзя путать разные вещи.
     
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    ахуенная аргументация, смотрю...
    кто будет срать в теме подобным тоном - буду по -10 ставить ))
     
  8. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    эээээээээ,не дЭлфи негоните я писал на нем проги в 460 байт!

    Да кстати combat или как там тебя execom ,личирить стотьи вобще нехорошо,нечего нового не увидел,я тоже пользуюсь подобным методом но я ни читал никаких статей от мс рема я все познал сам,для меня полезность статьи = 0.
     
    #8 zl0y, 19 Sep 2007
    Last edited: 19 Sep 2007
  9. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Ну сколько раз говорить, причем тут сам язык? Говорить, что один язык лучше другово из-за размера выходного файла некорректно, так как вина здесь не языка, а компилятора. Все что вы этим добъетесь - это очередной холивар среди людей, которые вообще не сообржают по теме. Еще надо заметить, что кроме борландского компилятора дельфи на рынке нет вообще ничего насколько я знаю.
     
  10. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    ясен *** что делфи такие бинарники делает, но при чем тут MASM ? попробуй на vc6/7/8 собрать бинарник без RTL и прочей херни - абсолютно тоже, только ещё и оптимизируется по-умному (со вкл. оптимизацией) - что в ручную сделать не особо просто. Для ассемблерщиков. Срочно. Переходите на FASM. Без обсуждений - клянусь, будет проще и удобнее.

    А так, насчет делфи. С какого хуя вы взяли что его считают говном из-за того что студии делфи генерят большой бинарник? Ну VC,bc и тп с RTL генерит тоже нехилый бинарник, независимо от того что там будет - messagebox или аналог 3dsMAX. Делфи - просто бессмысленная глупость, как язык говно - слишком негибкий и ограниченый, с неестественным синтаксисом и непонятным разграничением версий/оболочек/компиляторов. Но, те кто орут что делфи не уступает студиям от ms - в 99.5% случаев те, кто просто не до конца понимают "как кодить", поэтому их си-подобные синтаксисы пугают гыгыгыг
    учите уроки
     
    #10 KEZ, 19 Sep 2007
    Last edited: 19 Sep 2007
  11. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Именно поэтому в данном случае рассуждать о делфи как едином целом язык-ide-компилятор-линкер допустимо. Хотя я вообще не считаю что компактность кода есть какой-то аргумент. Производительность кода - аргумент. Компактный код нужен вредителям. Пускай пишут свои погани на ассемблере.
     
  12. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    МЛЯ ДА ВЫ ЗАИПАЛЕ ВЫГОРАЖИВАТЬ СВОЙ СРАНЫЙ ДЕЛЬФИ И БЕЗ ТОГО ЯСНО ЧТО ЭТОТ ЯЗЫК НОРМАЛЬНЫЙ, ОДНИ М*ДАКИ ЕГО ОБСИРАЮТ, ДРУГИЕ ВЫГОРАЖИВАЮТ.
    ТАК ВОТ МЛЯ ДЕЛАТЬ ЭТО НАДО НЕ ЗДЕСЬ!!!!!!!!!!!!!!!!!!!!!!

    Тема закрыта И ЧТОБЫ ТАКИХ ТЕМ Я В ЭТОМ РАЗДЕЛЕ БОЛЬШЕ НЕ ВИДЕЛ!
     
    3 people like this.
Thread Status:
Not open for further replies.