Igor
cjson - полностью сишная библиотека, которая без внешних зависимостей работает с жысоном
Артур
Да. В сериализаторе проблема была. Я строки json в таблу засунул, а там в середине nill был. И из цикла по нахождению nill выходил😁👍
Артур
Кстати! Начал штудировать Иерузалимски с тетрадкой. Я наконец-то понял почему переменные глобальные по умолчанию! И это намного лучше чем локальные. Особенно для маленьких скриптов с тонной библиотек.
Igor
Мне бы наверное тоже не помешало её перечитать и мини-конспекты на этот раз делать
Артур
Вы про конкретную какую-то книгу или вы имеете ввиду "иерузалимски" Это читать книгу досконально?
Я имею ввиду книгу по lua от создателя - Роберту Иерузалимского. Я когда-то забил после первых глав. Сейчас же решил нормально почитать, в тетрадку повыписывать
Aqendo
Благодарю
Артур
Мне бы наверное тоже не помешало её перечитать и мини-конспекты на этот раз делать
Да. Как заметки на полях. Очень помогает запоминать. С института так делаю. Потом просто тетрадку перечитываешь и норм. Главное не писать больше одного предложения на абзац.
Aqendo
Читаю книгу и смотрю, сколько же вещей есть в луа которые мозг не воспринимает что они могут работать, к примеру: a = {} a[1] = "nnn" a["x"] = "mMm" print(a.x) Вот я бы в жизни не поверил что такое где-то возможно и будет работать корректно
Igor
Редко смешанные таблицы использую, но да, иногда полезно бывает
Igor
Ну а вообще, мне Lua прям максимально полюбился именно после прочтения PiL полного
Aqendo
Я ещё помню удивился, когда переменные можно объявлять через строки, типа _ENV["ab"] = 1 print(ab)
Артур
Работает :)
А! Блин!!! Мы же в окружение (_ENV) пихаем. Точно!
Артур
Табличка в луа это панацея))
Ну как сказать😁 Я бы не отказался от нормального массива порой
Aqendo
И это ведь даже не как define работает, не константа
Aqendo
Только вот я так понял в луа нет a -= 1 и a--?
Igor
Ну как сказать😁 Я бы не отказался от нормального массива порой
local chars = ffi.new("char[1024]") local ints = ffi.cast("int *", chars) ints[255] = 1337
Igor
:)
Александр
Ну как сказать😁 Я бы не отказался от нормального массива порой
а там вроде массив + хеш-таблица или не хватает new/delete malloc/free ?))
Артур
local chars = ffi.new("char[1024]") local ints = ffi.cast("int *", chars) ints[255] = 1337
Вот всё руки не доходят этот ваш богоподобный ffi пощупать. На небесах только и разговоров...
Александр
Скорости😁
а это уже к интерпретации вопросы, если взять jit или вообще на aot "интерпретатор" перейти, то по идее всё должно быть так быстро как это быстро в сишке на O1
Igor
хотя и в идее звучит не очень
Igor
байткод Lua - не нативный байткод процессора, на котором запускается программа. JIT, конечно, создаёт нативный байткод, но не сразу же для всей программы, а со временем, производя нужные оптимизации
Александр
это только по идее
Ну полагаю, что это из-за того, что всё по классике сводиться к битве интерпретатации и компиляции.
Igor
так что в любом случае нехилая такая доля времени уходит на "превращение" луёвого байткода в нативку
Александр
байткод Lua - не нативный байткод процессора, на котором запускается программа. JIT, конечно, создаёт нативный байткод, но не сразу же для всей программы, а со временем, производя нужные оптимизации
ну собственно это плата за интерпретируемость и языковые плюшки. А касательно прекомпиляцию для jit/aot, то это конечно верно, но можно сделать иерархический jit с кэшированием, где прекомпиляция будет происходить один раз, после чего по сути внутри будет работать почти родная к процессору версия программы.
Igor
в принципе да
Igor
но у Майка такой факапнутый жит, что как он работает понимает только сам Майк)))
Александр
Другой вопрос в том, что это всё изврат, который по время/результат не особо себя оправдывает и всё равно быть прям сишкой луа не сможет.
Igor
куча ассемблерного кода, заумные структуры сишного кода
Igor
жесть короче
Aqendo
извините что врываюсь, но есть какой-то лёгкий способ установить луарокс+луажит на винду?
Snusmumriken
Кстати! Начал штудировать Иерузалимски с тетрадкой. Я наконец-то понял почему переменные глобальные по умолчанию! И это намного лучше чем локальные. Особенно для маленьких скриптов с тонной библиотек.
> почему переменные глобальные по умолчанию Потому что точно выделяет области видимости. В противном случае хрен знает откуда будет выдрана переменная при использовании. Питон крайне мерзок своими областями.
Igor
извините что врываюсь, но есть какой-то лёгкий способ установить луарокс+луажит на винду?
клонируешь и тот и тот гитом, собираешь жит и устанавливаешь luarocks через скрипт его с параметрами, где пишешь пути до жита
Igor
вот тута описано всё https://github.com/luarocks/luarocks/wiki/Installation-instructions-for-Windows
Igor
всё делается точно так же, как и для Lua 5.1
Александр
Ну это проблема по сути того, что разрабов не так много и проект по сути вокруг маленькой группы людей вертится, будь луа популярнее, я полагаю jit-ниндзь было бы больше и возможно выше была бы и культура кода и его поддержки. А так luajit по своей серьёзности примерно на уровне tcc держится, т.е. кончено круто, но круто с кучей оговорок.
Igor
А почему 5.3?
Aqendo
да вот хрен знает, у меня вообще луажит 2.1.0
Igor
всё было хорошо пока не стало плохо
а, это нулёвый рокс как я понял
Igor
надо ему помочь слегка, создай в %appdata% папку luarocks
Igor
он не умеет сам првоерять, существует она или нет
Aqendo
решил всё-таки сбилдить, теперь он не может найти луа в пути где установлен луа
Aqendo
создал, он начал в конфиг всё записывать но по какой-то причине все равно в указанных директориях не видит ни incdir, ни libdir
Igor
luajit же собран?
Igor
luajit.exe и lua51.dll существуют?
Aqendo
существуют
Aqendo
собрал через msvcbuild
Igor
Igor
буквально только что собрал
Igor
install /msvc /lv 5.1 /lua "D:\luajit\src" /inc "D:\luajit\src" /lib "D:\luajit\src" /bin "D:\luajit\src"
Aqendo
щас попробую
Igor
👍
Aqendo
чёт оно всё равно хреново установилось (, буду разбираться
Aqendo
видно не судьба
Aqendo
вроде компилил через mvsc тогда почему во время установки luasocket требует mingw32-gcc, к тому же во в начале установки кучу раз пишет путь не найден, странно как-то
Артур
а это уже к интерпретации вопросы, если взять jit или вообще на aot "интерпретатор" перейти, то по идее всё должно быть так быстро как это быстро в сишке на O1
оптимизированный однотипный массив не нуждается ни в каком Jit и других костылях. List в Python в разы быстрее обрабатывает массив однотипных данных.
Артур
Не верь ему. Поумолчательным глобалам оправдания нет.
Есть. Когда у тебя 100500 require и в каждом куча необходимых функций. И это не Enterprise какойнить
R
Есть. Когда у тебя 100500 require и в каждом куча необходимых функций. И это не Enterprise какойнить
>Когда у тебя 100500 require, проблема уже не в областях видимости.
Артур
> почему переменные глобальные по умолчанию Потому что точно выделяет области видимости. В противном случае хрен знает откуда будет выдрана переменная при использовании. Питон крайне мерзок своими областями.
Меня абсолютно не напрягает питон со своими областями. Юзаешь объектный подход и всё. Правда задалбывает писать интерфейсы... но когда код реально объемный, то это спасает от ошибок.
Igor
вроде компилил через mvsc тогда почему во время установки luasocket требует mingw32-gcc, к тому же во в начале установки кучу раз пишет путь не найден, странно как-то
ну во-первых надо запускать luarocks из msvc окружения, ну или через gcc, тут уже вопрос того чем компилить хотите а во-вторых install скрипт надо от админа запускать (не знаю, сам он делает это или нет)
Igor
у меня с моей команды всё отлично собралось
Snusmumriken
Меня абсолютно не напрягает питон со своими областями. Юзаешь объектный подход и всё. Правда задалбывает писать интерфейсы... но когда код реально объемный, то это спасает от ошибок.
Только "объектный подход" там нормально и работает, из-за self-контекста. У тебя есть стейт в self, и ты его напихиваешь ерундой. Вот и всё что ты делаешь.
Igor
у меня с моей команды всё отлично собралось
как же страшно заблюренная Эмма на фоне выглядит, божи...
Igor
Всё крутится, вертится
Aqendo
Всё крутится, вертится
окей, он всё равно в начале пару ошибок выдал что "системе не удается найти указанный путь", но написал что установил, установил в директорию луа/systree... пытался сделать require, луа не нашел сокет, окей, думал как в си прописать путь по папкам, написал require("systree/share/lua/5.1") и он воспринимает точку как слеш, что происходит я без понятия