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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
v7lua.dll - ВК для интеграции 1С и Lua
11. Июля 2008 :: 09:36
Печать  
ВК позволяет выполнять в среде 1С код, написанный на языке Lua.
Lua считается самым быстрым из интерпретируемых языков программирования.
Примитивы, заложенные в язык, позволяют писать в стиле ООП и ФП.
Для Lua написано огромное количество библиотек (http://lua-users.org/wiki/LibrariesAndBindings)

Цитата:
По возможностям, идеологии и реализации язык ближе всего к JavaScript, однако Lua отличается более мощными и гораздо более гибкими конструкциями, спроектирован с целью «не плодить сущности сверх необходимого». Хотя Lua не содержит понятия класса и объекта в явном виде, механизмы объектно-ориентированного программирования с поддержкой прототипов (включая множественное наследование) легко реализуются с использованием метатаблиц, которые также позволяют перегрузку операций и т. п. Реализуемая модель ООП (как и в JavaScript) — прототипная

Цитата:
Как и многие интерпретируемые языки программирования, реализация Lua имеет отдельно компилятор с исходного языка в исполняемый байт-код и виртуальную машину для исполнения сгенерированного байт-кода. Причём байт-код — это не команды стековой машины, а команды некоего виртуального процессора с несколькими регистрами, что повышает эффективность исполнения. В стандартной виртуальной машине Lua используется распределение памяти со сборкой мусора (аналогично Java или .NET).
Для задач критичных по времени имеется JIT компилятор Lua LuaJIT.


ВК включает в себя библиотеки LPeg и LuaCOM

ВК Реализует один объект LuaRef.
LuaRef инкапсулирует виртуальную машину Lua.
Объект не имеет собственных свойств и методов, а предоставляет доступ к глобальным переменным и функциям Lua.
Возможна передача агрегатных типов 1с как аргументов для Lua-функций и значений для свойств.
Возможен вызов методов и доступ к свойствам агрегатных типов 1с из Lua.
При создании ВМ загружаются все стандартные библиотеки и переопределяются следующие глобальные функции:
  • print - выводит текст в окно сообщений 1С.
  • dofile - работает согласно документации, но переделана для запуска в безопасной среде
  • dostring - выполняет код в переданной строке
  • create1sobject - аналог ф-и СоздатьОбъект встроенного языка 1с

При доступе к свойствам и вызове функций из 1С, выполняются преобразования типов Lua в типы 1С:
  • числа преобразуются в числа
  • строки преобразуются в строки
  • таблицы преобразуются в объекты LuaRef. При этом значения таблиц типа "функция" становятся методами, а все остальные - свойствами.

ВК не требует регистрации в реестре.
Скачать ВК можно тут: http://code.google.com/p/v7lua/

Версия 1.0.1.0:
  • добавлена работа с типами 1С (вызов методов и установка свойств объектов 1С из скрипта)


Версия 1.0.1.1:
  • багфиксы


Версия 1.0.1.2:
  • разрешено использование русских идентификаторов
  • исправлен вылет при вызове функций Lua из других ВК.
  • реализовано чтение/установка свойств и вызов методов групповых контекстов


Версия 1.0.1.3:
  • исправлено поведение ф-и print (выводился только последний аргумент)
  • добавлена ф-я create1sobject - аналог ф-и СоздатьОбъект встроенного языка 1с.
  • изменено сообщение вызывающему коду количества параметров ф-й:
    теперь при вызове GetNParams возвращается количество параметров, полученное ранее в вызове IsOleContext из регистра ebx или 0


Версия 1.0.2.0:
  • minor bugfixes
  • в компоненту включены библиотеки LPeg и LuaCOM
  • COM-объекты теперь передаются из 1с в Lua через LuaCOM, минуя CValue, CBLContext и т.п.

« Последняя редакция: 24. Июля 2008 :: 08:50 - steban »  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #1 - 11. Июля 2008 :: 09:39
Печать  
А что в курилке? Репозиторий вроде получшее место будет Улыбка


Браво, Степ! Сейчас пощупаем!
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #2 - 11. Июля 2008 :: 09:41
Печать  
О_о.
Улыбка
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #3 - 11. Июля 2008 :: 09:46
Печать  
Степан, ты издеваешься.
Еще и lua придется изучать?
Чума. ;)

P.S.
Даешь heroes6 для 1С предприятия 7.7 версия для SQL  ;D
  

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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #4 - 11. Июля 2008 :: 09:46
Печать  
Провел небольшой тест на производительность:
Некоторая таблица из 15000 строк загружалась в ТЗ из базы SQLite и сортировалась по одной колонке методом ТЗ "Сортировать".
Эта же самая таблица загружалась в таблицу Lua и сортировалась по той-же колонке.
Цитата:
luaopen_lsqlite3 = package.loadlib ("lsqlite3.dll", "luaopen_lsqlite3")
luaopen_lsqlite3()
local sano = require 'sano'

