Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Программирование на Lua _ Lua 5.2

Автор: Setuper 28.1.2010, 21:31

http://mydc.ru/r/?http://www.lua.org/news.html

Изменения в lua.




Изменения в api.


Автор: Jaska 28.1.2010, 21:48

Советую еще почитать не самую свежую, но тем не менее полезную http://mydc.ru/r/?http://habrahabr.ru/blogs/development/80429/ :-)

Автор: Setuper 28.1.2010, 21:57

Я уже в плагин рус хаба встроил Lua 5.2 чтобы проверить изменения big_smile.gif
За статейку спасибо.

Автор: Jaska 28.1.2010, 22:01

Отлично) кстати погляди еще http://mydc.ru/r/?http://article.gmane.org/gmane.comp.lang.lua.general/61505 мне кажется кое чего в списке нехватает, например luaL_tostring() и lua_copy()

Автор: Setuper 28.1.2010, 22:05

Эти дополнительные функции не используются пока, и как их использовать пока не известно. Поэтому ждём финального релиза big_smile.gif

Автор: Trans 28.1.2010, 22:08

Чем эта версия Луа лучше предыдущей?
Из списка изменений не очевидны преимущества (на мой непросвещённый взгляд).

Автор: Jaska 28.1.2010, 22:13

Trans не скажи, меня лично порадовало loadin (что это такое можешь почитать на хабре, ссылкой выше). Если встраивал луа в си, тогда оценишь преимущества. А так, о преимуществах можно говорить только поработав и с тем и с другим.

Setuper ну они есть в lua 5.2? Ну я так полагаю luaL_tostring() аналогична tostring() только применяется в другом.

Автор: Setuper 28.1.2010, 22:15

luaL_tostring() - это сишная функция, а не lua функция.

Автор: Trans 28.1.2010, 22:16

Понятно. Это даже не альфа..
"То, что выложено на публику даже не альфа — это просто снапшот рабочего кода. К релизу может измениться всё, что угодно." (с)

Автор: alex82 29.1.2010, 23:43

Цитата
Функции table.maxn больше нету. Если вам она необходима, напишите её на lua.

Идиотизм, чесслово. Кому она мешала?

И вообще, в чейнджлоге только и видно, что "Удалено-Переименовано", "Переименовано-Удалено". А что добавлено-то? Это больше напоминает имитацию бурной деятельности, чем разработку.

PS. Переименовывать и кромсать мы и сами могем, даже при полном незнании С/С++.

Автор: Trans 30.1.2010, 15:03

2alex82:

Хотел написать то же самое...

Автор: alex82 8.4.2013, 18:24

Уже почти полтора года прошло с момента выхода Lua 5.2, и вот наконец я добрался до тестирования сего чуда программерской мысли. И вот что я вам скажу. Дела с ним обстоят еще хуже, чем я ожидал...

Уже на этапе сборки выяснилось, что опция LUA_COMPAT_MODULE, добавляющая обратно "устаревшую" функцию luaL_register, используемую при подключении дополнительных библиотек, не работает как надо. А все потому, что функция luaL_register не может экспортироваться, ибо реализована она как макрос:

Код
#define luaL_register(L,n,l)    (luaL_openlib(L,(n),(l),0))

Слегка недоумевая, переписываем функцию по-человечески:
Код
LUALIB_API void (luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l) {
  luaL_openlib(L, libname, l, 0);
}
Теперь вроде как все в порядке, совместимость со старыми библиотеками обеспечена (за исключением тех, что используют lua_setfenv и lua_getfenv, ибо окружение функций теперь тоже устарело). Но не тут-то было. Библиотеки одна за другой отказываются подключаться, ибо не находят в lua.dll то lua_tonumber, то lua_call, то еще какую-нибудь важную функцию C API. Снова открываем lauxlib.h, в котором совсем недавно мы нашли чудо-функцию-макрос luaL_register, который по мнению разработчиков должен был экспортироваться, и медленно выпадаем в осадок:

