
Vadim
25.03.2017
07:41:12
Рома про массивы частенько плачут ещё
то им нумерация с 1 не нравится, то nil, то ещё чего
Вот, например, из "поехавших": https://m.facebook.com/olga.onoyko/posts/1131376423638352

Рома
25.03.2017
07:43:25
Согласен, стандартного мало, но это спорные вопросы на самом деле: if a in tbl - тут лучше всего заводить отдельную таблицу [value]: true, а для этого какую-нибудь кастомную функцию. Даже в доках луа часто видел "в луа нет этого и этого, потому что это можно реализовать по-разному, вот и делайте как хотите". Лично я от этого подхода тащусь, это как arch с kiss подходом

Google

Рома
25.03.2017
07:46:38
keys и values - в две-три строчки малюсенькая функция, нет, надо плакать что нет по стандарту

Tverd
25.03.2017
07:48:45

Рома
25.03.2017
08:00:24
На чистом луа может и правда неудобны многие вещи, зря мунскриптом никто не пользуется, это как zero cost абстракция: вместо if a in v можно
for item in *b
if a == item
и дальше логика
писать совсем чуть-чуть дополнительно, зато нет лишних вычислений

Tverd
25.03.2017
08:02:38
ну почему никто ))))

Group Butler [beta]
25.03.2017
10:01:24
Добро пожаловать в чат pro.lua, Maxim! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Snusmumriken
25.03.2017
18:48:17

Рома
25.03.2017
18:50:59
Snusmumriken, пожалуйста, пруф про тормоза мунскрипта? По-моему вполне логично все транслирует, лишнего не замечал
Да ну нет, не верю, разница однозначно от нуля, а не от полутора, а вот чтобы он замедлял работу в тринадцать раз! Да ну!? Максимум на десятую

Snusmumriken
25.03.2017
18:54:24
Ой, там где мунскрипт делает несколько лишних условий, и высоконагруженный код становится перегруженным обычными if-else.
Там производительность может очень резко упасть.
Почитай как работают трассирующие компиляторы.

Tverd
25.03.2017
18:55:28
Да нужно им пользоваться разумно... И знать где эта производительность падает... Смотреть луа код полученный. И не будет никаких падений

Рома
25.03.2017
18:56:21
просмотрел http://moonscript.org/reference/, все таки, где он тут хоть одно лишнее условие добавляет?

Google

Рома
25.03.2017
18:57:45
циклы, которые превращаются в массивы, ни тут, ни в coffee не использую, довольно неясно что там внутри, а в остальном вполне чисто

Tverd
25.03.2017
18:58:15
my_function = (name="something", height=100) ->
print "Hello I am", name
print "My height is", height
наверно имелось ввиду такое

Snusmumriken
25.03.2017
18:59:29
Вот это меня и раздражает.
Чтобы не сделать говняху на js, нужно реально быть Ниндзя На JS. Потому что что-то казалось бы обычным и очевидным, но работает в 100500 раз медленнее чем что-то то же самое, но чуть по другому описанное.
Имелось ввиду еще большое количество loadstring'ов, которые компилируется очень специфически.

Рома
25.03.2017
19:00:03
да нет, там проверки нужны чтобы дефолтные значения присваивать. (это про функцию)

Tverd
25.03.2017
19:00:08
Ты чего-то путаешь, нет лоадстрингов...

Рома
25.03.2017
19:00:16
Может tostring?
"#{}" можно использовать, а можно и ..

Snusmumriken
25.03.2017
19:00:51
Ребят, каким образом работает moonscript, скажите мне пожалуйста?

Tverd
25.03.2017
19:01:09
запускаешь moonc и компиляешь moon код в lua код
потом что хочешь с ним, то и делай

Snusmumriken
25.03.2017
19:01:46
1. Парсим файл.
2. Находим конструкции. Преобразует их в соответствующий lua-код и запускаем loadstring'ом.

Tverd
25.03.2017
19:02:09
нет, ничего не запускаем... на выходе lua файл...
вот потом его и запускаем

Snusmumriken
25.03.2017
19:02:30
Оки. Я пользовался динамическим мунскриптом.
Который на лету подгребает кучу всего, там же парсит. Смотрю потом дамп виртуальной машины - а там большая часть трасс - о трансляции мунскрипта.

Рома
25.03.2017
19:04:37
Это лол, тогда прошу дать ему ещё шанс, но с трансляцией по файлам, мун классная штука

Snusmumriken
25.03.2017
19:05:00
Посмотрим

Рома
25.03.2017
19:05:48
moonc довольно неудобно следит за файлами и порой коряво срабатывает на изменения, кому-нибудь интересен мой node.js'овый сборщик?

