| 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
Будут вопросы - спрашивайте.
|
 |
|
|
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
|
 |
|
|