Tverd
Ну есть бенчи простого? Я сколько не видел скриптовых - они максимум на VM работают... а то и просто интерпретируемые
Snusmumriken
Не, ест pypy и node.js, которые имеют трассирующие компиляторы. Просто у них оверхед на это большой. Luajit сбалансирован.
Snusmumriken
Как работает jit: https://youtu.be/9oVZObf2udU
Tverd
pypy и ноду я при всем желании не стал бы использовать в качестве скриптового языка внутри игры... тем более мобильной ))))))))))))
Tverd
Интерьвью очень вялое. Я бы не заинтересовался языком...
Tverd
А так конечно, когда уже умеешь - приятно ) И еще, чаще парня показывают, чем код на экране
Snusmumriken
Да, я ставил на паузу чтобы разглядеть : 3
Tverd
А я вот долго воротил нос от него, ибо синтаксис и не С и не питон, ближе к паскалю. Но по работе пришлось засесть ))) не сожалею ни капли
Tverd
В с++ давно не лазил... только С.
Tverd
а ты Nim видел? )
Tverd
Сюрпризом будет )))
Tverd
https://habrahabr.ru/post/258119/
Tverd
это не оффтоп, nim отлично дополняет lua
Мерль
Если кому-то хочется поизвращаться, попробуйте pony lang
Tverd
неа, ним транслируется в С
Tverd
Пооонятно )
Мерль
нет Луа бежит внутри виртуальной машины
Tverd
Не, погоди... lua - это интерпретируемый язык, его интерпретатор написан на С. Он не компилируется, хотя можно егойный байткод сохранить в файл. Но это не С. luajit - это тот же луа интерпретатор, но с возможностью трансляции на этапе исполнения сразу в коды процессора... Nim - транслятор... язык переводится в исходный код на С, а там уже что хочешь с ним, то и делай ) как-то так
Мышление меняют языки
Sergey
Перл не курят, его либо шутят, либо кашу варют.
На нём ещё пишут
Tverd
Бывает, особенно под конец дня )))
Snusmumriken
нет Луа бежит внутри виртуальной машины
Смотря какая луа бегает в виртуалке. jit-разогретые трассы компилятся в сишку.
Sergey
LuaJIT как Java разогревать надо? Или там попроще будет?
Tverd
Snusmumriken
tiny c compiler же
Tverd
а DynASM ему накой тогда?
Мерль
Не в hex? Уверен что в си? кто потом этот С компиляет?
Неа, там промежуточный код транслируется в машинный Собсно вот тут можно посмотреть https://github.com/LuaJIT/LuaJIT/tree/master/src
Мерль
https://github.com/LuaJIT/LuaJIT/blob/master/src/lj_asm.c
Snusmumriken
А, TCC нужен для FFI, насколько я помню.
Мерль
https://github.com/LuaJIT/LuaJIT/blob/master/src/lj_asm.c
В частности вот этот кусок
Tverd
Ну вот определились, что бы не распространять дезу ))))
Мерль
Snusmumriken
Карочи, куски луашки транслируются в машинный код ))
Мерль
нет
Snusmumriken
Которые часто используются.
Мерль
Луа только на luajit транслируется в IR (промежуточное представление), над которым делаются агрессивные оптимизации (собсно, luajit и известен очень умным оптимизатором), после чего IR траснлируется в машинный код, после чего участок памяти, куда его записали, помечается как исполняемый
Мерль
Собсно всё
Snusmumriken
Но да, это только у jit. Ванильная луашка работает примерно раза в полтора быстрее питона. В love2d используется jit, так что ок.
Tverd
Вот! луаджита мне в короне и не хватает, окромя других ее грехов
Snusmumriken
Хех, кому самый предвзятый в мире бенчмарк на lua с jit и без jit? )))
Snusmumriken
Вот он!
Snusmumriken
А вот нормальный. http://luajit.org/performance_x86.html Но предупреждаю что он устарел. С версией 2.1, некоторые штуки подскочили в скорости до x300.
Sergey
LuaJIT - самый джитистый джит.
Tverd
😆 это да, самый )))
Snusmumriken
Да не, это просто кусок магии который позволяет делать очень стрёмные штуки. Например, вытащить из оси произвольную библиотеку и заюзать в своих грязных целях. Или писать на C на Lua. Сварганить сахарный биндинг на что-нибудь, вместо того чтобы пилить dll/so-либу-прослойку. Ну там, нужен тебе SteamAPI.dll? Взял и заюзал, подключив к lua напрямую, инициализировав изнутри lua header-файл.
Tverd
Кстати, луаджит нормально работает на ios?
Snusmumriken
Ну, процы там - или x86(64) или ARM. Да. В чейнжлогах luajit можно углядеть "Улучшена совместимость с psVITA и xbox 360", ололо.
Tverd
Не, там был такой момент, что ios непозволял запускать код из того места, где изначально данные лежали... вот какая проблема была
Snusmumriken
Должно быть ок
Tverd
Может в x64 были проблемы... уже не помню, ну будем надеяться что и правда все ок
Snusmumriken
У меня сакральный вопрос: нужен ли кому ещё ios? Потому что мои знакомые яблочники переходят на ведро в лице meizy/xiaomi.
Tverd
игроделам, не? )))))))))
Snusmumriken
Ну, просто в транспорте вижу яблочников с битыми пятыми/шестыми ойфонами и иногда старыми же macbook'ами.
Yogurt
У меня нет метро, но в маршрутках в к время вижу семерки
Snusmumriken
Я не просто серьёзно а очень серьёзно. И на работке тоже все подряд закупают xiaomy.
Tverd
Основная платящая масса - владельцы ios-ов ) Так что пусть будут ))))))))
Snusmumriken
Ну не скажи. Там пропорционально много купленных приложений, но вдоначивается в игровое баблишко примерно столько же. Сама аудитория шире. Да, в ней много нищебродов : 3
Tverd
))) вот! а вот под винду мобильную смысла делать не вижу, это да
Snusmumriken
Игроки не любят покупать приложения на телефон, особенно если учесть что часть приложений стоит >1к рубликов. А вот вдоначивать в игровые бонусы, много раз но по копеечке - вдоначивают. Иногда сильно больше чем 1к рубликов.
Snusmumriken
А мобильная венда - да. У мелких чудовищное отношение к разработчикам: чтобы писать на венде, нужно продаться в анальное рабство, и всё что ты напишешь будет принадлежать мелким. И мелкие будут великодушно отсыпать горсточку заработанного. Вспоминаю эпоху windows mobile 2005/2006, когда можно было катать любую херню, и она работала. Хотя нормальных именно игр там было мало.
marroty
День добрый, уважаемые, а не подскажите маленькую библиотеку таймера для Lua? Задача-раз в секунду получать данные. Os.sleep мне как то не хочется использовать, а вот простой библиотеки что-то не нарыл. Так что если что - потыкайте носом :). Это, собственно, планируется телеграмм бот на лонг поллинге.
Snusmumriken
Хм. function timer(func) local time = os.time() return function() if os.time() ~= time then time = os.time() func() end end end updater = timer(receive_and_process_data_function) while true do updater() end
Tverd
как-то не очень...
Snusmumriken
Ну щито поделать :3 В lua нет нормального sleep. Разве что os.execute'ping 127.0.0.1'
Tverd
писать нормальный синглтон таймера
Snusmumriken
Это не синглтон же. Можно сделать много таймеров.
marroty
Ну вот именно os.... мне бы и хотелось избежать...😄
Tverd
это понятно
Tverd
libev
Snusmumriken
Ну вот именно os.... мне бы и хотелось избежать...😄
В чём проблема? Это стандартная библиотека, а времени без неё нормально не получишь. os.time возвращает кол-во секунд с 1970 года.
marroty
Так я хочу возвести таймер, и по его истечении обратным вызовом вернуть curl, например
B
https://wiki.inspired-lua.org/timer.start
Snusmumriken
Если у тебя есть luajit - можно так: local ffi = require("ffi") ffi.cdef[[ void Sleep(int ms); int poll(struct pollfd *fds, unsigned long nfds, int timeout); ]] local sleep if ffi.os == "Windows" then function sleep(s) ffi.C.Sleep(s*1000) end else function sleep(s) ffi.C.poll(nil, 0, s*1000) end end sleep(0.01)
Snusmumriken
Так я хочу возвести таймер, и по его истечении обратным вызовом вернуть curl, например
Ты curl используешь для https? На какой ос работаешь/для какой пишешь?
Tverd
вообще-то если человек использует слип, то где-то он не правильно думает