Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 8 ОтправитьПечать
Очень популярная тема (более 25 ответов) v7lua.dll - ВК для интеграции 1С и Lua (число прочтений - 36215 )
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #30 - 11. Июля 2008 :: 19:37
Печать  
tt=os.clock() 
t={}
for i=1,20000 do
 
t[i]=i
end
s=table.concat(t,",\r\n")
print(os.clock()-tt)

Время выполнения = 47 мс.

Вывод банален - для каждой задачи следует выбирать наиболее подходящий для ее решения инструмент.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #31 - 11. Июля 2008 :: 20:10
Печать  
Увеличил количество итераций до 1 миллиона.
1С - ждал 10 минут. дождаться не смог. прервал.
JS,VBS - многократно нажимал "Continue" в диалоговом окне MSScriptControl о зависшем скрипте. прервал.
Lua - 3.2 сек

Вывод тот-же.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #32 - 11. Июля 2008 :: 20:44
Печать  
JS можно оптимизировать по такому-же принципу.
Цитата:
t=new Array();
for(
i=0;i<1000000;i++)
 
t[i]=i;
s=t.join(",\r\n");
время выполнения = 4с
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #33 - 11. Июля 2008 :: 21:11
Печать  
[quote author=steban link=1215769064/30#30 date=1215805050]Вывод банален - для каждой задачи следует выбирать наиболее подходящий для ее решения инструмент.[/quote]
Вывод - что ты решил [i]разные[/i] задачи.
Но как счастливый человек этого не заметил.

Степ, прости мой сарказм. ;)
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #34 - 11. Июля 2008 :: 21:30
Печать  
[quote author=kms link=1215769064/30#33 date=1215810685]Вывод - что ты решил [i]разные[/i] задачи.
Но как счастливый человек этого не заметил.[/quote]Они стали разными из-за существующих в некоторых языках (1С и VBS) ограничений.

[quote author=kms link=1215769064/30#33 date=1215810685]Степ, прости мой сарказм. ;)[/quote]
Ой ё.
А это был сарказм? :)
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #35 - 11. Июля 2008 :: 22:45
Печать  
Не знаю :) Возможно это было просто ой ё :)
--
Я вот пытаюсь понять применимость Lua к нашей реальности.

Предположим, я хочу использовать Lua для написания быстрых вспомогательных скриптов.
Ну, допустим, я сортирую массив.
При этом мне нужен некий функтор для сравнения - его я хочу написать на Lua (в надежде, что он будет работать быстрее, чем функтор на 1С).

Далее, массив у меня написан не на 1С, а на С++.
Т.е. из С++ я вызываю некий диспетчер скриптов передавая ему два CValue, он выполняет заданный скрипт и возвращает, допустим, число на выходе.

Будет ли такая схема реализуема с помощью v7lua?
Конечно, возможность использования контекстов из Lua также весьма привлекательна.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #36 - 13. Июля 2008 :: 18:25
Печать  
добавлена работа с типами 1С (вызов методов, получение и установка свойств объектов 1С из скрипта).
Присвоен номер версии 1.0.1.0

