
fgntfg
08.06.2017
14:05:27
Lua напоминает мне старый добрый Си.

Vadim
08.06.2017
14:28:44
ИНТЕРЕСНО ПОЧЕМУ ТАК МОЖЕТ БЫТЬ
:)

Sergey
08.06.2017
15:37:54
http://www.hostingadvice.com/blog/lua-founding-developer-shares-language-advantages/

Google

Рома
08.06.2017
19:34:06
Ку, все! Я недавно начал покрывать тестами большую аппу и удивился, что rspec чертовски удобен! для руби, а вот для луа что скажете? есть что-нибудь адекватное rspec'у? Нагуглил такое: https://olivinelabs.com/busted/, - функции вроде есть describe и it, но непохоже, что есть ленивые переменные let и subject и как бы тут факторить в бд

Group Butler [beta]
09.06.2017
04:56:30
Добро пожаловать в чат pro.lua, Timur! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Волчик
12.06.2017
04:07:45
А luapower вообще живой?

Snusmumriken
12.06.2017
06:11:40
Ну так : )
Luarocks - точно, luapower - неплохая база бинарников.

Group Butler [beta]
13.06.2017
08:23:35
Добро пожаловать в чат pro.lua, Gryn! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

fgntfg
13.06.2017
14:27:49
Господа, вопрос: в каких случаях 2 объекта будут ==?

Tverd
13.06.2017
14:29:45
если таблицы - то адреса

fgntfg
13.06.2017
14:30:52
Ага. Ясно понятно

Tverd
13.06.2017
14:31:24
грубо говоря
a = { 1,2,3,4 }
b = a
print(a==b) -- true

fgntfg
13.06.2017
14:31:31
А есть код по удалению дублей таблиц из таблицы?
@tverd я понял.

Tverd
13.06.2017
14:32:37
такого кода лично я не видел, но думаю это не сложно

Philipp
13.06.2017
19:19:42

Google

Philipp
13.06.2017
19:20:00
Таблица, в которой есть другие таблицы?
Используй адрес вложенных таблиц как ключ для этой самой таблицы, тогда дублей не будет ¯\_(ツ)_/¯
Аля
t1 = {}
t2 = {}
t1[t2] = t2
Или ты имеешь ввиду разные объекты, но с одинаковым наполнением?

Snusmumriken
13.06.2017
19:52:52
А есть код по удалению дублей таблиц из таблицы?
Ну, самое простое:
function removeDoubles(tbl)
local temp, copy = {}, {}
for k, v in pairs(tbl) do
if not temp[v] then
temp[v] = true
copy[k] = v
end
end
return copy
end
Удаляет дубли объектов в списке, в том случае, если значения идентичны.
Кстати, в метатаблицах можно переопределить метод __eq, который будет возвращать true если функция сравнивает по содержимому.
В моей векторной библиотеке (вот тут: https://pastebin.com/i7qC1aKn) - оно работает по содержимому векторов

fgntfg
13.06.2017
19:54:44
То чувство когда велосипед изобрели за тебя
Спасибо

Snusmumriken
13.06.2017
19:55:07
Ну знаешь, это такой простой велосипед, который можно написать за пятнадцать секунд, что я и сделал : )

fgntfg
13.06.2017
19:55:19
Согласен.
Я вот думаю, нет ли более изящного метода.

Snusmumriken
13.06.2017
19:56:06
Подозреваю, что самый изящный метод - переопределить __newindex, чтобы он просто не заносил дубликаты, но для этого требуется лишняя внешняя табличка, наполненная ссылками (может сидеть в замыкании самого __newindex и нигде не светиться).

fgntfg
13.06.2017
19:57:04
Да. Пожалуй так. И смотреть indexOf

Snusmumriken
13.06.2017
20:00:02
Ну смотри:
function createTableWithoutDoubles()
-- чтобы не было утечек памяти из-за этой таблички
local temp = setmetatable({}, {__mode = 'kv'})
local function __newindex(self, key, value)
if not temp[value] then
rawset(self, key, value)
temp[value] = true
end
end
return setmetatable({}, {__newindex = __newindex})
end
a = {}
b = {}
tbl = createTableWithoutDoubles()
tbl.yo = a -- всё ок
tbl.foo = b -- и снова всё ок
tbl.bar = b -- не прокнет, ибо табличка 'b' уже тут присутствует, под ключом foo
Нормуль?

