Про языки программирования

Тема в разделе "WASM.HEAP", создана пользователем EvilsInterrupt, 23 окт 2008.

  1. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    я - нет [​IMG]
     
  2. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    кстате у дельфе с оптимизацией все гуд. вот довольно таки нетривиальный вычислительный код (магическим оброзом рисчующий папоротнег)
    Код (Text):
    1. const a : array[0..3,0..2,0..3] of integer =
    2.                         (((0,0,0,0),(0,20,0,0),(0,0,0,0)),
    3.                         ((85,0,0,0),(0,85,11,70),(0,-10,85,0)),
    4.                         ((31,-41,0,0),(10,21,0,21),(0,0,30,0)),
    5.                         ((-29,40,0,0),(10,19,0,56),(0,0,30,0)));
    6.  
    7. procedure main;
    8. var
    9.  i:integer, x,y,z, New_X,New_Y : integer;
    10.  b : array[1..100] of Integer;
    11.  
    12. Begin
    13.       SetMode($12);
    14.  
    15. repeat
    16.   for i:=1 to 100 do
    17.  
    18.    begin
    19.      b[i]:=random(5);
    20.       if b[i]>3 then b[i]:=1;
    21.  end;
    22.  
    23. for i:=1  to 100 do
    24.  begin
    25.   new_x:=(a[b[i],0,0]*x+a[b[i],0,1]*y+a[b[i],0,2]*z) div 100 +a[b[i],0,3];
    26.   new_y:=((a[b[i],1,0]*x+a[b[i],1,1]*y+a[b[i],1,2]*z) div 100) +a[b[i],1,3];
    27.   z:= ((a[b[i],2,0]*x+a[b[i],2,1]*y+a[b[i],2,2]*z) div 100)+a[b[i],2,3];
    28.   x:=New_X;y:=New_Y;
    29.   PutPixel(2, 380-y,350-x+z);
    30.  end;
    31. until key <> 0;
    32.  
    33.    SetMode(3);
    34. end;
    и вот каг оно оформило процедурку майн,
    Код (Text):
    1. 000000AC: 53                   push        ebx
    2. 000000AD: 56                   push        esi
    3. 000000AE: 57                   push        edi
    4. 000000AF: 55                   push        ebp
    5. 000000B0: 81C460FEFFFF         add         esp,0FFFFFE60
    6. 000000B6: BEF0010000           mov         esi,0000001F0
    7. 000000BB: 66B81200             mov         ax,00012
    8. 000000BF: E8CCFFFFFF           call        000000090
    9. 000000C4: BF64000000           mov         edi,000000064
    10. 000000C9: 8D5C2410             lea         ebx,[esp][10]
    11. 000000CD: B805000000           mov         eax,000000005
    12. 000000D2: E8A1FFFFFF           call        000000078
    13. 000000D7: 8BE8                 mov         ebp,eax
    14. 000000D9: 892B                 mov         [ebx],ebp
    15. 000000DB: 83FD03               cmp         ebp,003
    16. 000000DE: 7E06                 jle         0000000E6
    17. 000000E0: C70301000000         mov         d,[ebx],000000001
    18. 000000E6: 83C304               add         ebx,004
    19. 000000E9: 4F                   dec         edi
    20. 000000EA: 75E1                 jne         0000000CD
    21. 000000EC: BF64000000           mov         edi,000000064
    22. 000000F1: 8D5C2410             lea         ebx,[esp][10]
    23. 000000F5: 8B0B                 mov         ecx,[ebx]
    24. 000000F7: 03C9                 add         ecx,ecx
    25. 000000F9: 8D0C49               lea         ecx,[ecx][ecx]*2
    26. 000000FC: 8B04CE               mov         eax,[esi][ecx]*8
    27. 000000FF: F72C24               imul        d,[esp]
    28. 00000102: 8B54CE04             mov         edx,[esi][ecx]*8[04]
    29. 00000106: 0FAF542404           imul        edx,[esp][04]
    30. 0000010B: 03C2                 add         eax,edx
    31. 0000010D: 8B54CE08             mov         edx,[esi][ecx]*8[08]
    32. 00000111: 0FAF542408           imul        edx,[esp][08]
    33. 00000116: 03C2                 add         eax,edx
    34. 00000118: BD64000000           mov         ebp,000000064
    35. 0000011D: 99                   cdq
    36. 0000011E: F7FD                 idiv        ebp
    37. 00000120: 8BE8                 mov         ebp,eax
    38. 00000122: 036CCE0C             add         ebp,[esi][ecx]*8[0C]
    39. 00000126: 8B44CE10             mov         eax,[esi][ecx]*8[10]
    40. 0000012A: F72C24               imul        d,[esp]
    41. 0000012D: 8B54CE14             mov         edx,[esi][ecx]*8[14]
    42. 00000131: 0FAF542404           imul        edx,[esp][04]
    43. 00000136: 03C2                 add         eax,edx
    44. 00000138: 8B54CE18             mov         edx,[esi][ecx]*8[18]
    45. 0000013C: 0FAF542408           imul        edx,[esp][08]
    46. 00000141: 03C2                 add         eax,edx
    47. 00000143: 51                   push        ecx
    48. 00000144: B964000000           mov         ecx,000000064
    49. 00000149: 99                   cdq
    50. 0000014A: F7F9                 idiv        ecx
    51. 0000014C: 59                   pop         ecx
    52. 0000014D: 0344CE1C             add         eax,[esi][ecx]*8[1C]
    53. 00000151: 8944240C             mov         [esp][0C],eax
    54. 00000155: 8B44CE20             mov         eax,[esi][ecx]*8[20]
    55. 00000159: F72C24               imul        d,[esp]
    56. 0000015C: 8B54CE24             mov         edx,[esi][ecx]*8[24]
    57. 00000160: 0FAF542404           imul        edx,[esp][04]
    58. 00000165: 03C2                 add         eax,edx
    59. 00000167: 8B54CE28             mov         edx,[esi][ecx]*8[28]
    60. 0000016B: 0FAF542408           imul        edx,[esp][08]
    61. 00000170: 03C2                 add         eax,edx
    62. 00000172: 51                   push        ecx
    63. 00000173: B964000000           mov         ecx,000000064
    64. 00000178: 99                   cdq
    65. 00000179: F7F9                 idiv        ecx
    66. 0000017B: 59                   pop         ecx
    67. 0000017C: 0344CE2C             add         eax,[esi][ecx]*8[2C]
    68. 00000180: 89442408             mov         [esp][08],eax
    69. 00000184: 892C24               mov         [esp],ebp
    70. 00000187: 8B44240C             mov         eax,[esp][0C]
    71. 0000018B: 89442404             mov         [esp][04],eax
    72. 0000018F: 66B95E01             mov         cx,0015E
    73. 00000193: 662B0C24             sub         cx,[esp]
    74. 00000197: 66034C2408           add         cx,[esp][08]
    75. 0000019C: 66BA7C01             mov         dx,0017C
    76. 000001A0: 662B542404           sub         dx,[esp][04]
    77. 000001A5: B002                 mov         al,002
    78. 000001A7: E8F4FEFFFF           call        0000000A0
    79. 000001AC: 83C304               add         ebx,004
    80. 000001AF: 4F                   dec         edi
    81. 000001B0: 0F853FFFFFFF         jne         0000000F5
    82. 000001B6: E8D9FEFFFF           call        000000094
    83. 000001BB: 84C0                 test        al,al
    84. 000001BD: 0F8401FFFFFF         je          0000000C4
    85. 000001C3: 66B80300             mov         ax,00003
    86. 000001C7: E8C4FEFFFF           call        000000090
    87. 000001CC: 81C4A0010000         add         esp,0000001A0
    88. 000001D2: 5D                   pop         ebp
    89. 000001D3: 5F                   pop         edi
    90. 000001D4: 5E                   pop         esi
    91. 000001D5: 5B                   pop         ebx
    92. 000001D6: C3                   retn
    Регистровое заполнение меня очень даже устраивает, вся exe прога 740байт весом)))
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    фракталы?
     
  4. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Зато имеют место деления на константу, что отнюдь не есть гуд.
     
  5. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    SII в данной проге это не критично.

    Хотя для тех у кого едет шиза, по поводу тормозных иструкций x86 проциков, могут заюзать фишку с инетля с++, (работающий так же непонятно как фракталы).
    Код (Text):
    1. function div100 (_eax:integer):integer;
    2. asm mov  ecx, eax
    3.     mov  eax, 51EB851Fh
    4.     imul ecx
    5.     sar  edx, 5
    6.     sar  ecx, 1Fh
    7.     sub  edx, ecx
    8.     mov  eax, edx
    9. end;
    заюзав примерно так
    Код (Text):
    1. new_x:= div100(a[b[i],0,0]*x+a[b[i],0,1]*y+a[b[i],0,2]*z)+a[b[i],0,3];
    и будет счастие.
     
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    bugaga
    Речь не о критичности или некритичности, а об умении компилятора оптимизировать генерируемый код. Дельфи это делает намного хуже что мелкомягкого Си++, что интеловских Си++ и Фортрана. Хотя для бизнес-приложений это действительно никакой роли не играет.
     
  7. _proteus

    _proteus Member

    Публикаций:
    0
    Регистрация:
    25 мар 2008
    Сообщения:
    192
    Адрес:
    Казань
    По большому счёту, ИМХО будущее за интерпретируемыми языками. Ведь не зря же ява достаточно популярна за рубежом, и уверенно теснит си с плюсами.
     
  8. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    _proteus
    Жаба -- двойной компилятор, а не интерпретатор. Сначала исходный текст (на самой жабе) компилируется в байт-код, а потом, при исполнении, жабовская виртуальная машина компилирует (а не интерпретирует) этот байт-код. Только компиляция там осуществляется не предварительно, а в процессе исполнения, по мере надобности. Т.е. код, который при данном прогоне программы не выполняется ни разу, скомпилирован не будет, а, например, многократно выполняющийся цикл будет скомпилирован единожды.
     
  9. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    SII
    По моему путаешь с .NET Framework. Java интерпретатор а не runtime компилятор.
     
  10. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    rudik
    Не путаю. Уточнял в своё время у Сановских специалистов.
     
  11. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    rudik
    да он just time (jit)
     
  12. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    Ява совмещает в себе интерпретатор с компилятором. Первые вызовы метода (точное число зависит от версии и настроек) интерпретируются, потом байткод компилируется в нативный и выполняется напрямую. Так работает стандартный mixed mode, кроме него можно задать режимы "только интерпретация" или "полная компиляция", которые используются обычно только в тестовых целях. .NET интерпретатора не имеет, если правильно помню.
     
  13. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Мне вообще не очень понятно, отчего что Жаба, что МСИЛ, не компилируются в нормальные Win32 exe? Ведь де-факто компилятор из байт-кода в машинный код уже написан, только вывод осуществляет исключительно в память. В чём дао такого подхода, кроме натужного гона про кроссплатформенность, которая реально мало кого волнует (и в первую очередь не волнует самого Мелкософта)?
     
  14. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    CyberManiac

    А зачем? Кому нужен этот "нормальный" exe? Дело в том, что в Яве (.NET не уверен, могу ошибаться) используется динамическое компилирование с учетом статистики выполнения. Вместо того, чтобы перевести весь байткод в машинный один раз и навсегда, переводятся и оптимируются только значимые куски. Каждые пару тысяч вызовов статистика обновляется и код при необходимости компилируется заново с дополнительными оптимизациями. А HotSpot compiler позволяет компилировать на уровне отдельных групп инструкций, не тратя времени на обработку редко используемого кода (которого как правило подавляющее большинство).

    JIT и HotSpot - это следующий этап в развитиии техники компиляции. Поэтому Яве и .NET просто незачем возвращаться обратно к старым схемам.

    Ну и конечно та самая переносимость кода, которая играет огромную роль. Если кто-то программирует исключительно для домашнего компьютера под Windows, то это еще не значит, что кроссплатформенности не существует :)
     
  15. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Stiver
    То есть все эти извращения - оттого, что до сих пор никто не родил языка, в котором можно указывать предпочтительный путь исполнения...

    А что, у нас такой богатый выбор операционных систем? Целых полторы штуки, конечно, есть ради чего огород городить...

    Ну как же, существует конечно. А ещё существует демократия, светлое коммунистическое будущее и пиво-чипсовая диета для похудания :-D
     
  16. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Ну про МСИЛ не знаю, а вот про Java скажу: вы знаете, что такое Java Reflections API? Попробуйте реализовать это в компилируемом языке.
     
  17. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    SadKo
    Реализовать всё можно. В дотнете например сохраняется инфа о объектах в рантайме.
     
  18. Stiver

    Stiver Партизан дзена

    Публикаций:
    0
    Регистрация:
    18 дек 2004
    Сообщения:
    812
    Адрес:
    Germany
    CyberManiac
    То есть все эти извращения - оттого, что до сих пор никто не родил языка, в котором можно указывать предпочтительный путь исполнения...

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

    А что, у нас такой богатый выбор операционных систем? Целых полторы штуки, конечно, есть ради чего огород городить...

    Ну у меня тут например стоят: Windows 2000 Server, SuSE Linux 9 и SunFire (не помню, какая точно) под Solaris 9. Работать должно на всех, иначе ..хм.. будет нехорошо в масштабах страны, скажем так :) И меня очень радует, что я могу спокойно писать на Яве, почти не мучаясь проблемами совместимости.
     
  19. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Stiver
    В абсолютном большинстве программ в каждой ветке существует предпочтительный путь исполнения, так уж всё в мире устроено, что обычно случается что-то одно, а вот другое - намного реже. И что чаще, а что реже, обычно определяется сбором статистических данных. Если в будни приходят одни данные, а по выходным - другие, очевидно, что будней больше и эффективностью работы в выходные можно пожертвовать.

    Что-то у меня идея профилирования и дооптимизации в процессе исполнения вызывает определённые сомнения насчёт скорости работы всего этого дела, ибо профайлер с анализатором статистики в длинном цикле с коротким телом - это не фунт изюма, а тот ещё тормозистор. К тому же прожорливость Жабы и задумчивость при сборке мусора - это уже притча во языцех. Чудеса, конечно, случаются, но очень уж редко и почти всегда - не по заказу.

    Я бы сказал, что продвижение Жабы - вообще вопрос не прикладного программирования, а заинтересованности Sun в лозунге "Жаба повсюду". У Микрософта аналогичный интерес в "дот нете повсюду". А мой интерес - чтобы по-быстрому порешить текущие задачи, после чего развалиться в кресле и читать "Эго" или "Дигитал Фото", но никак не объяснять пользователям, как и почему им надо установить сто мегабайт всякого дерьма, а то задача не запускается.

    И на каждую, небось, по админу... Чем не повод подумать о сокращении поголовья ОСей в этом зоопарке...
     
  20. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    если я ничего не путаю то нечто похожее есть в ObjC =)