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

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #105 : Ноябрь 09, 2012, 08:02:56 am »
afxLua - MS Windows API Library

Цитировать
afxLua is an add-on library for Lua on MS Windows System that has this functionality File Management, Manipulate Registry, Console IO function, Windows Manipulation, Mouse Emulation, Clipboard, Dll function loader, System Information & Many more ...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #106 : Ноябрь 09, 2012, 09:23:16 am »

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #107 : Ноябрь 09, 2012, 11:01:35 am »

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #108 : Ноябрь 09, 2012, 08:53:49 pm »
Язык программирования Lua. Учебник для начинающих

Цитировать
Введение


Основным мотивом для написания этого текста стало отстутствие на просторах интернета какого-либо внятного учебника по Lua, для чайников и не только, причем на русском языке. Документация на русском есть, а с чего начать - непонятно. Есть хорошая книжка - "Programming in Lua" (причем нужно именно 2-е издание), но ее почему-то даже в электронном виде нигде нет. Мне удалось найти только препринт 1-го издания, и разумеется на английском. После двухгодичной разработки скриптов для хабов на Lua стало ясно, что уж "для чайников" я и сам руководство сделаю. Через некоторое время после осознания этого факта появился черновик, который долгое время оставался совсем убогим и кратким, и вот только сейчас он становится похож на учебник. Отмечу также, что на просторах интернета много различных статей вида "как на Lua сделать что-то эдакое", но полного подробного учебника пока что не наблюдается. Либо встречаются руководства для продвинутых, которые уже что-то знают и хотят "расшИрить и углУбить" (с) свои знания. Итак, приступим-с...

DIzer

  • Гость
Re: Lua
« Ответ #109 : Ноябрь 11, 2012, 10:13:59 am »
  1

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #110 : Ноябрь 11, 2012, 11:15:10 am »
Попробовал замутить ООП:  :)
function new(class, subclass)
    local subclass = subclass or {}
    setmetatable(subclass, class)
    class.__index = class
    return subclass
end

function instanceof(object, class)   
    local mt = getmetatable(object)
    while mt ~= nil do
        if mt.__index == class then
            return true
        end
        mt = getmetatable(mt.__index)
    end
    return false
end
--------------------------------------------------------------

-- определяем класс
A = {
    field1 = 0, -- поле со значением по умолчанию
    get1 = function(self) -- метод
        return self.field1
    end
}

-- определяем расширение A
B = new(A, {
    field2 = 0, -- новое поле
    get2 = function(self) -- новый метод
        return self.field2
    end
})

-- определяем расширение B
C = new(B, {
    field3 = 0, -- новое поле
    get2 = function(self) -- переопределяем метод
        return self.field3
    end
})

-- тестируем

a = new(A)
b = new(B)
c = new(C)

-- значения по умолчанию
print("a.field1", a.field1)
print("b.field1", b.field1)
print("b.field2", b.field2)
print("c.field1", c.field1)
print("c.field2", c.field2)
print("c.field3", c.field3)

a.field1 = 1
b.field1 = 2
c.field1 = 3
c.field3 = 4

print("a:get1()", a:get1())
print("b:get1()", b:get1())
print("b:get2()", b:get2())
print("c:get1()", c:get1())
print("c:get2()", c:get2())

print("instanceof(a, A)", instanceof(a, A))
print("instanceof(b, A)", instanceof(b, A))
print("instanceof(c, A)", instanceof(c, A))
print("instanceof(a, C)", instanceof(a, C))

--Log:
--[[
a.field1    0
b.field1    0
b.field2    0
c.field1    0
c.field2    0
c.field3    0
a:get1()    1
b:get1()    2
b:get2()    0
c:get1()    3
c:get2()    4
instanceof(a, A)    true
instanceof(b, A)    true
instanceof(c, A)    true
instanceof(a, C)    false
--]]

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Lua
« Ответ #111 : Ноябрь 12, 2012, 01:23:08 pm »
Одни строковые многострочные литералы чего стоят (попробуйте ка написать лексер).
А что сложного то? Тупо сканируешь до соответствующей скобки.

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Lua
« Ответ #112 : Ноябрь 12, 2012, 06:19:41 pm »
Я разочаровался в скриптовых языках до предела. Написал на PHP сканер текста, буферный построитель строк, лексический анализатор для 1С и модуль подсветки. Сделал первый шаблон раскраски по примеру Sublime Text2: Monokai. И что вы думаете? Код на 1С, объёмом 5667 байт красится...0.7 секунд. Занавес.

