Snusmumriken
Угу : 3
Ну как сказать. Я хуесосю не программистов а чуваков которые подгоняют сверх меры : 3
🦥Alex Fails
ГуНиСе️
ext4 – 27
👍👍👍👍👍👍👍 77%
btrfs – 5
👍 14%
я довен, хз что это такое – 3
👍 9%
👥 35 people voted so far.
Arthur'); DROP TABLE Users;--
добавьте вариант ответа "кто такой довен"
Snusmumriken
Ясное дело, что довен это fox.lua, что еще надо?
Мерль
[last news]
Using Lua coroutines to create an RPG dialogue system
grinchfox
http://brian.io/slides/dotjs-2012/
grinchfox
у них даже списки лулзов на эту тему есть
grinchfox
мне просто кажется что всякие абстрактные преобразования в js лишьние и из за них нужно просто знать больше особенностей, но без них никто и не страдает например в луа. Преобразования строк к числам в луа не представляют неудобств потому что самый большой провал в js происходит при конкатенации
Snusmumriken
https://vk.com/video3209020_168239546
Snusmumriken
JS подстраивается под человека, который на нем пишет. На деле, каноничный пример 'Easy to learn, hard to master': чтобы хорошо писать, приходится знать очень-очень много мелких тонкостей. По мне, правда, js еще и довольно медленный, но я избалован luajit'ом, и мне любые скрипты кроме lua в данной виртуалке кажутся жутко медленными. Но я на луях не бизнес-логику пишу, а как раз считаю кучу матана над миллионами объектов. Нормальные люди пишут это на компилируемых языках.
Ilia
На сколько я знаю v8 быстрее работает с масивами чем luajit.
Ilia
Да, если использовать C-массивы, то они быстрее бесспорно=)
Snusmumriken
Сишные структуры, к которым можно прицепить ООП - тоже охренительно.
Вместе с метаметодами и прочей лабудой. Уже дошёл что полуавтоматически делаю на FFI объекты, которые можно представить статически (без динамических полей, которые меняют тип/размер).
Alexander
а кстати, кто какую реализацию ООП на луа предпочитает?
Snusmumriken
class = {}
class.__index = class
setmetatable(class, {
__call = function(self, x, y, z, ...)
local o = {x = x, y = y, z = z, ...}
return setmetatable(o, class)
}, __index = parentclass)
obj = class(1, 2, 3)
Alexander
у меня создалось впечатление, что каждый программист самостоятельно делает себе ООП под свои нужды
Snusmumriken
Ну ты знаешь, для простых задач, когда один-два класса на модуль, есть вариант см. предыдущее сообщение, благо это надо прописать один-два раза.
Для чего-то сложного, когда модуль - это целая папка с файлом init.lua - тут можно цеплять middleclass.
Я писал очень короткую реализацию классов, всего в одну сравнительно небольшую функцию, возвращающую классовый объект. Где-то была реализация с множественным наследованием, но она медленнее работает, со своим поиском методов по родителям (лично мне - очень критично), не очень удобно (родители часто хотят собственной инициализации, а когда их много - это напряжно), и в целом, множественное наследование - довольно стрёмная штука.
Меня напрягает ради каждого чиха копипастить модули, поэтому даже эту функцию использую не так часто.
https://pp.vk.me/c837233/v837233715/4d6c/cuetnZAo4UQ.jpg
Alexander
спасибо, я тоже примерно о таком думаю
Snusmumriken
Во, чуть более широкая версия моего ООП, с клонированием даже составных объектов (которые состоят из других объектов), и финалайзером через грязный хак и недокументированную функцию newproxy (для lua 5.1, в более поздних, финалайзеры работают не только для cdata, но и для таблиц).
http://pastebin.com/K1yRyE1T
grinchfox
Я от безделия свою либу с неймспейсами, наследованием и загрузкой классов из файлов и директорий сделал
grinchfox
Правда наверно композировать прототипы лучше чем рекурсивный __index
grinchfox
По скорости
🦥Alex Fails
👍
grinchfox
grinchfox
Потому что в garrysmod их можно выделить, но нельзя освободить
Snusmumriken
>загрузкой классов из файлов и директорий сделал
Но это же обычный require. Модуль с классом возвращает себя, и ты дальше используешь класс как обычно:
class = require'class'
obj = class(a, b, c)
А неймспейсы ты небось setfenv'ами мутил?
Пустые юзердаты - в каком виде?
newproxy - это, технически, пустой сишный указатель с метатаблицей,
который нельзя почти ни для чего использовать, кроме как для __gc-метаметода.
grinchfox
Snusmumriken
Ну, разве что gmod использует свои фигни.
grinchfox
А newproxy разве не light user data создаёт ?
Snusmumriken
Его. Но это не очень важно, потому что __gc :3
grinchfox
Ну так я для GC и использовал
grinchfox
Мне нужно было узнать когда скрипт потерял хендлер на рт
Snusmumriken
Кстати, вопрос. Ты знаешь что такое FFI?
grinchfox
Да, но в garrysmod его нет, а для собственных проектов проще бинды наверно написать
grinchfox
Для игр с клиентскими скриптами это опасно
Snusmumriken
Ну, и всякие такие конструкции:
Bar_class = {}
function Bar_class:foo(x, y) self.x, self.y = x, y end
ffi.cdef[[
typedef struct {
long double x, y, r, sx, sy, ox, oy, kx, ky;
int fx, fy;
} Bar;
]]
local Foo = ffi.metatype("Bar", Bar_class) -- OOP
foo = Foo()
Snusmumriken
Ну, на сишке дефайним структуру, цепляем к ней мета-таблицу и так далее.
Так вот, мне было бы интересно как бы ты вписал в качестве ключа метатаблицы - обычную lua-таблицу, когда у тебя нет такого типа на С-стороне.
grinchfox
Так всеравно же нужна луа таблица
Snusmumriken
Не, не нужна. Я юзаю ffi-структуры как полноценные объекты, и там могут быть ссылки на lua-объекты. Сама по себе нужна внешняя локальная таблица, в которую ты прописываешь id таблицы, на которую тебе нужна ссылка из ffi-структуры.
Ну, условная прокся. А в качестве ключа __newindex к структурам - пишешь поиск по id таблицы в проксе.
Структуре достаточно иметь int-поле с id таблицы (которое проявляется если попробовать привести таблицу к строке).
grinchfox
Прикольно
Snusmumriken
Вот такой грязный хак для доступа к объекту-родителю, являющемуся обычной таблицей. Доступ ничем не отличается от того, как будто ключ ffi-структуры является ссылкой на таблицу.
grinchfox
Лал, entitie
Snusmumriken
А шо? Тут типа анимационная либа, а сущность - один экземпляр спрайта. Ему нужен доступ к батьке, чтобы заставлять батьку себя обновлять, и доступ к активной анимации, чтобы лениво вычисляться.
grinchfox
Entity
Snusmumriken
А, бывает, я просто с французским перемудрил.
grinchfox
А вообще мне всеравно не нравится ffi на клиентской стороне
Snusmumriken
Даладна. Просто не выпендриваешься с дёрганьем встроенных в ОС dll-ок и всё. Оно кросс-платформенное и настолько же безопасное, как и обычное приложение на С/С++. Хех, видел порт luajit на psvita.
grinchfox
Не, просто не очень безопасно для мультиплеера с загружаемыми клиентскими скриптами
Snusmumriken
Загружаемыми с сервера или с клиента?
А ля "сервак выдаёт всем подключившимся все скриптики с сервера, и те их исполняют"
grinchfox
С сервера на клиент
grinchfox
Иначе достойного моддинга не будет
Snusmumriken
На практике, обычная lua оказывается достаточно страшной: есть os.execute, через которую можно wget'ом или вендовым аналогом заставить клиентский пк скачать с твоего личного сервера кейлоггер/вор паролей хрома/ещё что-нибудь, и тут же запустить. Или io.popen, с аналогичным действием.
Snusmumriken
Но это не важно, потому что всё равно мы все умрём :3
Alexander
Snusmumriken
Не а.
new_os = require'os'
new_os.execute(...)
Модули-то загружены.
Snusmumriken
Вот это уже ближе к истине. Но всегда можно загрузить .dll-ку с аналогичным функционалом и даже хуже.
Alexander
если знать к ней путь
Snusmumriken
Дык стандартные вендовые .dll-ки в system32. Тут тебе и cmd, и winsock и полный фарш. Ты не представляешь как изгалялись с браузерным javascript чтобы сделать его ОТНОСИТЕЛЬНО безопасным. А Flash так и вовсе трындец.
Alexander
Alexander
на самом деле, есть у меня совсем другой вопрос
Alexander
пять минут, счас наберу текст
Snusmumriken
Во, что можно сделать - отключить os, io и очистить package.cpath. Тогда оно фиг что найдёт.
Alexander
(убрал много букв про выбор Lua вместо PHP)
Alexander
не совсем пет. им много человек активно пользуется :)
Alex
Ну так пили параллельно.
Alex
lua отлично, python отлично, ruby отлично.
Alex
Не php и отлично, в общем.
Alexander
спасибо, ок ))
Alex
php тоже нормально, только его нужно уметь готовить, это весьма нетривиальная задача.
🦥Alex Fails
Alex
телегоботы проще всего на python пилятся, с готовыми активно развивающимися либами там вообще на один день вопросов.
Alexander
Alexander
А что за бот?
могу показать одного из, но он очень простой и без связности с остальным всем.
Alex