Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
ёёёёё
Kazantsev Alexey
ёёёёё,

Лучший учебник - папка Test.

Ну да, вот пытаюсь заставить работать содержимое папки \Demos.

Зараза, и демки-то не сразу соберешь.
Например, в классе TdwsSymbolDictionary больше нет индексируемого свойства Items[index : ineger] : TSymbolPositionList.
Доступ к элементам теперь через энумератор.
Соответственно, этот код больше не работает:
        for ItemIndex := 0 to SymbolDictionary.Count - 1 do
        begin
          TestSymbol := SymbolDictionary.Items[ItemIndex].Symbol;
...

теперь нужно вот так:
        for var Item in SymbolDictionary do begin
           TestSymbol := Item.Symbol;
...
12 сен 19, 18:09    [21969724]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3790
ziv-2014
А SmartMobileStudio можно использовать DWS в приложениях для мобильных платформ?

В SMS приложения пишутся на DWS, который затем транслируется в JS. Запускается оно, понятное дело, везде где браузер работает.
12 сен 19, 18:32    [21969739]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
Интересно. В DWS, при декларации типов скриптовых объектов, которые реализуются в коде Delphi, предлагается реализовать соответствующий метод-событие *OnCleanUp(). Который автоматически вызывается при сбросе количества ссылок на конкретный объект данного типа в ноль (например, при выходе из области видимости или явно - путем вызова деструктора). То есть, объекты всех дельфийских классов типа TStringList и т.п., экспортированные в скрипт, нужно только создавать, не заботясь об их освобождении. Ну, или заботясь, если вдруг нужно резко освободить память. Классно, можно без try-finally обходиться.
12 сен 19, 21:34    [21969906]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
asviridenkov
Member

Откуда:
Сообщений: 3948
ёёёёё,

У меня аналогично сделано, только автоматом - если объект создается через вызов конструктора, он уничтожается. Плюс есть спец. функция для регистрации в случае других ситуаций.
12 сен 19, 21:55    [21969913]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
kmsskm
Member

Откуда:
Сообщений: 20
ёёёёё
Спасибо, полезно, но не очень удобно и очень мало... :(

Может так удобней будет DWScript
13 сен 19, 01:35    [21969967]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
Весьма "доставляющая" картинка...

Картинка с другого сайта.
13 сен 19, 22:59    [21970777]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
rgreat
Member

Откуда:
Сообщений: 5359
ёёёёё,

Код покажи. ;)
13 сен 19, 23:48    [21970789]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3790
rgreat
Код покажи. ;)

Просто DWS умеет в JIT (код есть в демках, там же и сравнение с LaPe). Кстати, если скорость важна, есть ещё интересный движок LaPe, там даже работа с указателями имеется.
14 сен 19, 00:00    [21970791]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
rgreat
ёёёёё,

Код покажи. ;)

+ ДэлфА'й

// PaintBitmapDelphi
//
procedure TMainForm.PaintBitmapDelphi;
const
   cSize = 500;
var
   i, j, newColor : Integer;
   u, v, x, y, z : Double;
begin
   for i := 0 to cSize-2 do begin
      for j := 0 to cSize-2 do begin
         x := -0.8 + 3.0 * i / cSize;
         y := -1.4 + 2.8 * j / cSize;
         newColor := 0;
         u := 0;
         v := 0;
         repeat
            z := Sqr(u) - Sqr(v) - x;
            v := 2 * u * v - y;
            u := z;
            newColor := newColor + 1;
         until (Sqr(u) + Sqr(v) > 9) or (newColor = 16);
         SetPixel(i + 1, j + 1, newColor);
      end;
   end;
end;


+ DWS

// PaintBitmapDWSscript
//
procedure TMainForm.PaintBitmapDWSscript;
const
   cSource = ''
      +'const cSize = 500;'#13#10
      +'var i, j, newColor : Integer;'#13#10
      +'var u, v, x, y, z : Float;'#13#10
      +#13#10
      +'for i := 0 to cSize-2 do begin'#13#10
      +'   for j := 0 to cSize-2 do begin'#13#10
      +'      x := -0.8 + 3.0 * i / cSize;'#13#10
      +'      y := -1.4 + 2.8 * j / cSize;'#13#10
      +'      newColor := 0;'#13#10
      +'      u := 0;'#13#10
      +'      v := 0;'#13#10
      +'      repeat'#13#10
      +'         z := Sqr(u) - Sqr(v) - x;'#13#10
      +'         v := 2 * u * v - y;'#13#10
      +'         u := z;'#13#10
      +'         newColor := newColor + 1;'#13#10
      +'      until (Sqr(u) + Sqr(v) > 9) or (newColor = 16);'#13#10
      +'      SetPixel(i + 1, j + 1, newColor);'#13#10
      +'   end;'#13#10
      +'end;'
   ;

