@ProLua

Страница 39 из 307
grinchfox
10.01.2017
16:55:56
у них даже списки лулзов на эту тему есть

Alexey
10.01.2017
16:57:11
http://brian.io/slides/dotjs-2012/
сам не перевариваю жс, но из этого примера почти всё логично и нормально.

grinchfox
10.01.2017
17:00:22
мне просто кажется что всякие абстрактные преобразования в js лишьние и из за них нужно просто знать больше особенностей, но без них никто и не страдает например в луа. Преобразования строк к числам в луа не представляют неудобств потому что самый большой провал в js происходит при конкатенации

Snusmumriken
10.01.2017
17:04:33
https://vk.com/video3209020_168239546

Google
Snusmumriken
10.01.2017
17:07:04
JS подстраивается под человека, который на нем пишет. На деле, каноничный пример 'Easy to learn, hard to master': чтобы хорошо писать, приходится знать очень-очень много мелких тонкостей. По мне, правда, js еще и довольно медленный, но я избалован luajit'ом, и мне любые скрипты кроме lua в данной виртуалке кажутся жутко медленными. Но я на луях не бизнес-логику пишу, а как раз считаю кучу матана над миллионами объектов. Нормальные люди пишут это на компилируемых языках.

Ilya
11.01.2017
08:12:59
На сколько я знаю v8 быстрее работает с масивами чем luajit.

Ilya
11.01.2017
09:15:10
Да, если использовать C-массивы, то они быстрее бесспорно=)

Snusmumriken
11.01.2017
19:58:03
Сишные структуры, к которым можно прицепить ООП - тоже охренительно. Вместе с метаметодами и прочей лабудой. Уже дошёл что полуавтоматически делаю на FFI объекты, которые можно представить статически (без динамических полей, которые меняют тип/размер).

Alexander
11.01.2017
20:00:42
а кстати, кто какую реализацию ООП на луа предпочитает?

Snusmumriken
11.01.2017
20:03:26
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
11.01.2017
20:03:42
у меня создалось впечатление, что каждый программист самостоятельно делает себе ООП под свои нужды

Snusmumriken
11.01.2017
20:06:26
Ну ты знаешь, для простых задач, когда один-два класса на модуль, есть вариант см. предыдущее сообщение, благо это надо прописать один-два раза. Для чего-то сложного, когда модуль - это целая папка с файлом init.lua - тут можно цеплять middleclass. Я писал очень короткую реализацию классов, всего в одну сравнительно небольшую функцию, возвращающую классовый объект. Где-то была реализация с множественным наследованием, но она медленнее работает, со своим поиском методов по родителям (лично мне - очень критично), не очень удобно (родители часто хотят собственной инициализации, а когда их много - это напряжно), и в целом, множественное наследование - довольно стрёмная штука. Меня напрягает ради каждого чиха копипастить модули, поэтому даже эту функцию использую не так часто. https://pp.vk.me/c837233/v837233715/4d6c/cuetnZAo4UQ.jpg

Alexander
11.01.2017
20:08:19
спасибо, я тоже примерно о таком думаю

Snusmumriken
11.01.2017
20:40:15
Во, чуть более широкая версия моего ООП, с клонированием даже составных объектов (которые состоят из других объектов), и финалайзером через грязный хак и недокументированную функцию newproxy (для lua 5.1, в более поздних, финалайзеры работают не только для cdata, но и для таблиц). http://pastebin.com/K1yRyE1T

grinchfox
12.01.2017
19:09:08
Я от безделия свою либу с неймспейсами, наследованием и загрузкой классов из файлов и директорий сделал

Правда наверно композировать прототипы лучше чем рекурсивный __index

Google
grinchfox
12.01.2017
19:10:38
По скорости

Alex Фэils?︙
12.01.2017
19:12:18
?

Snusmumriken
12.01.2017
19:15:30
>загрузкой классов из файлов и директорий сделал Но это же обычный require. Модуль с классом возвращает себя, и ты дальше используешь класс как обычно: class = require'class' obj = class(a, b, c) А неймспейсы ты небось setfenv'ами мутил? Пустые юзердаты - в каком виде? newproxy - это, технически, пустой сишный указатель с метатаблицей, который нельзя почти ни для чего использовать, кроме как для __gc-метаметода.

