Автор Тема: Lua  (Прочитано 115242 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #75 : Ноябрь 07, 2012, 12:57:58 pm »
2 valexey
В смысле в 1с один из самых медленных интерпретаторов:
http://oberspace.dyndns.org/index.php/topic,248.msg6004.html#msg6004
Эмм.. А как они этого добились?
Думаю что максимально тупой реализацией в лоб.  ;D

И что в том исходнике означают магические строчки:
MSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
MSScriptControl.Language = "javascript";

COM-сервер виндозного скриптового движка.

ps Первый раз встречаю программиста не знающего что это  ;D
Яблочник...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #76 : Ноябрь 07, 2012, 01:03:17 pm »
Вот кстати тоже пример чего нельзя сделать средствами 1С - замерять время в миллисекундах  :) (заветная функция в последней бета-версии только появилась)

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Lua
« Ответ #77 : Ноябрь 07, 2012, 01:05:53 pm »
Язык регулярных выражений не является скриптовым языком.
Я образно сказал. Шаблон регулярного выражения можно считать текстом программы, а конечный автомат, разбирающий эту строку и сопоставляющий с ней какую-то другую строку - интерпретатором. Если этот автомат реализовать средствами скриптового языка, то и получится, что в одном интерпретаторе запущен скрипт, реализующий работу другого интерпретатора, который в свою очередь выполняет свой скрипт.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #78 : Ноябрь 07, 2012, 01:12:17 pm »
MSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
MSScriptControl.Language = "javascript";

COM-сервер виндозного скриптового движка.

ps Первый раз встречаю программиста не знающего что это  ;D
Яблочник...
Не, юниксоид :-)

На самом деле я вижу что это COM-объект, но зачем оно тут? У вас там что? 1С выполняется поверх JS?
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #79 : Ноябрь 07, 2012, 01:22:34 pm »
Там просто юзается жабаскриптовский Date().getTime()

Функция ПолучитьВремяВМиллисекундах()
  Возврат MSScriptControl.Eval("new Date().getTime()");
КонецФункции

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #80 : Ноябрь 07, 2012, 01:54:38 pm »
Там просто юзается жабаскриптовский Date().getTime()

Функция ПолучитьВремяВМиллисекундах()
  Возврат MSScriptControl.Eval("new Date().getTime()");
КонецФункции

А сколько это будет все выполняться, если выкинуть внутренний цикл? Интересно сколько вся эта толстая обвязка жрет.
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #81 : Ноябрь 07, 2012, 03:22:50 pm »
Запускал по пять раз:

1С:Предприятие 8.3.2.163 (бета-версия) от 28.09.2012
Код
Procedure PressExecuteButton(Button)
   
    Start = CurrentUniversalDateInMilliseconds();
   
    For i = 0 To 2000000 Do       
        a = 123;
    EndDo;
   
    End = CurrentUniversalDateInMilliseconds() - Start;
   
    Message(End);
   
EndProcedure
Лог:
9 026
9 477
9 166
9 045
9 150

BlackBox Component Builder 1.6-rc6
Красноярская сборка 16 октября 2012
Код:
MODULE MyTime;
    IMPORT Log;
   
    PROCEDURE Do*;
    VAR
        a, i: INTEGER;
    BEGIN
        FOR i := 0 TO 2000000 DO
            a := 123;
        END;
    END Do;
   
BEGIN

END MyTime.Do
Лог:
16 миллисек
16 миллисек
15 миллисек
16 миллисек
15 миллисек

Lua for windows v5.1.4-46
http://code.google.com/p/luaforwindows/
Код:
t1 = os.time()
for i = 1, 2000000 do
    a = 123
end
print(os.time() - t1)
Лог (в секундах):
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0
>Exit code: 0


В BlackBox время замерял с помощью:
меню -> разработка -> засечь время выполнения

Как в Lua мерить миллисекундами так и не нашел.

