[Logo]
LUA Форум
  [Search] Поиск   [Recent Topics] Последние темы   [Hottest Topics] Горячие темы   [Members]  Список участников   [Groups] На главную страницу 
[Register] Регистрация / 
[Login] Вход 
Замена (подмена) стандартных функций парсера  XML
Индекс форума » LUA: Общие вопросы
Автор Сообщение
lexa
Новичок
[Avatar]

Зарегистрирован: 09/02/2010 15:48:09
Сообщений: 17
Оффлайн

Привет.

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

Есть у нас Lua. Оригинальный (для винды). Есть исходники. Я кое-что под себя поправил (логику функций luaV_lessthan() lessequal()) и не понимаю, как бы мне эти изменения внести так, чтобы не пришлось пользоваться отдельно скомпилированной версией Lua.

Не понятно, да? :)

На примере Lua. Я осознаю разницу между интерпретируемым и компилируемым языками, пример просто отображает логику.

Файлы file1.lua и file2.lua содержат функции test(). Одна из функций будет перебита другой в зависимости от иерархии вызова файлов.

Вот я этого хочу, чтобы созданный сишный модуль для Lua перебивал функции самой Lua.

Можно так? Или вопрос маразматичный сам по себе (в контексте компилируемых языков)? :)

Признанный мастер чинпоко, а-ай ^_^
[WWW]
XNut
Постоянный посетитель
[Avatar]

Зарегистрирован: 15/04/2008 12:12:47
Сообщений: 99
От: Россия, Липецк
Оффлайн

Сделайте сравнение через метатаблицы
z00n
Постоянный посетитель

Зарегистрирован: 15/02/2008 12:15:56
Сообщений: 96
Оффлайн

lexa wrote:Привет.
Есть у нас Lua. Оригинальный (для винды). Есть исходники. Я кое-что под себя поправил (логику функций luaV_lessthan() lessequal()) и не понимаю, как бы мне эти изменения внести так, чтобы не пришлось пользоваться отдельно скомпилированной версией Lua.


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

Предлагаю зайти с другой стороны - напишите, зачем вам понадобилось исправлять логику luaV_lessthan - а мы подумаем как это обойти.
lexa
Новичок
[Avatar]

Зарегистрирован: 09/02/2010 15:48:09
Сообщений: 17
Оффлайн

XNut, __lt(), и __le() не вызываются, если метатаблицы не совпадают. А они не совпадают... точнее, они совпадают только, когда сравниваемые типы идентичны.

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

Но мне PHP этим очень нравится. Да, надо постичь логику языка, его поведение, его идею. Но это ведь не делает язык плохим. Сишники, наприаер, рулят памятью и ошибка 500 при написании программ для веба их любимая ошибка. :) Людям предпочитающим языки повыше это не понять.

Я же хочу настроить Lua под себя - под похапешника. Поэтому думаю, что вы будете смеяться.

Есть файл lvm.c, в нём функции вызываемые при использовании оператором < и <= в Lua. Так как они почти похожи, то приведу пример функции для оператора < (less than - меньше, чем). Оператор > обрабатывается так же через эту функцию, только аргументы идут в обратном порядке.

Я замнил это


этим


Очень просто. Не нарушает код модулей на самой Lua, ведь они написаны с учётом типов. Но в своём коде можно это игнорировать.

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

Но вот как залезть в глубины, изменить их и не компилировать свой версии интерпретатора - вопрос.

Вооот. :)

Признанный мастер чинпоко, а-ай ^_^
[WWW]
z00n
Постоянный посетитель

Зарегистрирован: 15/02/2008 12:15:56
Сообщений: 96
Оффлайн

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
Новичок
[Avatar]

Зарегистрирован: 09/02/2010 15:48:09
Сообщений: 17
Оффлайн

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

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

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


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

z00n wrote:Никак, вам придется перекомпилировать интерпретатор. Но есть неплохой шанс на то, что изменение, подобное вашему, войдет в lua 5.2 (которая не за горами):
http://article.gmane.org/gmane.comp.lang.lua.general/63208

Жаль. Значит буду компилировать свою Lua с блэк-джеком и шлюхами. :)

Признанный мастер чинпоко, а-ай ^_^
[WWW]
z00n
Постоянный посетитель

Зарегистрирован: 15/02/2008 12:15:56
Сообщений: 96
Оффлайн

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), а новый оператор для простоты, наоборот, назовем "===":


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


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


Это сообщение было редактировано 1 раз. Последнее обновление произошло в 21/02/2010 11:49:36

lexa
Новичок
[Avatar]

Зарегистрирован: 09/02/2010 15:48:09
Сообщений: 17
Оффлайн

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

Ага, так.

Жаль, что языки со статической типизацией - языки со статической. Лучше уж своя версия Lua и ковыряки в Си. :)

P.S. Scala тако-о-ой Java.

Признанный мастер чинпоко, а-ай ^_^
[WWW]
 
Индекс форума » LUA: Общие вопросы
Перейти:   
Powered by JForum 2.1.8 © JForum Team