fgntfg
13.06.2017
20:14:15
Ага. А зачем в явном виде указывать тип для таблицы? Key-value это же default не?

Snusmumriken
13.06.2017
20:18:24
Ты про __mode?
По дефолту, там пусто, а 'kv' указывает, что если на объект осталась ссылка только в ключе или только в значении этой таблицы (и других, с аналогичным режимом) - то их можно удалять и из этой таблицы, и из глобального пространства. Хотя мб туда актуальнее пихнуть 'k'. Почитай про это
https://habrahabr.ru/post/163679/

The Dude
14.06.2017
16:32:28
@Snusmumriken а ты в мэйл нн ходил?

Snusmumriken
14.06.2017
19:19:18
нн?

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

Google

Alexey
17.06.2017
18:49:21
https://www.youtube.com/watch?v=fUP6ZpVGJOo&app=desktop
Возможно, кому-то интересно.

Tverd
17.06.2017
19:22:32
Интересно, спасибо

Alexey
17.06.2017
19:39:05
правда чую, там можно мозг вывихнуть, пытаясь понять контекст)

Alexander
17.06.2017
20:31:18
таких докладов несколько
посмотрите в том же треке доклад Игоря Эрлиха

Tverd
17.06.2017
21:02:54
Посмотрим, если найду


Snusmumriken
17.06.2017
22:21:36
По поводу производительности, я уже писал, правда, в другой чатик:
"> даже если luajit не хитрит и не превращает этот цикл во что-то более простое, не факт что на более сложном коде он будет всё так же быстр
Он и будет медленнее. Быстрее всего он выполняет то что трассируется и прогревается. Фактически, собирая из наиболее часто выполняющихся команд (буквально, куски функций, которые вызывают друг друга в определённом порядке). То есть, если у тебя в цикле есть много условий, то если регулярно выполняется один набор условий - из него составляется скомпилированная трасса, которая будет жутко быстрой. А прогрев - это просто количество выполнений трассы.
Карочи, допустим, у нас есть такой код:
function foo(x)
if x > 0 then
return x
else
return -x + 1
end
end
function bar(value)
if type(value) == 'table' then
for i = 1, #value do
value[i] = foo(value[i])
end
return value
elseif type(value) == 'number' then
return foo(value)
end
end
То при вызове, допустим, bar(10) у нас образуется примерно такая трасса:
if type(value) == 'number' then
return value
end
А при bar({-10, 20, -30}) - сразу две трассы, вот такие:
if type(value) == 'table' then
for i = 1, #value do
value[i] = -value[i] + 1
end
return value
end
и
if type(value) == 'table' then
for i = 1, #value do
value[i] = value[i]
end
return value
end
И при каждом вызове одной и той же трассы, у неё повышается приоритет, по достижении некоторого значения в котором, она таки компилируется в машинный код, но со временем приоритет падает, чтобы не скомпилить вообще все трассы, ибо количество допустимых трасс, в мало-мальски крупном приложении, может превышать количество атомов во вселенной (можно примерно вычислить, как факториал от встречания if + else в коде).
Поэтому даже одно условие в цикле, при распределении вариантов как 50/50, сразу увеличивает количество вызовов для компиляцией вдвое. Очень сложные условия, с равномерным распределением вызовов трасс, могут не скомпилироваться даже с охренительно огромным количеством вызовов: просто не хватит времени на разогрев.
Основная задача - быть проще, но приложения в бесконечных.
JS-движок v8 делает примерно то же самое, только там поменьше оптимизаций и похуже баланс компиляции при энном количестве вызовов. А ещё оверхед на всю js-херомундию, ибо изначально спроектировано не очень хорошо."
Если в двух словах: "Больше простых циклов с минимумом дополнительных условий - и всё будет чики-пуки".
Да, luajit автоматически кеширует функции, поэтому можно не кешировать. Хотя если либа может использоваться и там и там - всё таки стоит.
function foo()
local t = {}
-- кеш функций помогает в ванильной луа
-- но в jit на это пофигу
local sin = math.sin
for i = 1, 100000 do t[i] = sin(i) end
return t
end


Alex Фэils?︙
18.06.2017
11:30:39
Хм. Меня тут попросили упомянуть про канал, прсвященный сталкеру. Видимо, слишком буквально восприняли правила в пине. Ну а т.к. сталккр я люблю, то почему бы и нет. Присоединяйтесь, если хотите: @stalkerwelle

