Модераторы, а почему закрыли опрос про .НЕТ?

Все, что вы хотели знать о программизме, но боялись спросить.
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Сообщение Смайл »

Рассмотрим живой пример. C# (Java использует тот же подход)

Ничего специально не выбирал. Первый же пример который попался в Google

Вот процедура рисования некоего компонента.
Эта процедура отрисовки в ответ на WM_PAINT.

Называется это все to keep Garbage Collector busy.
Для того чтобы отрисовать бордюр аллоцируются:

Pen - 2 шт.
Point - 4 шт.

Т.е. стоит себе каретка безобидно мигает и вся система весело жжужит.
Процессор тащится обрабатывая generations мусора. Все остальное время он пытается сделать что-нить полезное. (Успеть поймать клики в Каки Парлы .NET debuggerе :D )

Вступить в движение Зеленых что-ли?

Код: Выделить всё

void DrawPanel(object sender, byte state)
        {
                Panel panel = (Panel)sender;

                Graphics g = panel.CreateGraphics();

                Pen pen1, pen2;

                if(state == 1)             //mouse over
                {
                        pen1 = new Pen( SystemColors.ControlLightLight );
                        pen2 = new Pen( SystemColors. ControlDarkDark);
                }
                else if(state == 2)        //clicked
                {
                        pen1 = new Pen( SystemColors.ControlDarkDark );
                        pen2 = new Pen( SystemColors.ControlLightLight );
                }
                else                       //neutral
                {
                        pen1 = new Pen( SystemColors.ControlDark );
                        pen2 = new Pen( SystemColors.ControlDark );

                }

                Rectangle r = panel.ClientRectangle;
                Point p1 = new Point( r.Left, r.Top );                  //top left
                Point p2 = new Point( r.Right -1, r.Top );              //top right
                Point p3 = new Point( r.Left, r.Bottom -1 );            //bottom left
                Point p4 = new Point( r.Right -1, r.Bottom -1 );        //bottom right

                g.DrawLine( pen1, p1, p2 );
                g.DrawLine( pen1, p1, p3 );
                g.DrawLine( pen2, p2, p4 );
                g.DrawLine( pen2, p3, p4 );
        }
Взято отсюда http://www.c-sharpcorner.com/Code/2002/ ... Picker.asp
[/code]
Аватара пользователя
Marmot
Графоман
Сообщения: 38343
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Canyon Heights
Контактная информация:

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение Marmot »

Смайл писал(а):
Marmot писал(а): Не гони насчёт интерпретации, всё делается в native code.
Но на Java - не совсем оптимально, по причине многоплатформности...
Что здесь есть "всё"?
Swing (Java GUI) насковозь про-hotspot-ен :-)
Народ ещё наезжал на Sun, что Hotspot слишком Swing-oriented, в ущерб другим subsystem.
Никто уже лет 5 bytecode не интерпретирует, кроме нас с тобой :-)
Аватара пользователя
Marmot
Графоман
Сообщения: 38343
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Canyon Heights
Контактная информация:

Сообщение Marmot »

Смайл писал(а):Pen - 2 шт.
Point - 4 шт.
JIT должен уметь кэшить(reuse) объекты в таких случаях...
Если не умеет - значит кривой JIT, как оно и есть на самом деле,
хотелось бы надется ненавсегда :-)
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение Смайл »

Marmot писал(а):
Смайл писал(а):
Marmot писал(а): Не гони насчёт интерпретации, всё делается в native code.
Но на Java - не совсем оптимально, по причине многоплатформности...
Что здесь есть "всё"?
Swing (Java GUI) насковозь про-hotspot-ен :-)
Народ ещё наезжал на Sun, что Hotspot слишком Swing-oriented, в ущерб другим subsystem.
Никто уже лет 5 bytecode не интерпретирует, кроме нас с тобой :-)
"Когда ваша жена начинает свою фразу со слов ты 'всегда', 'никогда', 'постоянно' - знайте за этим последует неправда".

Смотри
class myclass {
int myfield;
void myincrement() { myfield++; }
}

Да ты хоть "обхотьспоться" весь а ничего эффекитвнее чем

Код: Выделить всё

; myclass.myincrement
DWORD temp
temp = CALL get_int_field_value(this, @myfield)
INC temp 
CALL set_int_field_value(this, @myfield,temp)
не сделаешь. Уж такова природа байткодов.
Можно конечно успокоить себя и назвать это безобразие native code.

DIXI[/code]
Аватара пользователя
Marmot
Графоман
Сообщения: 38343
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Canyon Heights
Контактная информация:

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение Marmot »

Смайл писал(а):

Код: Выделить всё

; myclass.myincrement
DWORD temp
temp = CALL get_int_field_value(this, @myfield)
INC temp 
CALL set_int_field_value(this, @myfield,temp)
не сделаешь. Уж такова природа байткодов.
Можно конечно успокоить себя и назвать это безобразие native code.

DIXI
А я ещё не закончил :-)
А если как нибудь так?
INC @this+OFFSET_OF_myfield
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Сообщение Смайл »

Marmot писал(а):
Смайл писал(а):Pen - 2 шт.
Point - 4 шт.
JIT должен уметь кэшить(reuse) объекты в таких случаях...
Если не умеет - значит кривой JIT, как оно и есть на самом деле,
хотелось бы надется ненавсегда :-)
Аллё! А исполнеием этого суперинетеллектульного кеширования занимается отдельный процессор?
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение Смайл »