ps машинка: HP ProBook 4520s (Core i3 M380 2.53GHz)
« Последнее редактирование: Ноябрь 07, 2012, 03:26:54 pm от ilovb »

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #82 : Ноябрь 07, 2012, 03:42:43 pm »
Как в Lua мерить миллисекундами так и не нашел.
http://stackoverflow.com/questions/463101/lua-current-time-in-milliseconds
require "socket"
print("Milliseconds: " .. socket.gettime()*1000)
Y = λf.(λx.f (x x)) (λx.f (x x))

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #83 : Ноябрь 07, 2012, 03:45:23 pm »
Я уже нашел  :) Правда немного иначе:

Цитировать
[os.clock] - gets the approximate number of seconds of CPU time used by the program. This function is implemented in terms of the ANSI C clock [1] function, and the precise meaning of this value is implementation specific. For example, on Linux, clock gives "CPU time" [2][3], which only counts the time in which the process is actively using the CPU and does not count time executing other processes or waiting for I/O. CPU time may be less than the real time ("wall clock time"). On Windows, clock counts real (wall clock) time since the start of the process [4]. On Windows and Linux, the resolution on clock is on the order of milliseconds, which is more precise than the time function, but on other systems it may be only one second resolution. The clock value will also wrap around on overflow, depending on the size of the data type used to represent clock_t. Sometimes this function is more useful than os.time for benchmarking: local clock = os.clock(); local t1 = clock(); dosomething() local dt = clock() - t1 .
http://lua-users.org/wiki/DateAndTime


Код:
t1 = os.clock()
for i = 1, 2000000 do
    a = 123
end
print(os.clock() - t1)
Лог:
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.063
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.076
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.072
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.074
>Exit code: 0
>lua -e "io.stdout:setvbuf 'no'" "Test.Lua"
0.068
>Exit code: 0

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Lua
« Ответ #84 : Ноябрь 07, 2012, 03:46:00 pm »
Никак не могу сделать в Sublime Text 2 вывод Lua в консоль.  :(
В SciTE все замечательно работает по F5, но этот редактор мне не нравится.

У него там похоже какая-то бага. Я такое тоже наблюдал - часть вывода съедается. Возможно какой-то неправильный символ в аутпуте или еще что. Но всегда можно сделать ручками (запуск процесса и вывод его аутпута).

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Lua
« Ответ #85 : Ноябрь 07, 2012, 03:51:48 pm »
Никак не могу сделать в Sublime Text 2 вывод Lua в консоль.  :(
В SciTE все замечательно работает по F5, но этот редактор мне не нравится.

У него там похоже какая-то бага. Я такое тоже наблюдал - часть вывода съедается. Возможно какой-то неправильный символ в аутпуте или еще что. Но всегда можно сделать ручками (запуск процесса и вывод его аутпута).
У sublime вообще с аутпутами беда. Вот запустил я прогу, она возьми и выдай 100 мегабайт текста (или там бесконечность - тупо зациклилось), а сублим возьми и грохнись в результате. Особенно этим грешит аддон сублимов который делает вид что он Shell.
Y = λf.(λx.f (x x)) (λx.f (x x))

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re: Lua
« Ответ #86 : Ноябрь 07, 2012, 03:54:00 pm »
Запускал по пять раз:
Тесты ни о чем.
Где вызов Lua из 1С?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Lua
« Ответ #87 : Ноябрь 07, 2012, 03:55:04 pm »
Сейчас делается так:
А = Новый Массив;
А.Добавить(1);
[/quote]

Гы! Это ж самый что ни на есть труЪ оберон-вэй ;)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #88 : Ноябрь 07, 2012, 03:59:14 pm »
Запускал по пять раз:
Тесты ни о чем.
Где вызов Lua из 1С?

А это тут причем? Я сравнивал скорость интерпретаторов 1С и Lua, ну и компилятора BB.

DIzer

  • Гость
Re: Lua
« Ответ #89 : Ноябрь 07, 2012, 03:59:54 pm »
злой вы Vlad, однако - рушите идеал "стильности" у человека  :)