tt=os.clock()

db=sqlite3.open('sampledata.db')

Vector = sano.Vector
ordering = sano.ordering
vec = Vector:new()

function showrow(udata,cols,values,names)
 
vec:add({values[1], values[2], values[3], values[4] } )
 
return 0
end
db:exec("SELECT * FROM tmp",showrow,'test_udata')

print(os.clock()-tt)

tt=os.clock()
vec:sort(ordering.byKey(2))
print(os.clock()-tt)

Сортировка в Lua в несколько раз (~7-8) проигрывает встроенной сортировке ТЗ, но при этом сравнивающая функция написана на Lua(т.е. можно осуществлять весьма причудливые сортировки). Тест, конечно, не очень корректен и позволяет судить о производительности интерпретатора весьма косвенно.
« Последняя редакция: 11. Июля 2008 :: 22:10 - 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
Ответ #5 - 11. Июля 2008 :: 09:48
Печать  
Arta писал(а) 11. Июля 2008 :: 09:39:
А что в курилке? Репозиторий вроде получшее место будет Улыбка

Статус беты, и версия еще не присвоена Улыбка
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #6 - 11. Июля 2008 :: 09:50
Печать  
А хде и как энто применить можно, если вк создали значит применение какое то уже точно было, что с её помощью удобнее делать в среде 1с ?
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #7 - 11. Июля 2008 :: 09:51
Печать  
[quote author=kms link=1215769064/0#3 date=1215769575]Степан, ты издеваешься.
Еще и lua придется изучать?
Чума. ;)[/quote]
мне всегда не хватало конструкций типа map или grep из perl'а, не хватало анонимных функций.
Да вообще много еще чего не хватало.
Lua позволит мне писать в стиле, который мне нравится ;)
  

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
Ответ #8 - 11. Июля 2008 :: 09:57
Печать  
ev-kov писал(а) 11. Июля 2008 :: 09:50:
А хде и как энто применить можно

Ну вот тут, человек жаловался на скорость работы интерпретатора 1С. В итоге выкатил вот такую штуку, где критичные участки кода написаны на VBS.

ev-kov писал(а) 11. Июля 2008 :: 09:50:
если вк создали значит применение какое то уже точно было

Пока еще не было.
Я сам еще до конца не осознаю, какие возможности открываются Улыбка
Ну что еще...
Кодирование/декодирование base64 на Lua делается очень быстро.
Почитай еще, какие дополнения к Lua существуют по этой ссылке: http://lua-users.org/wiki/LibrariesAndBindings
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #9 - 11. Июля 2008 :: 10:01
Печать  
А методы то какие-нибудь ещё есть?
Как работать с объектами 1с?
Простенький пример можно?
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #10 - 11. Июля 2008 :: 10:10
Печать  
Nick писал(а) 11. Июля 2008 :: 10:01:
А методы то какие-нибудь ещё есть?
нету. Можно добавлять собственные глобальные функции. Чтобы потом их вызвать из 1С нужно выполнить код вроде такого:
Код
Выбрать все
Луа=Луа._G 


При этом перечитается таблица глобальных объектов.
Nick писал(а) 11. Июля 2008 :: 10:01:
Как работать с объектами 1с?
Простенький пример можно?

Я пока думаю, как реализовать передачу объектов 1С в скрипты, и нужно ли это вообще.
  

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


Эх, дайте что-нибудь новенькое
да полезное потести

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

Вот молодец, сделал-таки Улыбка
Пощупаем.

ЗЫ А исходниками поделишься? Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #12 - 11. Июля 2008 :: 10:15
Печать  
artbear писал(а) 11. Июля 2008 :: 10:11:
А исходниками поделишься? Улыбка

Пока не буду.
  

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
Ответ #13 - 11. Июля 2008 :: 10:20
Печать  
Я вот еще не могу придумать задачу, чтобы сравнить производительность интерпретаторов Lua и 1с. Все как-то вырождается в сравнение скорости выполнения математических или строковых операций Улыбка.
Есть какие-нибудь классические тесты для интерпретаторов?
  

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



Сообщений: 1570
Зарегистрирован: 19. Мая 2006
Re: v7lua.dll - ВК для интеграции 1С и Lua
Ответ #14 - 11. Июля 2008 :: 10:26
Печать  
to steban
Раз тема в курилке, подьезжай в выходные в "Масяню".
Сегодня вечером туда заеду.
Изопьем. Обсудим интерфейсы.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 ... 8
ОтправитьПечать