Marmot писал(а):
Смайл писал(а):

Код: Выделить всё

; myclass.myincrement
DWORD temp
temp = CALL get_int_field_value(this, @myfield)
INC temp 
CALL set_int_field_value(this, @myfield,temp)
не сделаешь. Уж такова природа байткодов.
Можно конечно успокоить себя и назвать это безобразие native code.

DIXI
А я ещё не закончил :-)
А если как нибудь так?
INC @this+OFFSET_OF_myfield
Если ты начинаешь интерпретировать this as memory pointer
то нужно будет делать

CALL lock_object(this)
INC @this+OFFSET_OF_myfield[/quote]
CALL unlock_object(this)

что идентично...
Аватара пользователя
Marmot
Графоман
Сообщения: 38343
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Canyon Heights
Контактная информация:

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение Marmot »

Смайл писал(а):CALL lock_object(this)
INC @this+OFFSET_OF_myfield
CALL unlock_object(this)
А нафига здесь lock_object/unlock_object ?
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение Смайл »

Marmot писал(а):
Смайл писал(а):CALL lock_object(this)
INC @this+OFFSET_OF_myfield
CALL unlock_object(this)
А нафига здесь lock_object/unlock_object ?
А потому что твое INC @this+OFFSET_OF_myfield
раскладывается в

mov eax,@this
mov ecx,dword ptr [eax+OFFSET_OF_myfield]
add ecx,1
mov edx,@this
mov dword ptr [edx+OFFSET_OF_myfield],ecx

В терминах же Java myfield++ есть атомарное непрерываемое действо.
Представь что будет если GC сдвинет твой this в это время.
Аватара пользователя
ajkj3em
Маньяк
Сообщения: 2063
Зарегистрирован: 12 ноя 2006, 06:53

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение ajkj3em »

Смайл писал(а):
Marmot писал(а):
Смайл писал(а):CALL lock_object(this)
INC @this+OFFSET_OF_myfield
CALL unlock_object(this)
А нафига здесь lock_object/unlock_object ?
А потому что твое INC @this+OFFSET_OF_myfield
раскладывается в

mov eax,@this
mov ecx,dword ptr [eax+OFFSET_OF_myfield]
add ecx,1
mov edx,@this
mov dword ptr [edx+OFFSET_OF_myfield],ecx

В терминах же Java myfield++ есть атомарное непрерываемое действо.
Представь что будет если GC сдвинет твой this в это время.
ну, отец, есть же

lea ebx, this
lock inc dword ptr [ebx+offset]
Аватара пользователя
Marmot
Графоман
Сообщения: 38343
Зарегистрирован: 17 фев 2003, 17:58
Откуда: Canyon Heights
Контактная информация:

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение Marmot »

Смайл писал(а):В терминах же Java myfield++ есть атомарное непрерываемое действо.
Представь что будет если GC сдвинет твой this в это время.
GCs разные бывают в разных ситуациях, короче Смайл, я понимаю что ты крут, но Java/C# написаны не для таких как ты :-)
А для людей, ценящих заботу о них и не желающих думать слишком много... :-)
Если ТЕБЕ этo не надо, то это не значит что это не надо массам of averge corporate developers.
Согласен?
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8563
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение папа Карло »

Marmot писал(а):А для людей, ценящих заботу о них и не желающих думать слишком много... :-)
Если ТЕБЕ этo не надо, то это не значит что это не надо массам of averge corporate developers.
Согласен?
это правильно.
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение Смайл »

huh писал(а): ну, отец, есть же

lea ebx, this
lock inc dword ptr [ebx+offset]
Наверное :roll:

Но так мне сгенерил VC в дебаге.

Чукча не есть ASM писатель. И уже очень давно...
Аватара пользователя
папа Карло
Шарманщик
Сообщения: 8563
Зарегистрирован: 17 фев 2003, 15:04
Откуда: НН -> BC -> WA -> UT -> CA

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение папа Карло »

Смайл писал(а):
huh писал(а): ну, отец, есть же

lea ebx, this
lock inc dword ptr [ebx+offset]
Наверное :roll:

Но так мне сгенерил VC в дебаге.

Чукча не есть ASM писатель. И уже очень давно...
а еще чукча не любит SQL :mrgreen:
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

Re: Не пытайтесь себя обмануть, товарищи!

Сообщение Смайл »

Marmot писал(а):
Смайл писал(а):В терминах же Java myfield++ есть атомарное непрерываемое действо.
Представь что будет если GC сдвинет твой this в это время.
GCs разные бывают в разных ситуациях, короче Смайл, я понимаю что ты крут, но Java/C# написаны не для таких как ты :-)
А для людей, ценящих заботу о них и не желающих думать слишком много... :-)
Если ТЕБЕ этo не надо, то это не значит что это не надо массам of averge corporate developers.
Согласен?
"Спасибо за комплиман, Проня Прокоповна" (или я чего не понял :oops: ?)

Вопрос: average corporate developers кто такие и чем занимаются?

Мы вот сделали Java app. Пользователи говорят что пред. версия (VB 4 16bit) тактильно работает на порядок (!) быстрее на той же машине.

И если кто еще будет возражать я его подпишу на конференцию рассылки наших юзеров. Контрастный душ полезен говорят. :lol:
Ответить