Max
да, можно специально написать код, который джит ускорит в 100 раз. но 300 мне не удавалось, может и это возможно
Max
другое дело, что хороший луа девелопер средствами луа сведёт этот же прирост до 2x
Max
в лучшем случае
Snusmumriken
Да, пардон, мы говорим про включённый jit и puc lua, да?
Max
нет, я говорю про luajit c джитом и без
Snusmumriken
Жуть какая. Вот это уже вообще отдельно надо бенчать, потому что я про разницу puc и jit, как лошпед.
Max
Майк всё забенчал уже
Snusmumriken
Он забенчал свои случаи, а у меня другие ))
Max
его бенчи признаны индустрией, скажем так
Snusmumriken
Ууу, я никому не верю, даже себе.
Snusmumriken
В этот раз, допустим, скрипт работал в соло и отработал такое-то время, а в другой раз — ему помешало что-то отжирающее всё цп/диск и т.п. —"Когда он уже отработает?" —"Хз" —"А мне нужно через пол часа" —"Ну наверное, хз"
Max
его бенчи признаны индустрией, скажем так
многие бенчи для lua в benchmarks game написаны им, например
Snusmumriken
Круть, он молодец, значит у нас есть очень примерные данные, точность которых для нашего случая варьируется ±100000% (это не точно, слишком много факторов). Бизнес хочет предсказуемости и гарантий, а их нет и не будет.
Highly Likely
осталось совсем чуть-чуть!)
Антон так каждый месяц говорит :C
Serezha
а где почитать про русский джит?
Snusmumriken
а где почитать про русский джит?
Их вроде даже несколько, этих русских джитов. Точнее, конкретно русский — один, от мейл-ру (вроде даже готовится, я не помню, давно новостей не видел). Есть ещё iponweb, но он международный.
Highly Likely
а где почитать про русский джит?
Емнип, два основных – у Мылру (но кажется они о нём ничего нигде не писали) и у ИПОНВЕБА (и они о нём рассказывали много на LiM’ах/HighLoad’ах)
Serezha
ну мы тут как то обсуждали и я не понял что в них есть чего нет в последнем официальном
Serezha
поддержка памяти без лимитов и тд - все есть в официальному уже
Highly Likely
Так что, технически, он тоже «русский жит»
Snusmumriken
для истории
> поддержка памяти без лимитов Хе, luajit 2.1 beta3 x64, ещё в 2017 году. (привет Вадим)
Snusmumriken
Ну таки да, интересно глянуть на альтернативы жыта. Особенно в плане lua_api, потому что 90% бинарей для luajit можно подрубать к 5.1 и обратно. Чего совсем нельзя сказать про обычные "альтернативные реализации" lua, типа .net'овской, но её пилили чисто для встраивания в C#, и дёрганья исключительно C#-функций, самостоятельно она малополезна.
Max
ну мы тут как то обсуждали и я не понял что в них есть чего нет в последнем официальном
глобально ни один форк луаджита далеко не продвинулся и чудес не сделал (к сожалению)
Snusmumriken
Если форкать, придётся иметь дело с бешеным асмом под все платформы и лапшой, оставленной Майком, чтобы никто другой не копался и не отбирал его хлеб. Мб проще всё выкинуть и запилить заново )) Впрочем, я не бизнес-чел и не команда сишных разработчиков (разбирающихся в том, что там вообще происходит), чтобы делать выводы.
Snusmumriken
Так что тот факт что никто далеко не продвинулся — это подтверждает бизнес-жилку Майка, даже с учётом открытых ресурсов : )
Max
ну мы тут как то обсуждали и я не понял что в них есть чего нет в последнем официальном
Скажем так, ипонвеб чинит (пытается) те случаи, что Снус называет плохими для луаджита. Может это никому и не нужно. И точно не нужно тем, кого луаджит и так во всём устраивает (включая хэш-функцию, например)
Snusmumriken
Да не, это нужно, для тех кто не пишет на луажыте то и так как пишет снус (мало ли что этот придурок пишет, это же не наш случай, нам будет норм). Только доку напишите (или гит с исьюшками), про ваши конкретные случаи где вылезает какая-то фигня, чтобы можно было шарить инфу и изучать протечки абстракций конкретно вашей реализации. Ну типа без них всё равно не получится, но мне кажется что, стоит быть во всеоружии.
Заха́р
Привет мир! Имеется скрипт, который выводит простенькое меню, а перемещения по нему реализуются клавишами "j" и "k": local bookmarkerControls = { j = function() jumpSlot(1) end, k = function() jumpSlot(-1) end, } (клавиши эти менять на стрелки не хочу) добавляю в этот блок кириллические символы: о = function() jumpSlot(1) end, л = function() jumpSlot(-1) end, в результате скрипт работать перестаёт. С другими скриптами такое срабатывало, но запись там была несколько по-другому организована. Как добавить сочетания клавиш для русской раскладки? В идеале - использовать коды клавиш. Соответственно вопрос, — как в LUA указываются коды клавиш?
Заха́р
кстати, если имеет значение контекст, то вот. Это скрипт, который добавляет к плееру mpv функционал закладок и навигацию по ним
Anatoliy
Ребяты всем привет, вам тут такие вопросы наверно будут не новы но я сам программист-любитель и у меня тут встал вопрос - а какого максимального размера в Луа может быть таблица? (т.е. и по количеству элементов и по размеру памяти которое сьест этот кусок кода) и насколько будет безопасно для стабильности системы использовать очень большие таблицы, скажем несколько десятков тысяч элементов? Так как есть у меня необходимость прочитать файл размером эдак 1,5 Гб со строками вида - a, b, c, d - числа( но может быть и другой файл где и числа и строки) и занести эти эелементы в таблицу вида { {a1,b1,c1,d1}, {a2,b2,c2,d2},{a3,b3,c3,d3},......}
Anatoliy
И стоит ли вообще читать такой большой файл для занесения в одну таблицу?
🐅🤦‍♂️
кстати, если имеет значение контекст, то вот. Это скрипт, который добавляет к плееру mpv функционал закладок и навигацию по ним
mpv - линуксовый медиа плеер? Сейчас компа нет, дома качну и попробую запустить твой скрипт.
🐅🤦‍♂️
Мне проще на основную систему поставить, на ubuntu 19.04
Snusmumriken
кстати, если имеет значение контекст, то вот. Это скрипт, который добавляет к плееру mpv функционал закладок и навигацию по ним
Если ты используешь эту мапу кнопок примерно следующим образом: local function eventHandle(key, ...) if bookmarkerControls[key] then bookmarkerControls[key](...) end end То ты можешь проверить, что плеер высылает в качестве кириллических символов, просто записав их. local function appendfile(path, text) local f = io.open(path, 'a+') f:write(text .. '\n') f:close() end А потом типа local function eventHandle(key, ...) appendfile('/home/usr/keylog.txt', tostring(key)) ... end И проверяешь что записывается вместо кириллицы, и в какой кодировке. Потом указываешь в мапе соответствующие символы и переводишь скрипт в соответствующую кодировку. Но в целом, это странно. Подобные приложения обычно используют сканкоды (числовое или дефолтное символьное обозначение) а не "считывают символы в текущей кодировке", как раз чтобы было пофигу на пользовательский язык.
Snusmumriken
Я что-то слышал про 2тб. Тойсть больше чем любая "домашняя" задача может в нее запихать
Нене, ты чего. В таблицу-массив можно запихнуть столько значений, сколько есть в луёвом int52 (оставшиеся 12 бит у чисел под мантиссу). Лимитов по памяти нет, лимиты на целочисленные слоты — по размеру этих целых чисел. А, и на lua5.3 есть отдельный тип под int, поэтому кол-во "массивных" слотов в таблице вполне себе 2^64-1. И ещё произвольное количество слотов под строковые или дробные числа. А вот у строки, предельный объём как раз 2^32/2^64 символов, или сколько влезет в оперативку.
Snusmumriken
Тут уже такое проводили когда проверяли luajit 2.1 beta-3 на лимиты по занимаемой памяти.
Snusmumriken
для истории
Вот тут вот было тупое заполнение одной и той же таблицы-массива числами, помнится.
fgntfg
Mva хулиган знатный, конечно
Igor
Насколько я помню MPV отправляет кнопки напрямую, то есть нажал "э" он и проверит бинд на "э", так вот, чтобы в таблицу записать функцию с русским ключом, сам ключ надо взять в квадратные скобки ["э"] вот так.
Igor
кстати, если имеет значение контекст, то вот. Это скрипт, который добавляет к плееру mpv функционал закладок и навигацию по ним
Igor
п.с. Только что проверил на своём MPV твой скрипт, там просто из таблицы все кнопки биндятся, так что я просто взял функцию mp.add_forced_key_binding и передал ей в аргумент кнопки строку с буквой "э", всё работает
Snusmumriken
Очень странная фигня, почему оно не по сканкодам? Чтобы можно было в одной раскладке делать одно, а в другой — другое, да? Но это же стрёмно, проверять раскладки перед тем как пользоваться плеером )) И вдруг у нас французская раскладка, где другие символы. Или испанская, где вообще третьи.
Igor
Подобная запись не вызовит ошибки на Lua 5.1+ local table = { ['э'] = function(...)end }
Igor
Да, если ты на английской раскладке он чекает кейбинд на ' , а если на русской то э
Igor
Очень странная фигня, почему оно не по сканкодам? Чтобы можно было в одной раскладке делать одно, а в другой — другое, да? Но это же стрёмно, проверять раскладки перед тем как пользоваться плеером ))
Snusmumriken
https://www.ibm.com/support/knowledgecenter/en/ssw_aix_71/com.ibm.aix.keyboardtechref/doc/kybdtech/Key.htm (плюс сканкоды для клавиш типа play/pause/stop)
Igor
mpv был раньше любимым плеером, писал для него скрипт для синхронного просмотра видосов с друзьями, но потом пересел на VLC, по скольку друзей уже нет и скрипт писать не нужно)
Snusmumriken
Ну сейчас есть браузерные сервисы для тюбика, например. Осталось найти друзей.
Igor
Да они и тогда были, я просто хотел что-то своё сделать, я и писал тот скрипт для mpv вдохновившись сервисом syncvideo
Snusmumriken
Сканкоды? Мы что, в löve?
Мм, это универсальная тенденция. В ловке сканкоды, кстати, уже расшифрованные. Обычно они цифровые.
Snusmumriken
Да они и тогда были, я просто хотел что-то своё сделать, я и писал тот скрипт для mpv вдохновившись сервисом syncvideo
Я вот пару лет назад переехал, и залез в тележный чатик по местному признаку, теперь у меня есть друганы с которыми я тусю. Но ещё осталась пара штук со старого места жительства. Так что были бы друзья, а задачки приложатся : )
Igor
Я, кстати, смотрел исходники mpv, там чёрт ногу сломит, сложно что-то найти, раньше у меня получалось заставить его работать с LuaJIT, а с какого-то коммита он перестал это делать, пытался найти в чём проблема, но так и не получилось, хотя вполне возможно, что я лажанул с путями до инклудов, но уже не суть важно
Snusmumriken
Опенсурц, щито поделать. Сам luajit тоже "опенсорцный", но там тоже чёрт ногу сломит.
Igor
Ну сам LuaJIT мне ни разу не устраивал проблем из-за которых приходилось бы лезть и патчить код его, плюс ассемблер я не сильно хорошо знаю
Snusmumriken
Надо написать фигню, которая строит графо-дерево по исходникам, мол, что где используется. Ну там, реагирует на луёвые require и смотрит, откуда выцепится этот скрипт (по package.path/cpath), или в сишке на инклюды.
Igor
Сам хотел что-то такое написать, но потом закинул, у меня в большинстве проектов lua-файлы динамически подгружаются
Snusmumriken
Ну просто поиск скриптов по path/cpath я запиливал, типа "где по путям есть такие-то либы и в каком приоритете", потому что у меня несколько библиотек библиотек (одна универсальная для lua и ловки, другая только для ловки). Чтобы потом выдрать, собрать в одном месте и "зарелизить". А то чо за либы у меня есть я помню, а где они находятся — нет ))
Igor
Кстати, есть такой вопрос, можно ли из луашной юзердаты типа file получить сишный хендл файла? Просто у меня тут есть такое место, где неплохо было бы передать уже открытый хендл файла в поток, вместо того чтобы переоткрывать его с append флагом
Igor
ffi умеет конвертить lua file в void*, но только когда файл передаётся в сишную функцию
Snusmumriken
Надо глянуть, не является ли он изначально сишной юзердатой с метатаблицей.
Igor
а когда я пытался сделать ffi.cast файла в void*
Igor
он просто возвращал поинтер именно на саму юзердату
Snusmumriken
https://www.lua.org/source/5.1/liolib.c.html
Snusmumriken
Кажись это просто сишный хендлер с мета-обёрткой.
Snusmumriken
И есть шанс что его можно использовать на сишной стороне как сишный хендлер.
Igor
Когда я кастовал userdata в void* и пытался передать её в fwrite я ловил Segfault
Igor
Как я понял, в LuaJIT файл открытый выглядит так
Snusmumriken
Наверное не надо кастовать в void*, а оставлять в file. И в 5.1 базовой используют fprintf.
Snusmumriken
В луажите видать придётся ещё и выдирать поинтер.