Причина, как выяснилось сегодня, довольно банальна. Ну нет в PHP человеческих массивов и символов. Есть только упорядоченные словари и строки. Функция count, возвращающая число элементов словаря,  как ни странно, но медленная. Функции ord и chr тоже. Изменение символа в строке очень дорогая операция. Теперь понимаю, почему форумные движки предпочитают монструозные циклические очистки и регулярки. Сам PHP (Ruby, вставьте своё) крайне медленный, а вот оптимизированные функции на Си обладают скоростью, которая сглаживает общее впечатление. Только начинка-то остаётся.

Готовый пример
Демо для скармливания 1С кода

P.S. В демо остался ошибочный замер времени, не обращайте внимания.

DIzer

  • Гость
Re: Lua
« Ответ #113 : Ноябрь 12, 2012, 06:29:41 pm »
Тык у вас раскраска, а не  подсветка..

DIzer

  • Гость
Re: Lua
« Ответ #114 : Ноябрь 12, 2012, 06:38:27 pm »
а вот у http://pascalabc.net/WDE/  - подсветка (жабоскриптовая)...

DIzer

  • Гость
Re: Lua
« Ответ #115 : Ноябрь 12, 2012, 07:02:33 pm »
Далее...
Я разочаровался в скриптовых языках до предела. Написал на PHP сканер текста, буферный построитель строк, лексический анализатор для 1С и модуль подсветки. Сделал первый шаблон раскраски по примеру Sublime Text2: Monokai. И что вы думаете? Код на 1С, объёмом 5667 байт красится...0.7 секунд. Занавес.


если вы  попробуете запустить на таких обьемах текста  скажем модуль подсветки С. Губанова (ББ , слепленный по "классической" схеме)  - на вполне высокопроизводительном компилируепмом ЯП (КП)  - то производительность ее (подсветки) , вас НЕПРИЯТНО удивит (как удивила меня в свое время...)  ;) - так что  не торопитесь делать выводы...

DIzer

  • Гость
Re: Lua
« Ответ #116 : Ноябрь 12, 2012, 07:09:59 pm »
ЗЫ конечно я рассматриваю код в несколько тысяч строк... - 5 килобайт - это 200 -400 строк.. фигня  даже для PABCовой  подсветки...

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Lua
« Ответ #117 : Ноябрь 12, 2012, 07:18:52 pm »
Для 1С есть динамическая раскраска (подсветка), но глючная и на регулярках.
P.S.  По указанной ссылке раскраска на мой взгляд довольно примитивная и на трёхсотстрочном коде заметны тормоза перерисовки.

Цитировать
если вы  попробуете запустить на таких обьемах текста  скажем модуль подсветки С. Губанова (ББ , слепленный по "классической" схеме)  - на вполне высокопроизводительном компилируепмом ЯП (КП)  - то производительность ее (подсветки) , вас НЕПРИЯТНО удивит (как удивила меня в свое время...)   - так что  не торопитесь делать выводы...
Можно понять сложности, вызванные обновлением DOM или GUI. Тяжело понять сложности, когда генерируешь статичный html. Тут в пример можно привести Delphi, в миг собирающий проекты среднего размера.

DIzer

  • Гость
Re: Lua
« Ответ #118 : Ноябрь 12, 2012, 07:25:27 pm »

P.S.  По указанной ссылке раскраска на мой взгляд довольно примитивная и на трёхсотстрочном коде заметны тормоза перерисовки.
- тык  она и делалась (в лучшем случае, а в худшем адаптировалась) студентамми.... (я намекаю  на то, что без  оптимизаций  на больших обьемах кода вы нормальную производительность не получите, даже в компилируемых языках)

Цитировать
Можно понять сложности, вызванные обновлением DOM или GUI. Тяжело понять сложности, когда генерируешь статичный html. Тут в пример можно привести Delphi, в миг собирающий проекты среднего размера.
  ... как сказать... я вот например, не смог понять почему  большой модуль в исходниках ББ (5-10 т. строк... точно не помню) СТАТИЧЕСКИ раскрашивался (не подсвечивался!!!) у Сергея пару секунд...

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Lua
« Ответ #119 : Ноябрь 12, 2012, 07:37:39 pm »
Чет у меня это демо вот так красит:   ???
http://imglink.ru/show-image.php?id=aa2ef05033e46bb4486b240f1a00435d