Войти
ПроектыФорумУтилиты

Luah - враппер для C# вокруг LuaJIT

#0
23:06, 17 июня 2021


Luah - враппер для C# вокруг LuaJIT. Позволяет встраивать Lua скрипты в C# программы.

Исходники
https://bitbucket.org/kkolyan/luah

Особенности

  • повторяет оригинальный Lua C API без дополнительных слоев абстракции, хотя и с некоторыми "хелперами"
  • Windows/Linux.
  • подключается к Unity через package.json
  • Как использовать
    Бинари LuaJIT не идут в комплекте. их можно скачать здесь или собрать из исходников, а затем положить lua51.dll (Windows) или liblua51.so (Linux) в директорию, из которой запускается ваша C# программа.

    при работе в Unity Editor - в корень проекта (вне папки Assets), при запуске собранной Unity игры - в директорию вместе с запускаемым файлом

    using Luah;
    
    public class HelloExample
    {
        public static void Main()
        {
            using (LuaState state = Lua.luaL_newstate())
            {
                state.luaL_openlibs();
                state.luaL_loadstring_safe("print('Hello!')");
                state.lua_pcall_traceback(0, 0);
            }
        }
    }

    Больше примеров в тестах: https://bitbucket.org/kkolyan/luah/src/master/test/Tests.cs


    Отладка
    В Luah входят врапперы, позволяющие интерактивно просматривать Lua-стек и глобальные переменные при отладке C# кода (проверял только в Rider)

    + стек
    + глобальные переменные

    Планы
    Использую сам, так что в данный момент активно дорабатываю. Сильно наращивать функциональность не планирую. Цель - простые и хорошо отлаженные биндинги в стиле оригинального Lua C API.

    #1
    23:41, 17 июня 2021

    Чем это лучше этого?
    https://github.com/yanghuan/CSharp.lua
    Или просто враппер над lua51.dll?

    с небольшими наворотами для удобства

    В чём навороты заключаются?

    позволяющие интерактивно просматривать Lua-стек при отладке C# кода

    Да?

    #2
    23:55, 17 июня 2021

    flint2
    > Чем это лучше этого?
    > https://github.com/y… an/CSharp.lua
    Указанная вами библиотека решает совершенно иные задачи.

    flint2
    > В чём навороты заключаются?
    На данный момент:

  • просмотр стека при отладке
  • возможность получать строки и как string и как IntPtr.
  • bool вместо int в местах где это подразумевается
  • вызов функции с трейсбэком
  • В общем, мелочи.

    #3
    23:56, 17 июня 2021

    Указанная вами библиотека решает совершенно иные задачи.

    Просто враппер над lua51.dll?

    #4
    23:59, 17 июня 2021

    flint2
    Да
    (заменил слово фасад на враппер в описании на всякий случай)

    #5
    0:02, 18 июня 2021

    kkolyan
    Понял, спасибо.
    Посмотрим. ))

    #6
    0:08, 18 июня 2021

    flint2
    > Просто враппер над lua51.dll?
    Так, стоп. Если вы имеете в виду что моя либа отличается от указанной вами "наворотами", то нет - вы привели ссылку на транслятор C# в Lua. Т.е. совсем другое.

    А моя либа - просто враппер, да.

    #7
    1:00, 18 июня 2021

    kkolyan

    А моя либа - просто враппер, да.

    Потом я понял.
    Просто у меня были зрительные ассоциации с:

    + Показать

    Я занимался в это время тем, на что дал ссылку. Один в один картинка.
    Мозги по инерции сработали. ))
    Не сердись, я без всякого умысла. Подумал, что в тему...

    #8
    1:57, 18 июня 2021

    kkolyan
    А можно C# в Кор (https://gamedev.ru/projects/forum/?id=257379) прикрутить?
    Хотелось бы на C# в Коре работать.
    Может транспайлер(транслятор)?

    #9
    2:03, 18 июня 2021

    flint2
    > Не сердись, я без всякого умысла. Подумал, что в тему...
    да ничего страшного) было интересно узнать что такое уже кто-то сделал. мало-ли пригодится.

    qGrin
    с помощью моей либы - нет, т.к. она делает ровно обратное. А вот по ссылке, которую принес flint2 (https://github.com/yanghuan/CSharp.lua) похоже как раз то, что вам нужно.

    Имхо, если и транспайлить что-то в Lua (например для Кора), то лучше уж Kotlin, или хотя бы Java. Достоинства C# всетаки себя раскрывают сугубо в его собственном рантайме.

    #10
    2:24, 18 июня 2021

    kkolyan

    то лучше уж Kotlin, или хотя бы Java.

    Солидарен, классика.

    #11
    5:15, 18 июня 2021

    kkolyan
    > Имхо, если и транспайлить что-то в Lua (например для Кора), то лучше уж Kotlin,
    > или хотя бы Java. Достоинства C# всетаки себя раскрывают сугубо в его
    > собственном рантайме.
    С Java нет опыта (ну кроме паттернов от head first).
    А вообще хочется от менее интуитивного и знакомого LUA перейти к чему то более знакомому типо C#.

    #12
    12:54, 18 июня 2021

    qGrin
    haxe транспайлится в lua. для интеграции с кором, наверняка потребуется написать клей, но в целом идея должна быть рабочей. в качестве примера есть интеграция с дефолдом.

    ПроектыФорумУтилиты

    Тема в архиве.