Качать в первом посте.
« Последняя редакция: 14. Июля 2008 :: 10:27 - steban »  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #37 - 14. Июля 2008 :: 08:01
Печать  
[quote author=kms link=1215769064/30#35 date=1215816315]Предположим, я хочу использовать Lua для написания быстрых вспомогательных скриптов.
Ну, допустим, я сортирую массив.
При этом мне нужен некий функтор для сравнения - его я хочу написать на Lua (в надежде, что он будет работать быстрее, чем функтор на 1С).

Далее, массив у меня написан не на 1С, а на С++.
Т.е. из С++ я вызываю некий диспетчер скриптов передавая ему два CValue, он выполняет заданный скрипт и возвращает, допустим, число на выходе.

Будет ли такая схема реализуема с помощью v7lua?[/quote]
А может проще этот самый массив (или другой контейнер с нужными свойствами) описать на Lua и обложить необходимыми методами, чтобы вызывать из 1с?

[quote author=kms link=1215769064/30#35 date=1215816315]Конечно, возможность использования контекстов из Lua также весьма привлекательна.[/quote]
Уже реализовано.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #38 - 14. Июля 2008 :: 08:03
Печать  
[quote author=kms link=1215769064/30#35 date=1215816315]Т.е. из С++ я вызываю некий диспетчер скриптов передавая ему два CValue, он выполняет заданный скрипт и возвращает, допустим, число на выходе.[/quote]
А связка Контекст + НазваниеМетода в качестве такого делегата не подойдет?
Тогда можно будет описывать такие делегаты в виде КОП или Lua-класса или просто функцией в текущем модуле.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #39 - 14. Июля 2008 :: 08:09
Печать  
[quote author=steban link=1215769064/30#37 date=1216022493]
А может проще этот самый массив (или другой контейнер с нужными свойствами) описать на Lua и обложить необходимыми методами, чтобы вызывать из 1с?
[/quote]
Дык ИТ - она уже есть, к примеру.

[quote]
Уже реализовано.[/quote]
Знаю, это я типа поддержал тебя, ты же раньше писал "думаю, надо ли оно".

ОК.
Упростим задачу

[code]
function vector()
  return {
  load = function(v,it)
    ncols=it.ColumnCount()
    for i=1,ncols do
    v[i]=it.GetValue('',i)
    end
  end ,
  get=function(v,i)
    return v[i]
  end
}
[/code]
Правильно я понимаю, что теперь можно создавать объекты луа, которые будут предоставлять 1С свои методы и свойства?
Я могу уже с помощью v7lua писать простые "классы"?

Если да, то дай, плз, пример кода, как это сделать.
А то из вектора пока не особо понятно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #40 - 14. Июля 2008 :: 08:10
Печать  
[quote author=steban link=1215769064/30#38 date=1216022629][quote author=kms link=1215769064/30#35 date=1215816315]Т.е. из С++ я вызываю некий диспетчер скриптов передавая ему два CValue, он выполняет заданный скрипт и возвращает, допустим, число на выходе.[/quote]
А связка Контекст + НазваниеМетода в качестве такого делегата не подойдет?
Тогда можно будет описывать такие делегаты в виде КОП или Lua-класса или просто функцией в текущем модуле.[/quote]
Вот-вот, я к этому пока и свел в предыдущем посте.
Надо затестировать - может это то, что нужно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #41 - 14. Июля 2008 :: 08:17
Печать  
[quote author=kms link=1215769064/30#39 date=1216022980]Правильно я понимаю, что теперь можно создавать объекты луа, которые будут предоставлять 1С свои методы и свойства?
Я могу уже с помощью v7lua писать простые "классы"?[/quote]
Да.
Сейчас набросаю пример.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #42 - 14. Июля 2008 :: 09:58
Печать  
[quote author=steban link=1215769064/30#41 date=1216023469]Сейчас набросаю пример.[/quote][code]Перем Луа;

Процедура Сформировать()
     Стек=Луа.stack();
     Н=СоздатьОбъект("Справочник.Номенклатура");
     Н.ВыбратьЭлементы();
     Пока Н.ПолучитьЭлемент()=1 Цикл
           Стек.push(Стек,Н.Наименование);
     КонецЦикла;
     Пока Стек.onbottom(Стек)<>1 Цикл
           А=Стек.pop(Стек);
           Сообщить(А      );
     КонецЦикла;
КонецПроцедуры

Процедура ПриОткрытии()
     ЗагрузитьВнешнююКомпоненту("v7lua.dll");
     Луа=СоздатьОбъект("LuaRef");
     Луа.dostring("
     |function stack() --это по-сути конструктор
     |      return {      --класс представляем в виде таблицы
     |      top = 0,      --член класса
     |      push = function(s,v) --значение типа ""функция"" в таблице = метод класса
     |            s.top=s.top+1
     |            s[s.top]=v
     |      end,
     |      pop = function(s)
     |            top=math.max(s.top,0)
     |            s.top=top-1
     |            return s[top]
     |      end,
     |      onbottom = function(s)
     |            if s.top==0 then return 1
     |            else return 0 end
     |      end
     |      }
     |end
     |");
     Луа=Луа._G; //Нужно чтобы перечиталась таблица глобальных объектов
КонецПроцедуры[/code]
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #43 - 14. Июля 2008 :: 10:28
Печать  
steban писал(а) 13. Июля 2008 :: 18:25:
добавлена работа с типами 1С (вызов методов, получение и установка свойств объектов 1С из скрипта)

Обнаружил в этой части парочку багов.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #44 - 14. Июля 2008 :: 18:05
Печать  
Спасибо за пример.
Передача себя в виде параметра неизбежна?
--
Попробовал сделать функтор на Lua - получилось быстрее, чем ВМ, раза в полтора.
Я надеялся, что будет больше.
--
Lua надо научить выбрасывать и ловить исключения.
А вот функторы, которые не имеют спецификации throw() меня напротив, напрягают.
Впрочем, они работают, хотя архитектура, построенная на CallAsFunction(), плохая.
С другой стороны, она универсальна, да и другой все равно нет.
--
Какую-то странную проблему поймал.
При определенных обстоятельствах v7lua падает в тесте.
Не знаю, в чем причина.
В обработке есть строка, которую если закомментарить - падать перестанет.
Надеюсь, удастся разобраться.
Если что, код icpp для этого теста (исходник сборки) залит в CVS.
  

icpp_lua.rar ( 432 KB | Загрузки )

De quelle planète es-tu?
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 [3] 4 5 ... 8
ОтправитьПечать