UtoECat
Вы от темы не уходите - вывод таблицы "а" различается в луа и лове?
в твоём коде даже в одном и том же интерпретаторе вывод различается на следующем запуске из-за другого хеша. В моём случае тоже может быть похожее, но у тебя оно усугубляется тем, что ты дополнительно проходишь уже пройдённые таблицы. Если пробовать только таблицы-массивы(с целочисленными ключами без дырок от 1 до n) на вход - результат будет постоянно одинаковым
UtoECat
по-вашему, от порядка обхода элементов будет зависеть количество обработанных ключей и значений?
да. Потомушо у тебя так работает код, рекурсия проходит и обрывается по разному, в зависимости от того как сложились звёзды и посчитался хеш
UtoECat
вы сами себя слышите?
да. я тебе кинул свой пример кода - потыкай его и почувствуй разницу 😁 она не сильна, но код компактнее и от разницы в порядке элементов результат меньше разнится.
UtoECat
вы сами себя слышите?
ты кста буквально допустил тут ошибку и увеличиваешь значения не для новой вызванной функции, а в том-же цикле если в таблице есть она сама. Так делать нинада. Увеличивай depth в вызываесмой функции на 1 и там-же проверяй на "переполнение"
UtoECat
Андрей
да. Потомушо у тебя так работает код, рекурсия проходит и обрывается по разному, в зависимости от того как сложились звёзды и посчитался хеш
Вы просто не даёте себе труда разобраться в вопросе, и высказываете первое пришедшее на ум предположение. Проблема глубже
UtoECat
Вы просто не даёте себе труда разобраться в вопросе, и высказываете первое пришедшее на ум предположение. Проблема глубже
я тебе код готовый даже написал, и я по твоему не разобрался в вопросе? код у тебя, честно говоря, очень костыльный. Ты пытался решить проблему не совсем хорошим путём и делал всё, чтобы этот путь сохранять, а не попробовать пойти в другом направлении. выхлоп с фиксом какой-то такой. что не оч.
UtoECat
вот твой "пофикшенный" код. Но под выхлоп в терминал он совсем не годится. Скажи какая у тебя задача вообще стоит?
Андрей
При чем тут твой код? Он делает совершенно другое. Фишка совсем не в коде, а в различии луа
UtoECat
При чем тут твой код? Он делает совершенно другое. Фишка совсем не в коде, а в различии луа
нет никакого различия. Я тебе своим кодом это показал. И он делает примерно такое-же, только другим путём
UtoECat
При чем тут твой код? Он делает совершенно другое. Фишка совсем не в коде, а в различии луа
различия там в версии, одна 5.1(с jit), другая 5.4.6. Но по работе с таблицами они абсолютно идентичны, это 100%.
Андрей
нет никакого различия. Я тебе своим кодом это показал. И он делает примерно такое-же, только другим путём
В данном случае дело не в решении конкретной задачи, а в отличии луа в лове и в стандарте
Snusmumriken
Он просто неопределён. Точка. Добавил других ключей, изменился хеш, что угодно.
UtoECat
D:\bin\Lua\5.1.5 D:\bin\Love\11.4\lua51.dll
идентичны. Я тебе ща diff си кода интерпретатора в студию завезу, если будешь продолжать выёживаться 😁
Snusmumriken
А ещё в love2d на самом деле используется концептуально иной интерпретатор от других авторов под названием Luajit, и там другая хеширующая функция. Это вне стандарта. Хочешь одинакового — сортируй по алфавиту например.
Luсky
или к ключам приколотить степплером
Андрей
А ещё в love2d на самом деле используется концептуально иной интерпретатор от других авторов под названием Luajit, и там другая хеширующая функция. Это вне стандарта. Хочешь одинакового — сортируй по алфавиту например.
Я про это и пытаюсь сказать - реализация луа разная. И в данном случае порядок обхода ключей не ДОЛЖЕН оказывать влияние на логику работы ТАКИМ ИМЕННО образом
Snusmumriken
Это вне стандарта. Всё что вне стандарта может быть каким угодно.
Snusmumriken
И стандарт луа — неопределённый порядок. Всё.
UtoECat
порядок здесь не при чем
я буквально кусок твоего кода показал где эта ошибка совершена
Snusmumriken
Вот держи. Задача выполнена. https://github.com/kikito/inspect.lua
Андрей
А на логику вполне окажет, если логика зависит от порядка — будет оказывать.
докажите кодом именно тем, что я прислал - модифицируйте, только без жульничества
Snusmumriken
докажите кодом именно тем, что я прислал - модифицируйте, только без жульничества
Я не буду доказывать очевидную вещь. Если ты сделал логику зависящей от порядка, то неопределённый порядок окажет влияние на результат. Если А => B то A => B. Всё. Логика. Первый курс.
UtoECat
посмотри сюда и подумай
если в таблице сначала попадётся сразу три ключа/значения, то твоя функция забудет нафиг о других ключах
UtoECat
вот твой "пофикшенный" код. Но под выхлоп в терминал он совсем не годится. Скажи какая у тебя задача вообще стоит?
ещё раз тыкну на фикс твоего кода. Но лучше мой вариант, anyway. Он хотя-бы читабельнее, и не пишет одно и то-же по сто раз
Snusmumriken
Так вот. Для того чтобы порядок не влиял, мы сначала радостно вытряхиваем все ключи-значения в списочек, потом сортируем его начинаем по ним проходить. Тогда оно всегда будет выглядеть одинаково.
Snusmumriken
Ммм, тут да, неприятненько.
UtoECat
идентичны. Я тебе ща diff си кода интерпретатора в студию завезу, если будешь продолжать выёживаться 😁
проход по таблице в луашке (next, pairs) работает так : в таблице есть hash_part и array_part. array содержит, внезапно, значения в массивной части таблицы (от 1 до n) hash_part содержит другие числовые/нечисловые пары ключ=значение основная жопа - поддержка оптимальных длин этих частей, сборка мусора, изменение размера (и рехеш) hash_part и, доступ, в некотором плане. Но общий алгоритм next ВСЕГДА одинаков, что в luajit(на скрине), что в ванильной луашке : - при ключе nil начинаем с условного начального индекса - ищем следующий ключ в array_part (индекс 0 .. размер_array_part - 1) игнорируя дырки (nil значения) - затем в hash_part (размер_array_part .. размер_array_part + размер_hash_part) - в ином случае возвращаем nil luajit безусловно добавляет свои особенности в реализацию таблицы, меняет хеш-функцию и прочее и прочее, но суть функции next (=> pairs) всегда одна.
UtoECat
luajit выдаёт внутренний индекс следующего ключа сразу же из keyindex, ванильная луашка же делает поиск индекса данного ключа, после чего его инкрементирует его на единицу, но алгоритм next, в любом случае, ОДИНАКОВ. (код ванильной луашки ещё и читать приятнее)
UtoECat
Igor
вы сами себя слышите?
Пожалуйста, хватит считать себя умнее всего чата, не имея ни малейшего опыта в программирвании на Lua. Это дико раздражает.
Snusmumriken
Пожалуйста, хватит считать себя умнее всего чата, не имея ни малейшего опыта в программирвании на Lua. Это дико раздражает.
Опыт таки возможно есть, просто не факт что релевантный. Функции с запусканием ссылочных типов в рекурсию всё таки пишутся.
0xSU
За что...
mb6ockatf
За что...
можно ссылку?
Snusmumriken
Ахахаха
Snusmumriken
Это кликбейт https://www.youtube.com/shorts/FFZ7jb9c1JU?feature=share
Snusmumriken
Классические проблемы ужасности языков — массивы с единички.
🇺🇦daSXam🏴󠁧󠁢󠁳󠁣󠁴󠁿
Посвящается этому челу с видео.
Snusmumriken
Ммм
Snusmumriken
Ну реакция в общем-то соответствует претензиям, но я был бы выше этого.
Luсky
Та похуй, не я ведь пел.
Добрый просто. А мог ведь и флягеншплянгером полоснуть.
Hello, World! 🎄
За что...
Кому не все равно?
Hello, World! 🎄
Он не поймет
Hello, World! 🎄
Классические проблемы ужасности языков — массивы с единички.
Ну кстати когда я пишу игру мне тайлы приходится смешать ещё и не их размер, т.к 1 умножение идёт на 1, а не на 0.
Hello, World! 🎄
Сделай индексацию с нуля, делов-то.
Да там всего-то +2 операции идёт
Hello, World! 🎄
Так что не важно
Snusmumriken
У меня в тайловых картах ситуация ещё проще.
Hello, World! 🎄
А я когда только программировать начинал (первый яп Си), изучил массивы и пошел делать игру, так я через функцию сделал 2d array из одномерного
Hello, World! 🎄
Только там несколько функций было для set и get
Hello, World! 🎄
На вход координаты и значение для set, в get на вход тоже на выходе int значение
Hello, World! 🎄
А что, было очень даже удобно в 1d array это всё делать, т.к ссылку на него без проблем можно было передать
Hello, World! 🎄
А что, было очень даже удобно в 1d array это всё делать, т.к ссылку на него без проблем можно было передать
А где многомерные там уже какие-то ошибки были с передачей указателя
Luсky
https://www.redblobgames.com/
Snusmumriken
А где многомерные там уже какие-то ошибки были с передачей указателя
Многомерный сишный массив так-то это тоже одномерный, и указатели на его элементы точно так же вычисляются со смещением. И у него определённый порядок обхода (прямой) оказывается в стотыщ раз быстрее поперечного ровно по этим причинам.
0xSU
Кому не все равно?
мне, я поржал. видос есть ниже