Snusmumriken
25.03.2017
19:06:25
Да ты прям большой любитель мунскрипта :3

Рома
25.03.2017
19:06:29
хотя, это можно делать и gulp'ом и прочими

Google

Snusmumriken
25.03.2017
19:07:37
Я просто предпочитаю чуть больший контроль за происходящим, и сишные библиотеки.

Tverd
25.03.2017
19:07:53
я питоном сибираю ))) свой мэйк написал
Снус, дык контролируй потом. Код в принципе читабельный ) В принципе ))))))))))))))

Alexander
25.03.2017
19:09:41
Какой компилятор на mac лучше поставить? подскажите новичку
mac не когда не пользовался

Snusmumriken
25.03.2017
19:10:23
Вот это мне и лень.
Мелкие улучшалки синтаксиса делаю в виде библиотек. Те же стрелочные функции и функциональщину в массивах. Это быстро.

Tverd
25.03.2017
19:11:35

Snusmumriken
25.03.2017
19:12:24
все то же что и на линуксе...
Погоди, мы же не знаем, что человек хочет компилировать, и не факт что это про мунскрипт: человек может перепутать компилятор и интерпретатор, например.

Alexander
25.03.2017
19:12:57
Скорее не так выразился поставил андроид студио + нужен хороший, редактор кода из free

Snusmumriken
25.03.2017
19:13:33
Ох, а сейчас я ничего не понял : )

Tverd
25.03.2017
19:14:47
вот теперь и я не понимаю )

Tverd
25.03.2017
19:14:55

Snusmumriken
25.03.2017
19:15:17
Давай объясняй, что ты хочешь сделать.
Прицепить lua к проекту на Android?

Alexander
25.03.2017
19:16:03
Да
Или это невозможно

Snusmumriken
25.03.2017
19:17:04
Вот, уже лучше.
Это возможно, но не ко мне, увы.
Уверен что есть бриджи между java и lua, надо загуглить.

Sergey
25.03.2017
19:17:26
JNLua

Snusmumriken
25.03.2017
19:18:27
Такого много:
https://www.google.ru/search?q=lua+in+android+app

Tverd
25.03.2017
19:19:29
тоже не юзал такую связку.

Google

Snusmumriken
25.03.2017
19:20:41
Так как неизвестно, как именно ты хочешь юзать луа (или код на java скриптуется, или небольшие расширения, или только гуй на луа), тут тебе не дадут инфы. Люди хорошо отвечают на конкретные вопросы с наиболее полным описанием проблемы : )

Alexander
25.03.2017
19:23:06
Ок спасибо, буду гуглить может и найдется решение.

Snusmumriken
25.03.2017
19:24:12

Vlad
26.03.2017
12:08:15
вопрос не по теме, но интересен
знает ли кто что либо об использовании облака, возможности его подключения к сайту
меня интересует использования облака как хранилища всех ресурсов используемых на сайте
—------—
к примеру картиночки-шмартиночки, какие то полновесные файлы в целом
—------—
никто с таким никогда не сталкивался?
—------—
ну или в целом какая то интеграция облачного хранилища в свои проекты но в том смысле что бы не просто просматривать содержимое, а что бы оно непосредственно работало
—------—
звините за оффтоп

Sergey
26.03.2017
12:13:22
CDN это называется.

Snusmumriken
26.03.2017
14:44:34
Ребятки, мутю либу для общения по байтоёбским протоколам.
Кому ннада?
Суть: транслятор байтов в цифры и обратно по ключам, мб взаимодействие с флагами.

Admin
ERROR: S client not available

Snusmumriken
26.03.2017
14:49:39
Ну, к примеру, протокол nat-pmp, который позволяет пробивать порты и узнавать свой глобальный адрес.
Там применяются такие таблички:
NAT-PMP adress request:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers = 0 | OP = 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Тут просто два нулевых байта.
Но суть в том, что когда этой фигни становится много, с ней крайне неудобно работать из языков с классом строк.
Я прост хочу преобразовывать это в табличку, типа:
msg = {Vers = 0, OP = 0}, для комфортной работы.
Получится что-то типа этого:
req = protolol_mapper{
{Vers, 1},
{OP, 1}
}
где в первой табличке - Vers - ключ, 1 - количество байт, а положение таблички относительно других - позиция.
И дальше:
data = req.decode('\0\0')
data.Vers --> 0
data.OP --> 0
и наоборот:
req.encode{Vers = 0, OP = 0} --> '\0\0'
Мало ли тут есть такие же байтоёбы как я.