Snusmumriken
12.01.2017
19:19:03
Ну, разве что gmod использует свои фигни.

grinchfox
12.01.2017
19:20:02
А newproxy разве не light user data создаёт ?

Snusmumriken
12.01.2017
19:20:21
Его. Но это не очень важно, потому что __gc :3

grinchfox
12.01.2017
19:20:43
Ну так я для GC и использовал

Мне нужно было узнать когда скрипт потерял хендлер на рт

Snusmumriken
12.01.2017
19:23:20
Кстати, вопрос. Ты знаешь что такое FFI?

grinchfox
12.01.2017
19:24:03
Да, но в garrysmod его нет, а для собственных проектов проще бинды наверно написать

Для игр с клиентскими скриптами это опасно

Snusmumriken
12.01.2017
19:25:35
Ну, и всякие такие конструкции: 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()

Ну, на сишке дефайним структуру, цепляем к ней мета-таблицу и так далее. Так вот, мне было бы интересно как бы ты вписал в качестве ключа метатаблицы - обычную lua-таблицу, когда у тебя нет такого типа на С-стороне.

grinchfox
12.01.2017
19:30:03
Так всеравно же нужна луа таблица

Snusmumriken
12.01.2017
19:30:20
Не, не нужна. Я юзаю ffi-структуры как полноценные объекты, и там могут быть ссылки на lua-объекты. Сама по себе нужна внешняя локальная таблица, в которую ты прописываешь id таблицы, на которую тебе нужна ссылка из ffi-структуры. Ну, условная прокся. А в качестве ключа __newindex к структурам - пишешь поиск по id таблицы в проксе. Структуре достаточно иметь int-поле с id таблицы (которое проявляется если попробовать привести таблицу к строке).

grinchfox
12.01.2017
19:30:42
Прикольно

Лал, entitie

Google
Snusmumriken
12.01.2017
19:51:11
А шо? Тут типа анимационная либа, а сущность - один экземпляр спрайта. Ему нужен доступ к батьке, чтобы заставлять батьку себя обновлять, и доступ к активной анимации, чтобы лениво вычисляться.

grinchfox
12.01.2017
19:52:20
Entity

Snusmumriken
12.01.2017
19:52:31
А, бывает, я просто с французским перемудрил.

grinchfox
12.01.2017
19:53:12
А вообще мне всеравно не нравится ffi на клиентской стороне

Snusmumriken
12.01.2017
19:54:00
Даладна. Просто не выпендриваешься с дёрганьем встроенных в ОС dll-ок и всё. Оно кросс-платформенное и настолько же безопасное, как и обычное приложение на С/С++. Хех, видел порт luajit на psvita.

grinchfox
12.01.2017
19:54:52
Не, просто не очень безопасно для мультиплеера с загружаемыми клиентскими скриптами

Snusmumriken
12.01.2017
19:55:54
Загружаемыми с сервера или с клиента? А ля "сервак выдаёт всем подключившимся все скриптики с сервера, и те их исполняют"

grinchfox
12.01.2017
19:56:18
С сервера на клиент

Иначе достойного моддинга не будет

Snusmumriken
12.01.2017
19:58:16
На практике, обычная lua оказывается достаточно страшной: есть os.execute, через которую можно wget'ом или вендовым аналогом заставить клиентский пк скачать с твоего личного сервера кейлоггер/вор паролей хрома/ещё что-нибудь, и тут же запустить. Или io.popen, с аналогичным действием.

Но это не важно, потому что всё равно мы все умрём :3

Snusmumriken
12.01.2017
20:04:43
Не а. new_os = require'os' new_os.execute(...) Модули-то загружены.

Alexander
12.01.2017
20:05:45
Не а. new_os = require'os' new_os.execute(...) Модули-то загружены.
для своего сервера сделать кастомную сборку lua с отключенными опасными io.* и os.* ?

Snusmumriken
12.01.2017
20:06:27
Вот это уже ближе к истине. Но всегда можно загрузить .dll-ку с аналогичным функционалом и даже хуже.

Alexander
12.01.2017
20:07:00
если знать к ней путь

