[Logo] LUA Форум
  [Search] Search   [Recent Topics] Recent Topics   [Hottest Topics] Hottest Topics   [Members]  Member Listing   [Groups] Back to home page 
[Register] Register / 
[Login] Login 
Messages posted by: z00n
Forum Index » Profile for z00n » Messages posted by z00n
Author Message
Операторы или не операторы - это чистая условность. Для инфиксных и префиксных операторов приоритеты описаны отдельно, поскольку они (приоритеты и ассоциативность) не отражены в грамматике.

А так, '.' и '[]' имеют одинаковый приоритет, выше, чем приоритет любого префиксного или инфиксного оператора, и левую ассоциативность.
А чего вы ожидали и причем тут lua?
stayer wrote:
А почему так не надо делать?

C большой вероятностью расходы на преобразование из формата в формат будут больше расходов на собственно обработку. Поэтому, если данные обрабатываются преимущественно на стороне луа, то и хранить их лучше на стороне луа в таблице и запрашивать их со стороны С++ в уже обработанном виде по мере необходимости.
Конечно, бывают ситуации (например не вы написали с++ часть) когда преобразования приходится делать.
stayer wrote:
В общем предыстория - есть у меня, например мапа из 1000 элементов - <ID, State>;
Я хочу передеать в луашный скрипт эту самую мапу, ее там обработать и вернуть ее измененную в вызывающую программу.


Вы должны написать на С++ функции обработки map и обернуть их в луа-функции (http://www.lua.org/pil/26.html).

Ваш вопрос звучит так, как-будто вам хочется сделать преобразование:
с++-map ---> lua-table ---> processing ---> с++-map

... не нужно так делать. Но если вы отдаете себе отчет - PIL, глава 25 (http://www.lua.org/pil/25.1.html).
lexa wrote:
Вопросы.

1. В чём разница между GCC, BCC (компилятор "Борланда", вроде), cl (компилятора VS?) и прочими?
2. make mingw создаёт три файла: lua.exe, luac.exe и lua*.dll. А VS ещё какие-то lua*.exp и lua*.lib. Чё это такое?
3. Разный размер у lua*.dll. GCC создаёт файл в 154 КБ, а VC - 120 КБ, плюс 25 КБ lib-файл и 15 - lib. Чё это такое? luac.exe, кстати, по размеру тоже разные.


1. GCC и MSVC - очень хорошие, современные, оптимизирующие компиляторы. Остальные хуже, но у них могут быть свои фишки, например, tcc в сто раз быстрее компилирует и.т.д.
Под Win главная разница в версии С-шного рантайма (msvcrt.dll, msvcr71.dll, msvcr80.dll, msvcr90.dll). Mingw всегда линкует с msvcrt.dll, которая из коробки есть во всех версиях windows, начиная с самых древних. Студия линкуется с рантаймом соответствующим своей версии: msvs 60 -> msvcrt.dll ... msvs 2005 -> msvcr80.dll и.т.д. Это неудобно, т.к. шестой студией давно никто не пользуется, а быть уверенным в том, что на произвольной машине есть рантайм сташих версий нельзя (поэтому всякие 3DS MAX при инсталяции ставят вам "Microsoft Visual C++ 2005 Redistributable Package (x86)").
Если вы линкуете луа статически к своему приложению - вам все это пофиг.

2. lua*.exp и lua*.lib (не путать со статической либой) дополнительные "заголовочные" файлы для dll. Exp можно просто выкинуть, а lib использовать в командной строке cl.exe, когда нужно прилинковать что-то к dll.

3. По поводу размера dll - тут была старая тема: http://www.lua.ru/forum/posts/list/55.page - вкратце, на производительность это точно не влияет.

> Возможно, глупости всякие спрашиваю, но просто знать хочется. Может даже есть чего почитать.
Если читаете по английски, рекомендую "An Introduction to GCC" by Brian Gough - тонкая(124 стр.) и по делу.

lexa wrote:
z00n wrote:Настоящую свободу дает Lisp

К Lisp я два подхода делал, не вышло пока познакомится нормально. Пугает меня этот язык. :)


По моему - это самый простой язык на свете, особенно если начинать со Scheme :)

lexa wrote:
z00n wrote:А в любом современном статически типизированном языке (Haskell, Ocaml, SML, Scala etc.) вы можете переопределять операторы.


Не, операторы я привёл как пример немного странной логики PHP. === это == со сравнением типов. Например, в Lua число 2 не равно строке с содержанием 2. В PHP они равны.


