powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DelphiWebScript (DWScript), документация/описание
25 сообщений из 66, страница 2 из 3
DelphiWebScript (DWScript), документация/описание
    #39861132
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёKazantsev Alexeyёёёёё,

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


теперь нужно вот так:
Код: pascal
1.
2.
3.
        for var Item in SymbolDictionary do begin
           TestSymbol := Item.Symbol;
...
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861136
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ziv-2014А SmartMobileStudio можно использовать DWS в приложениях для мобильных платформ?
В SMS приложения пишутся на DWS, который затем транслируется в JS. Запускается оно, понятное дело, везде где браузер работает.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861183
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно. В DWS, при декларации типов скриптовых объектов, которые реализуются в коде Delphi, предлагается реализовать соответствующий метод-событие *OnCleanUp(). Который автоматически вызывается при сбросе количества ссылок на конкретный объект данного типа в ноль (например, при выходе из области видимости или явно - путем вызова деструктора). То есть, объекты всех дельфийских классов типа TStringList и т.п., экспортированные в скрипт, нужно только создавать, не заботясь об их освобождении. Ну, или заботясь, если вдруг нужно резко освободить память. Классно, можно без try-finally обходиться.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861189
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

У меня аналогично сделано, только автоматом - если объект создается через вызов конструктора, он уничтожается. Плюс есть спец. функция для регистрации в случае других ситуаций.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861232
kmsskm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёёСпасибо, полезно, но не очень удобно и очень мало... :(
Может так удобней будет DWScript
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861840
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весьма "доставляющая" картинка...

...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861850
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

Код покажи. ;)
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861852
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatКод покажи. ;)
Просто DWS умеет в JIT (код есть в демках, там же и сравнение с LaPe). Кстати, если скорость важна, есть ещё интересный движок LaPe , там даже работа с указателями имеется.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861880
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatёёёёё,

Код покажи. ;)
ДэлфА'й
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
// 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
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
// 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;


...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861881
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,


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



SetPixel DWS
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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
Код: pascal
1.
2.
3.
4.
procedure TSetPixelMagic.DoEvalProc(const args : TExprBaseListExec);
begin
   MainForm.SetPixel(args.AsInteger[0], args.AsInteger[1], args.AsInteger[2]);
end;


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

Как тестировали
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
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;



...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861882
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

и, это. Код не совсем равнозначен. Например, Integer в Dephi - это 32-битное знаковое. А в DWS интыджер - это 64-битное целое.
И, как мне кажется, надо бы вынести время компиляции за пределы теста. Но тогда результаты совсем уж дикими будут...
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861884
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyrgreatКод покажи. ;)
Просто DWS умеет в JIT (код есть в демках, там же и сравнение с LaPe). Кстати, если скорость важна, есть ещё интересный движок LaPe , там даже работа с указателями имеется.
Да. :)

Сейчас прогоню без JIT.
И так, на моей машинке, с JIT:
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861886
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

с отключенным JIT.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861888
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi все же в 18 раз быстрее... :)
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861934
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще интересна раскладка по ядрам процессора. Есть стойкое подозрение, что жит 'мухлюет' ядрами. И если распараллелить делфи код (что в общем можно элементарно сделать в одну строку буквально), то картина поменяется на обратную.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861937
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonЕще интересна раскладка по ядрам процессора. Есть стойкое подозрение, что жит 'мухлюет' ядрами. И если распараллелить делфи код (что в общем можно элементарно сделать в одну строку буквально), то картина поменяется на обратную.
Ты всерьез считаешь, что следует доказывать преимущество Delphi перед скриптовым движком? :)
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861938
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

Почему нет, если он компилируемый.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861939
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

Я не люблю нездоровых сенсаций :)
И так. Один поток, 100 итераций, 2700 ms. 100 итераций + либа распараллеливания STParallel, режим pfAtomic. 400 ms. i7, 4 ядра x 2 Ht
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861940
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonёёёёё,

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

Можешь в исходниках DWS посмотреть, что там да как, если настолько подгорает.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861945
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

в jit то как залезть? раскладку по ядрам так и не показали, увы.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861946
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и нет, не подгорает. в отличие от сенсационстов я всегда ищу причины.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861947
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonи нет, не подгорает. в отличие от сенсационстов я всегда ищу причины.

В теории он может for распараллеливать, но вряд ли это делает без спроса, т.к. side эффекты могут быть неожиданными. Я добавил специальный parallel for синтаксис для этого.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861949
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.
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861951
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyThe 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 - компайлер... :(
...
Рейтинг: 0 / 0
DelphiWebScript (DWScript), документация/описание
    #39861952
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёМожет, кто-нибудь когда-нибудь и для Delphi напишет... JIT - компайлер... :(
Надо бы, а то в некстгене совсем всё тухло...
...
Рейтинг: 0 / 0
25 сообщений из 66, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DelphiWebScript (DWScript), документация/описание
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]