Snusmumriken
Угу : 3 Ну как сказать. Я хуесосю не программистов а чуваков которые подгоняют сверх меры : 3
ГуНиСе️
⁠ ext4 – 27 👍👍👍👍👍👍👍 77% btrfs – 5 👍 14% я довен, хз что это такое – 3 👍 9% 👥 35 people voted so far.
Arthur'); DROP TABLE Users;--
добавьте вариант ответа "кто такой довен"
Snusmumriken
Ясное дело, что довен это fox.lua, что еще надо?
Snusmumriken
Угу : 3 Ну как сказать. Я хуесосю не программистов а чуваков которые подгоняют сверх меры : 3
Дополнение. С другой стороны, если погромистов совсем не подгонять, те перестанут писать вообще. Разве что это что-то очень интересное для них. Баланс между пенделями и качеством - вот дзен.
Мерль
[last news] Using Lua coroutines to create an RPG dialogue system
grinchfox
Хех, на lua пишут рекордное количество говнокода. Больше, наверное, только на js. Хотя если смотреть на долю, паскаль опережает всех.
да js еще сам язык странный, там не все с первого раза получилось - вродебы есть var, но работает не всегда как ожидалось, потому сделали let. Да и прототипы и всякие неявные преобразования у них стремные
grinchfox
http://brian.io/slides/dotjs-2012/
grinchfox
у них даже списки лулзов на эту тему есть
Alex
http://brian.io/slides/dotjs-2012/
сам не перевариваю жс, но из этого примера почти всё логично и нормально.
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
Потому что в garrysmod их можно выделить, но нельзя освободить
Snusmumriken
>загрузкой классов из файлов и директорий сделал Но это же обычный require. Модуль с классом возвращает себя, и ты дальше используешь класс как обычно: class = require'class' obj = class(a, b, c) А неймспейсы ты небось setfenv'ами мутил? Пустые юзердаты - в каком виде? newproxy - это, технически, пустой сишный указатель с метатаблицей, который нельзя почти ни для чего использовать, кроме как для __gc-метаметода.
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
Snusmumriken
Не а. new_os = require'os' new_os.execute(...) Модули-то загружены.
Alexander
Не а. new_os = require'os' new_os.execute(...) Модули-то загружены.
для своего сервера сделать кастомную сборку lua с отключенными опасными io.* и os.* ?
Snusmumriken
Вот это уже ближе к истине. Но всегда можно загрузить .dll-ку с аналогичным функционалом и даже хуже.
Alexander
если знать к ней путь
Snusmumriken
Дык стандартные вендовые .dll-ки в system32. Тут тебе и cmd, и winsock и полный фарш. Ты не представляешь как изгалялись с браузерным javascript чтобы сделать его ОТНОСИТЕЛЬНО безопасным. А Flash так и вовсе трындец.
Alexander
на самом деле, есть у меня совсем другой вопрос
Alexander
пять минут, счас наберу текст
Snusmumriken
Во, что можно сделать - отключить os, io и очистить package.cpath. Тогда оно фиг что найдёт.
Alexander
(убрал много букв про выбор Lua вместо PHP)
Alexander
не совсем пет. им много человек активно пользуется :)
Alex
Ну так пили параллельно.
Alex
lua отлично, python отлично, ruby отлично.
Alex
Не php и отлично, в общем.
Alexander
спасибо, ок ))
Alex
php тоже нормально, только его нужно уметь готовить, это весьма нетривиальная задача.
Alex
телегоботы проще всего на python пилятся, с готовыми активно развивающимися либами там вообще на один день вопросов.
Alexander
телегоботы проще всего на python пилятся, с готовыми активно развивающимися либами там вообще на один день вопросов.
да вот есть https://github.com/cosmonawt/lua-telegram-bot скорее всего я допилю это под свои особенности
Alexander
А что за бот?
могу показать одного из, но он очень простой и без связности с остальным всем.
Alexander
для общего развития: https://github.com/eternnoir/pyTelegramBotAPI
ага, но я не хочу разные части проекта писать на разных языках, когда в них есть общие алгоритмы. а на питоне веб-часть писать не хочу