Sergey
26.03.2017
14:57:54
Штука классная. В будущем может пригодится.

Vadim
26.03.2017
14:58:20
А-ля google protobuf?

Snusmumriken
26.03.2017
14:59:09
Только написать осталось : 3
Не знаю что такое protobuf, сам начал активно байтоёбить (в т.ч. в своих протоколах), и понял что без подобного проблемно.
Ух ты, а протобуф забавный.
Хм, кстати, на тему бит: можно использовать дробные числа 0.1 - 0.8 для доступа к отдельным битам. Ну там, в общую последовательность загнать битики с байтиками.

Влад
26.03.2017
15:03:13
А этой штукой можно как-то удобнее собирать посылку из байтов для отправки в порт? А то сейчас они у меня хранятся в HEX(т.е. как строка FFAE8D), в зависимости от условий выбираются if-ами, затем преобразуются в строку простой функций fromhex и склеиваются.

Snusmumriken
26.03.2017
15:03:38
Во-во, для этого и хочу использовать.

Vadim
26.03.2017
15:03:46
интересно. хотя вроде повсеместно используют интервалы типа 31-0 чтобы указать нужные биты, нет?

Snusmumriken
26.03.2017
15:03:59
Можно и так, но это же луа :3
Индексации с единички, всё такое.

Влад
26.03.2017
15:05:09
https://github.com/unwireddevices/unwired-smarthome-router/blob/master/router.lua вот так у меня сейчас

Google

Snusmumriken
26.03.2017
15:05:36
Карочи, обдумаю на тему доступа к битам, скорее всего они будут ключами в любом случае.

Sergey
26.03.2017
15:06:45
Для портов индексацию лучше с нуля, конечно.
Там же спецификации

Vadim
26.03.2017
15:07:59
стоит подумать таблицы медленные, но и строки не лучше
я начал писать (де)сериализацию на pure 5.1 Lua, но с внутренним стандартом так и не определился. кстати поддержку double худо бедно запилил и работает, если надо


Snusmumriken
26.03.2017
15:08:10
Ключи! Ты сам сопоставляешь ключ с битиком!
стоит подумать таблицы медленные, но и строки не лучше
я начал писать (де)сериализацию на pure 5.1 Lua, но с внутренним стандартом так и не определился. кстати поддержку double худо бедно запилил и работает, если надо
Таблицы медленные, но ничто не мешает сделать реальный финт ушами, под названием: "инициализируем буфер из таблиц заранее, используем и возвращаем обратно в буфер". Тут полностью убирается нагрузка на сборку мусора и разметку памяти. Условно, ты запрашиваешь буфер, набиваешь в него данные, транслируешь в строку (быстрыми командами, я умею) и сдаёшь обратно.
При декодировании - возвращаем тот же буфер, который стоит потом сдать, или ссылка на него соберётся мусорщиком, и в этот же момент он освободится. Осталось только придумать, каким образом определять, что на объект осталась только одна ссылка.

Vadim
26.03.2017
15:10:42
у меня такой задачи не стояло :) С Богом!

Snusmumriken
26.03.2017
15:20:48
А сама циферка - длина числа в битах. Ну там, байтоёбство и нужно для кодирования циферок и флагов.
Хотим выдрать четырёхбитную циферку? Загоняем четвёрку. После неё - циферка в один бит? Пихаем единичку.
Единственное преимущество по сравнению с супер-пупер байтоёбской библиотекой - эта штука уже написана и работает :)

Рома
27.03.2017
19:07:48
Как лучше для производительности, если нужен один модуль в разных файлах: require 1 раз и сохранить его глобально или require на один модуль в разных местах это совсем ничего плохого?

Tverd
27.03.2017
19:09:30
ничего плохого... рекваир кешируется
то есть модуль инициализируется один раз, а потом хранится в спец таблице

Рома
27.03.2017
19:12:27
хм... и сборщику мусора они не подвластны?

Tverd
27.03.2017
19:12:51
надо почитать, ничего такого не слышал, что сборщик его чистит

Рома
27.03.2017
19:14:48
с одной стороны чепуху обычно не реквайрят и это потом всегда нужно будет, с другой стороны - сделал require разок для единоразовой задачки, и программа будет потом до конца жизни этот модуль в памяти держать

Tverd
27.03.2017
19:20:29
можно выгружать

Рома
27.03.2017
19:23:25
package.loaded[name] = nil, круто, тогда все супер

Tverd
27.03.2017
19:26:09
да, искал что бы показать, а ты сам нашел.... все верно

Philipp
27.03.2017
20:33:29
Мне кажется, package.loaded – глобальная таблица, поэтому GC с ней ничего сделать не сможет