var
   prog : IdwsProgram;
   {$ifndef WIN64}
   jitter : TdwsJITx86;
   {$endif}
begin
   prog:=DelphiWebScript.Compile(cSource);

   {$ifndef WIN64}
   jitter:=TdwsJITx86.Create;
   jitter.Options:=jitter.Options-[jitoNoBranchAlignment];
   jitter.GreedyJIT(prog.ProgramObject);
   jitter.Free;
   {$endif}

   if prog.Msgs.Count=0 then
      prog.Execute
   else ShowMessage(prog.Msgs.AsInfo);
end;

14 сен 19, 12:27    [21970846]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
rgreat,


Причем, никакого рисования внутри цикла тестирования не делается:
+ SetPixel Delph




+ SetPixel DWS

procedure TMainForm.SetPixel(x, y, color : Integer);
const
   cColors: array[0..16] of TColor = (
      $000022, $000033, $000044, $000055, $000066, $000077, $000088,
      $101099, $3030AA, $4040BB, $5050CC, $6060DD, $7070EE, $8080FF,
      $9090FF, $A0A0FF,
      $000000
      );
begin
   PIntegerArray(FScanLines[y])[x]:=cColors[color]; // Здесь FScanLines - FScanLines : array of Pointer;
end;


В DWS обращение к SetPixel() транслируется в ту же дельфийскую процедуру:
SetPixel DWS
procedure TSetPixelMagic.DoEvalProc(const args : TExprBaseListExec);
begin
   MainForm.SetPixel(args.AsInteger[0], args.AsInteger[1], args.AsInteger[2]);
end;

--------
Процедура тестирования:

+ Как тестировали
procedure TMainForm.Benchmark;
const
   cNB_LOOPS = 10;
var
   tStart, tStop, tFreq : Int64;
   i : Integer;
begin
// Тестирование кода Delphi
   QueryPerformanceFrequency(tFreq);

   PrepareBitmap;
   QueryPerformanceCounter(tStart); // Старт

   for i:=1 to cNB_LOOPS do
      PaintBitmapDelphi;

   QueryPerformanceCounter(tStop); // Стоп

   IMDelphi.Picture.Assign(FBitmap); // Перенос результата на картинку
   FBitmap.Free;
   LADelphi.Caption:=Format('Delphi: %0.1f ms', [1000*(tStop-tStart)/tFreq]);

//******************************
// Тестирование кода DWScript:
   PrepareBitmap;

   QueryPerformanceCounter(tStart); // Старт

   for i:=1 to cNB_LOOPS do
      PaintBitmapDWSscript;

   QueryPerformanceCounter(tStop); // Стоп

   IMDWScript.Picture.Assign(FBitmap); // Перенос результата на картинку
   FBitmap.Free;
   LADWScript.Caption:=Format('DWScript: %0.1f ms (incl. compilation)', [1000*(tStop-tStart)/tFreq]);
end;


14 сен 19, 12:38    [21970847]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
rgreat,

и, это. Код не совсем равнозначен. Например, Integer в Dephi - это 32-битное знаковое. А в DWS интыджер - это 64-битное целое.
И, как мне кажется, надо бы вынести время компиляции за пределы теста. Но тогда результаты совсем уж дикими будут...
14 сен 19, 12:41    [21970848]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
Kazantsev Alexey
rgreat
Код покажи. ;)

Просто DWS умеет в JIT (код есть в демках, там же и сравнение с LaPe). Кстати, если скорость важна, есть ещё интересный движок LaPe, там даже работа с указателями имеется.

Да. :)

Сейчас прогоню без JIT.
И так, на моей машинке, с JIT:

К сообщению приложен файл. Размер - 25Kb
14 сен 19, 12:46    [21970850]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
ёёёёё,

с отключенным JIT.