Я имел в виду, что в вышеприведенных языках такой оператор со странной логикой легко добавить. Допустим возьмем Scala (www.scala-lang.org), а новый оператор для простоты, наоборот, назовем "===":


Загружаем и смотрим:


Вам ведь примерно этого и хотелось: импортировал модуль - изменил логику сравнений?


lexa wrote:
z00n, вы будете смеяться. :) Я - пхпшник. Для меня игра типов это песня. Сон, который я осознаю и контролирую. Понимаю, многие предпочитающие иные языки не понимают той свободы, которую даёт PHP. Осуждают факт, что false + 1 == 1 (т.е. 0 + 1), а не ошибка. Да что там. Они не понимают для чего есть операторы == и ===, ведь == должно хватить. :)


Настоящую свободу дает Lisp. А в любом современном статически типизированном языке (Haskell, Ocaml, SML, Scala etc.) вы можете переопределять операторы.


lexa wrote:


Очень просто. Не нарушает код модулей на самой Lua, ведь они написаны с учётом типов. Но в своём коде можно это игнорировать.
Рядышком в топике мне подсказали, как можно навешать метатаблицы к готовым типам данных. И все данные идут через моё описание ('' + 1 = 1, true + 1 = 2 и т.д.).
Но вот как залезть в глубины, изменить их и не компилировать свой версии интерпретатора - вопрос.


Никак, вам придется перекомпилировать интерпретатор. Но есть неплохой шанс на то, что изменение, подобное вашему, войдет в lua 5.2 (которая не за горами):
http://article.gmane.org/gmane.comp.lang.lua.general/63208
lexa wrote:Привет.
Есть у нас Lua. Оригинальный (для винды). Есть исходники. Я кое-что под себя поправил (логику функций luaV_lessthan() lessequal()) и не понимаю, как бы мне эти изменения внести так, чтобы не пришлось пользоваться отдельно скомпилированной версией Lua.


Хорошего решения тут нет.

Предлагаю зайти с другой стороны - напишите, зачем вам понадобилось исправлять логику luaV_lessthan - а мы подумаем как это обойти.
lexa wrote: А почему debug разрешает так делать?

Правильнее, наверное, без дебуга, а использовать метатаблицу, которая есть у 'string' с раздачи:


DeKaDO wrote:Lua 5.1
Вылетает. Ошибка "An exception has been caught: No such operator defined"
zpp.lua:134 ("return Doc{tag='Text';tostring(_u60)}")


Спасибо за сообщение, но, к сожалению, я не могу это воспроизвести.
Судя по формату ошибки это luabind - и я не понимаю, что ему тут не нравится - вызов tostring?

Было бы замечательно, если бы вы прислали мне по почте минимальный проект с ошибкой: andrew_zhiln@yahoo.com
smz wrote:Я бы тоже использовал "if - else" решение для такой задачи. Но разве вы считаете, что lrexlib здесь не подойдёт


Нет, не считаю. Тем более об lrexlib писали выше.


Или использовать LPEG, модуль re.
http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html
Положил новую версию на http://github.com/zoon/luapp

Компилятор hluac.jar (и все что нужно для его работы, кроме Java) тоже лежит в директории lib/.

Скомпилированные .lua файлы (кому лень собирать) - http://cloud.github.com/downloads/zoon/luapp/luapp51-0.7.zip

Будут вопросы - спрашивайте.
edo wrote:вот нашёл в тему:
http://lua-users.org/lists/lua-l/2009-02/msg00437.html
сериализация в простенький бинарный формат (и обратная загрузка в lua), создавалось как раз для целей RPC.
если почитать ветку обсуждения - там ещё предлагают сериализовать в байткод lua, вот пример:
http://lua-users.org/wiki/EngramProposal


C помощью Pluto (http://lua-users.org/wiki/PlutoLibrary) вы можете сериализовать в строку практически все, что угодно, включая функции и корутины.
Стандартные либы есть, то тут они явно чересчур.
Ммм... В смысле писанные на самой lua? это на luaforge искать? Просто интересно.

Например LOOP: http://loop.luaforge.net/
Искать на luaforge, через http://luarocks.luaforge.net/rocks/, спрашивать в майллисте.
Можно еше тут посмтреть: http://lua-users.org/wiki/SampleCode
 
Forum Index » Profile for z00n » Messages posted by z00n
Go to:   
Powered by JForum 2.1.9 © JForum Team