Group Butler [beta]
18.06.2017
13:36:43
Добро пожаловать в чат pro.lua, Null! Ознакомься с правилами чата (в описании и прикрепленном сообщении), и присоединяйся к обсуждению.

Alxius
18.06.2017
15:25:37

Alxius
18.06.2017
15:26:00
Ведьмак 3 блин уже идёт , а Сурвариум нет. видимо он круче ВЕдьмака 3 по всем параметрам. Игра тысячелетия не меньше. Даже комп после апгрейда и то не тянет. От её крутизны можно вообще офигеть. Извините за оффтоп.
Вообще могу что нибудь связанное с линукс или полезное для отрекламировать в своей группе на 1750 чел в ВК.

Alex Фэils?︙
18.06.2017
15:31:00

Alxius
18.06.2017
15:31:19
я новенький я не отличаю каналы от чатов.
для меня если нельзя постить - значит плохой канал
я сразу обычно отписываюсь
это также легко как с программами на ПК - если не идёт на линукс - значит некачественная программа, авторы не осилили нажать кнопочку портировать.
а если есть канал без чата то обязательно есть ему парный канал для чата или нет?

Google

Alex Фэils?︙
18.06.2017
15:33:34
Вот у моего канала чата нет, кроме флудильни?

Philipp
18.06.2017
17:00:57

Alex Фэils?︙
18.06.2017
17:01:43

Philipp
18.06.2017
17:02:22
Лол

Alex Фэils?︙
18.06.2017
17:03:59
А вообще, портирование софта – не очень простая задача. И не сложная, если софт писался с уделом на портируемость. Мне для портирования бота с линя на винду потребовалосьтпоправить три строчки, где вижал студия была более беспощадна к стандарту, чем шланг

Admin
ERROR: S client not available

Philipp
18.06.2017
17:07:00
Угу. Но иногда бывает так, что игра пишется на каком-нибудь движке, которй изначально не предполагает портирование
Раньше, насколько я помню, таким движком был Юнити
А само по себе портирование крупных проектов, даже если учли задел на это, довольно муторный процесс, если кода больше, чем пара тысяч строк – считай, чинить всякий рендер-обращение к системе-звук и всё подобное будет мучением
Посему стоит изначально пилить всё на чем-то портируемом, аля OpenGL для графики, и всякие Open-framework'и для звука/музыки и всякой такой радости
Могу, конечно, ошибаться, т.к. опыта в портировании толком не было и говорю на уровне «приятели/друзья/интернет рассказывал»

The Dude
18.06.2017
17:31:13
Зачем писать игру запределы консолей, мобилок и винды?

Philipp
18.06.2017
17:46:35

Vadim
19.06.2017
06:36:25

Alxius
20.06.2017
07:37:19
Подскажите кто нибудь чего они хотят. уже 3 часа и так и так пост кручу разместить не могу текст и код уже похудели на 70% 4 строки всего блин осталось а им все чёто не так.

Чай
20.06.2017
07:51:46
Отступы на нулевом уровне вложенности точно нужны внутри <code></code>?

Vadim
20.06.2017
08:06:55

Google

Alxius
20.06.2017
08:07:30
офигеть принялось я уже и скобки у тегов разные менял.
спасио

Vadim
20.06.2017
08:09:11
https://www.lua.org/about.html#name

Alxius
20.06.2017
08:09:46
и цо ? ну Lua называется Lua и цо ?
я уже видел эту ссылку

Vadim
20.06.2017
08:10:03
> Please do not write it as "LUA", which is both ugly and confusing, because then it becomes an acronym with [different meanings](http://acronyms.thefreedictionary.com/lua) for different people. So, please, write "Lua" right!
вот что

Alxius
20.06.2017
08:10:22
я пишу так как шифт нажмётся
если шифт глючит ja mogu pisać wot tak

Vadim
20.06.2017
08:10:39
а должен писать так, чтобы другим было удобно и приятно тебя читать

Alxius
20.06.2017
08:11:04
стараюсь. но клавиатура слишком дорогая и всё ещё сломанная

Mikhail
20.06.2017
19:04:44
Фྀлууудᮢ!

Alxius
20.06.2017
19:06:17

Mikhail
20.06.2017
19:06:39
???

Alxius
20.06.2017
19:07:04
у меня толерантность к размеру букв. мне до лампочки каких оно размеров

Mikhail
20.06.2017
19:07:10
Просто педанты, лишь бы подрюкать