К сообщению приложен файл. Размер - 23Kb
14 сен 19, 12:48    [21970852]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
Delphi все же в 18 раз быстрее... :)
14 сен 19, 12:48    [21970854]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3339
Еще интересна раскладка по ядрам процессора. Есть стойкое подозрение, что жит 'мухлюет' ядрами. И если распараллелить делфи код (что в общем можно элементарно сделать в одну строку буквально), то картина поменяется на обратную.
14 сен 19, 18:14    [21970969]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
makhaon
Еще интересна раскладка по ядрам процессора. Есть стойкое подозрение, что жит 'мухлюет' ядрами. И если распараллелить делфи код (что в общем можно элементарно сделать в одну строку буквально), то картина поменяется на обратную.

Ты всерьез считаешь, что следует доказывать преимущество Delphi перед скриптовым движком? :)
14 сен 19, 18:28    [21970972]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
rgreat
Member

Откуда:
Сообщений: 5359
ёёёёё,

Почему нет, если он компилируемый.
14 сен 19, 18:31    [21970975]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3339
ёёёёё,

Я не люблю нездоровых сенсаций :)
И так. Один поток, 100 итераций, 2700 ms. 100 итераций + либа распараллеливания STParallel, режим pfAtomic. 400 ms. i7, 4 ядра x 2 Ht
14 сен 19, 18:41    [21970977]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
makhaon
ёёёёё,

Я не люблю нездоровых сенсаций :)
И так. Один поток, 100 итераций, 2700 ms. 100 итераций + либа распараллеливания STParallel, режим pfAtomic. 400 ms. i7, 4 ядра x 2 Ht


Можешь в исходниках DWS посмотреть, что там да как, если настолько подгорает.
14 сен 19, 19:04    [21970978]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3339
ёёёёё,

в jit то как залезть? раскладку по ядрам так и не показали, увы.
14 сен 19, 19:47    [21970985]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3339
и нет, не подгорает. в отличие от сенсационстов я всегда ищу причины.
14 сен 19, 19:49    [21970987]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
asviridenkov
Member

Откуда:
Сообщений: 3948
makhaon
и нет, не подгорает. в отличие от сенсационстов я всегда ищу причины.


В теории он может for распараллеливать, но вряд ли это делает без спроса, т.к. side эффекты могут быть неожиданными. Я добавил специальный parallel for синтаксис для этого.
14 сен 19, 19:53    [21970988]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3790
The DWScript JIT compiler relies on SSE2 to outperform the Delphi 32bit compiler, its current main limitations are:

JIT centers around floating point and a limited subset of integer and Boolean operations, the rest isn’t JITted yet.
Function calls aren’t JITted at the moment, and neither are a variety of other statements.
The JIT works with the same data structures as the interpreted engine, that means script debuggers and everything else works on JITted code as if it was still interpreted, but that also means the basic data unit is still the 16 bytes Variant at the moment.
The JIT register allocator is currently limited to floating point (ie. no integer or pointer allocations).
DWScript Integer type is 64bit sized, so for 32bit values, Integer performance is lower than what Delphi 32 can do, even though the JIT can generate typically faster code for it than the Delphi 32bit compiler does for Int64.
14 сен 19, 20:00    [21970991]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
ёёёёё
Member

Откуда:
Сообщений: 947
Kazantsev Alexey
The DWScript JIT compiler relies on SSE2 to outperform the Delphi 32bit compiler, its current main limitations are:

JIT centers around floating point and a limited subset of integer and Boolean operations, the rest isn’t JITted yet.
Function calls aren’t JITted at the moment, and neither are a variety of other statements.
The JIT works with the same data structures as the interpreted engine, that means script debuggers and everything else works on JITted code as if it was still interpreted, but that also means the basic data unit is still the 16 bytes Variant at the moment.
The JIT register allocator is currently limited to floating point (ie. no integer or pointer allocations).
DWScript Integer type is 64bit sized, so for 32bit values, Integer performance is lower than what Delphi 32 can do, even though the JIT can generate typically faster code for it than the Delphi 32bit compiler does for Int64.


Может, кто-нибудь когда-нибудь и для Delphi напишет... JIT - компайлер... :(
14 сен 19, 20:05    [21970994]     Ответить | Цитировать Сообщить модератору
 Re: DelphiWebScript (DWScript), документация/описание  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3790
ёёёёё
Может, кто-нибудь когда-нибудь и для Delphi напишет... JIT - компайлер... :(

Надо бы, а то в некстгене совсем всё тухло...
14 сен 19, 20:14    [21970995]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Delphi Ответить