@ProLua

Страница 100 из 307
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
такого кода лично я не видел, но думаю это не сложно

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
Хм. Меня тут попросили упомянуть про канал, прсвященный сталкеру. Видимо, слишком буквально восприняли правила в пине. Ну а т.к. сталккр я люблю, то почему бы и нет. Присоединяйтесь, если хотите: @stalkerwelle
Бестолковый канал, нельзя оставить пост с вопросом как Survarium наконец запустить на линукс так чтобы он прошёл дальше лаунчера и античита. ато надоело что будучи на линукс считаешься за читера по умолчанию. (типа с эмулятора сидишь)

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

Вообще могу что нибудь связанное с линукс или полезное для отрекламировать в своей группе на 1750 чел в ВК.

Alxius
18.06.2017
15:31:19
я новенький я не отличаю каналы от чатов.

для меня если нельзя постить - значит плохой канал

я сразу обычно отписываюсь

это также легко как с программами на ПК - если не идёт на линукс - значит некачественная программа, авторы не осилили нажать кнопочку портировать.

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

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

Philipp
18.06.2017
17:00:57
это также легко как с программами на ПК - если не идёт на линукс - значит некачественная программа, авторы не осилили нажать кнопочку портировать.
Покажи мне кнопочку портировать, если что-то было написано на C# с использованием какого-нибудь WinAPI

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'и для звука/музыки и всякой такой радости

Могу, конечно, ошибаться, т.к. опыта в портировании толком не было и говорю на уровне «приятели/друзья/интернет рассказывал»

Philipp
18.06.2017
17:46:35
Зачем писать игру запределы консолей, мобилок и винды?
Ну, мы же не про игры, а в целом про софт

Alxius
20.06.2017
07:37:19


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

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

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
Фྀлууудᮢ!

Mikhail
20.06.2017
19:06:39
???

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

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

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