Код
#define luaL_loadfile(L,f)    luaL_loadfilex(L,f,NULL)

Код
#define luaL_newlibtable(L,l)    \
  lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1)

#define luaL_newlib(L,l)    (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))

#define luaL_argcheck(L, cond,numarg,extramsg)    \
        ((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))
#define luaL_checkstring(L,n)    (luaL_checklstring(L, (n), NULL))
#define luaL_optstring(L,n,d)    (luaL_optlstring(L, (n), (d), NULL))
#define luaL_checkint(L,n)    ((int)luaL_checkinteger(L, (n)))
#define luaL_optint(L,n,d)    ((int)luaL_optinteger(L, (n), (d)))
#define luaL_checklong(L,n)    ((long)luaL_checkinteger(L, (n)))
#define luaL_optlong(L,n,d)    ((long)luaL_optinteger(L, (n), (d)))

#define luaL_typename(L,i)    lua_typename(L, lua_type(L,(i)))

#define luaL_dofile(L, fn) \
    (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0))

#define luaL_dostring(L, s) \
    (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0))

#define luaL_getmetatable(L,n)    (lua_getfield(L, LUA_REGISTRYINDEX, (n)))

#define luaL_opt(L,f,n,d)    (lua_isnoneornil(L,(n)) ? (d) : f(L,(n)))

#define luaL_loadbuffer(L,s,sz,n)    luaL_loadbufferx(L,s,sz,n,NULL)

И.т.д., и.т.п. Всего около двадцати функций. Важных функций, без которых не написать сколько-нибудь серьезную библиотеку.

Первым делом у меня мелькнула мысль, что я чего-то недопонимаю, но непродолжительное общение с гуглом расставило все точки над Ё - макрос есть директива препроцессору, и линковщик НИКАК не сможет экспортировать его.

P.S. Если бы я владел португальским, то спросил бы у разработчиков Lua лишь одно - зачем привлекать наркоманов к разработке такой сложной штуки, как язык программирования?

P.P.S. Давайте жить дружно, и юзать Lua 5.1 big_smile.gif

Автор: Setuper 8.4.2013, 20:15

Дааа... не хорошо.
Получается они оставили только статическую совместимость

Цитата
Here we list the incompatibilities that you may find when moving a program from Lua 5.1 to Lua 5.2. You can avoid some incompatibilities by compiling Lua with appropriate options (see file luaconf.h). However, all these compatibility options will be removed in the next version of Lua. Similarly, all features marked as deprecated in Lua 5.1 have been removed in Lua 5.2.


Кстати, при переходе с Lua 4 на Lua 5 было тоже самое, также были удалены устаревшие функции и были несовместимости.

Автор: KMV 23.4.2013, 3:04

Видимо не все в порядке в бразильском монастыре...
Хотел спросить, переход с 5.0 на 5.1 вызывает столько же геморроя ?
Или это более реально?

Автор: alex82 25.4.2013, 2:15

KMV

Если собрать Lua 5.1 с включенными опциями совместимости, то не должно быть геморроя. Это не 5.2, там нету бреда с макросами-функциями.

Автор: KMV 25.4.2013, 4:16

Цитата(alex82 @ 25.4.2013, 3:15) *
KMV

Если собрать Lua 5.1 с включенными опциями совместимости, то не должно быть геморроя. Это не 5.2, там нету бреда с макросами-функциями.

Скорее всего, lua будет системный "из коробки" как его соберут не знаю.
Интересует много ли в скриптах переписывать понадобится ?

Автор: alex82 29.4.2013, 0:05

KMV
http://mydc.ru/r/?http://www.lua.ru/doc/7.2.html

Автор: slon28 4.6.2013, 9:32

Цитата(alex82 @ 29.4.2013, 1:05) *
KMV
http://mydc.ru/r/?http://www.lua.ru/doc/7.2.html

Прошу прощения за подобный вопрос - какую литературу стоит изучить по Lua?