Snusmumriken
12.01.2017
20:08:36
Дык стандартные вендовые .dll-ки в system32. Тут тебе и cmd, и winsock и полный фарш. Ты не представляешь как изгалялись с браузерным javascript чтобы сделать его ОТНОСИТЕЛЬНО безопасным. А Flash так и вовсе трындец.

Google
Snusmumriken
12.01.2017
20:09:13
Во, что можно сделать - отключить os, io и очистить package.cpath. Тогда оно фиг что найдёт.

Alexander
12.01.2017
20:27:50
(убрал много букв про выбор Lua вместо PHP)

The Dude
12.01.2017
20:32:07
Петпрожект же

Переписывай хоть на ассемблер.

Alexander
12.01.2017
20:32:41
не совсем пет. им много человек активно пользуется :)

The Dude
12.01.2017
20:33:00
Ну если он некоммерческий, то что терять?

Alexey
12.01.2017
20:33:01
Ну так пили параллельно.

lua отлично, python отлично, ruby отлично.

Admin
ERROR: S client not available

Alexey
12.01.2017
20:33:23
Не php и отлично, в общем.

Alexander
12.01.2017
20:33:32
спасибо, ок ))

Alexey
12.01.2017
20:33:55
php тоже нормально, только его нужно уметь готовить, это весьма нетривиальная задача.

Alex Фэils?︙
12.01.2017
20:38:39
Alexey
12.01.2017
20:39:40
телегоботы проще всего на python пилятся, с готовыми активно развивающимися либами там вообще на один день вопросов.

Alexander
12.01.2017
20:42:33
телегоботы проще всего на python пилятся, с готовыми активно развивающимися либами там вообще на один день вопросов.
да вот есть https://github.com/cosmonawt/lua-telegram-bot скорее всего я допилю это под свои особенности

А что за бот?
могу показать одного из, но он очень простой и без связности с остальным всем.

Alexey
12.01.2017
20:44:33
Alexander
12.01.2017
20:46:15
для общего развития: https://github.com/eternnoir/pyTelegramBotAPI
ага, но я не хочу разные части проекта писать на разных языках, когда в них есть общие алгоритмы. а на питоне веб-часть писать не хочу

Alexander
12.01.2017
20:46:37
Google
Alexander
12.01.2017
20:47:51
Давай
(убрал имя бота, кому интересно - пишите в личку) (он писался на коленке за час)

Alexey
12.01.2017
20:48:12
о, а я слышал про твоего бота вроде бы :)

Alex Фэils?︙
12.01.2017
20:48:29
Спс

Alexey
12.01.2017
20:49:28
??
не помню от кого, но друзья шибко любят текстовые квесты :)

Marina
14.01.2017
14:15:30
Добрый день!

Я изучаю Lua, я в правильной группе для знатоков и новичков?

Alexey
14.01.2017
14:16:40
Да. :) Привет, Марина.

Alexander
14.01.2017
14:17:20
мне кажется, что да (хотя я сам тут неделю, стаж програмирования конкретно на Lua пару месяцев, а общий стаж программирования 20+ лет)

Marina
14.01.2017
14:18:43
Урааа, какое счастье. В команде никто язык не знает, спросить некого, в интернетах не всегда понятно, тк не знаю, куда же идти)

Правила вижу, ругаться не намерена, торжественно клянусь не нарушать)

Alexander
14.01.2017
14:20:30
а можно спросить название аэропорта на вашей аватаре? :)

Marina
14.01.2017
14:20:37
Дюссельдорф)

Подскажите, пожалуйста, есть ли у Луа библиотечка, в которой можно проверить по строке, что она uuid? Я подключила вот эту http://tieske.github.io/uuid/ , но тут только генерация, а проверки нет. Если точно, мне нужен аналог джавового UUID.fromString(str)

Alexander
14.01.2017
14:27:22
я б написал регекс простой

Marina
14.01.2017
14:27:43
то есть готового нет?

Alexey
14.01.2017
14:27:49
А зачем?

Marina
14.01.2017
14:28:53
Вроде штука популярная, обычно есть все. Но я на луа без году неделя, так что не знаю как тут принято. каждый сам пишет?

Страница 39 из 307