Войти
Инди-ЮнитиФорум

Мастер класс по хорошему коду в юнити (25 стр)

Advanced: Тема повышенной сложности или важная.

Страницы: 124 25 26 27 28 Следующая »
#360
(Правка: 22:01) 21:59, 31 янв. 2021

Alprog
ты запезделся уже, я жду тестов ... кто-то обещал )

Alprog
> Я и код покажу, и exe пришлю. Ничего не утаю.


#361
22:01, 31 янв. 2021

tac
> сейвы, это все что сохраняется в файл
Вот это ездун задом! Оказывается, юнити-сцены это тоже сейвы? Неплохо, неплохо. Это прям выдающиеся отмазки.

Но даже если так. Дело-то не меняет. У меня тормозит только в редакторе, а в игре не тормозит. А у тебя, если у тебя одна текстовая сериализация, тормозит везде. А если у тебя одна бинарная сериализация, то ты не можешь файлы мержить во время разработки. Что на это скажешь? Сделаешь две сериализации, да?

#362
(Правка: 22:02) 22:02, 31 янв. 2021

Alprog
> юнити-сцены это тоже сейвы
конечно, а что еще - сейвы сцен :)

#363
(Правка: 22:06) 22:06, 31 янв. 2021

tac
> ты запезделся уже, я жду тестов ... кто-то обещал )
Я не буду делать тестов, если их результаты ничего не значат.
Ты согласился сравнить конкретную вещь, а потом, когда я уже начал писать, спохватился, зассал и придумал отмазки задним числом, почему это не считается.
Потом сморозил глупость про то, что разница невелика, но насколько будет считаться "велика" говорить отказываешься. Даже если разница будет в миллион раз, ты скажешь "ой, я не обязан был этого знать. я всё равно спец".

Если будет конкретный критерий, который рассудит, кто прав, тогда я буду писать тест. Просто так тратить время - нет.

#364
(Правка: 23:31) 22:09, 31 янв. 2021

Alprog
> ты написал текстово и сказал, что это оптимально
какой же ты смешной, я делал акцент на другое ... на то, что мне сранные движки для этого не нужны ... и тем более твои велосипеды ...

ты понимаешь, что я в прямом эфире - сделал вызов не тебе, а всем доморощенным движкам сериализации (кроме мелкомягих), и ты обосрался защищая их ... пару демонстраций кода и ты говоришь (и это против целой библиотеки и месяца разработки твоего велисипеда)

Alprog
> В редакторе загрузка диалогов у меня сопоставима с твоей текстовой версией, но
> в игре у меня загрузка этих же диалогов сильно быстрее и сопоставима с твоей
> бинарной версией.

хорошо, что ты подтвердил, что "мне сранные движки для этого не нужны ... и тем более твои велосипеды ..." ... именно это и показали бы сделанные тесты ...

а на самом деле, он не сопоставима и там и там, а проигрывает (т.к. очевидно ей надо еще маппинг сделать) - только сравнивать надо правильно, а ты жульничить хотел, хорошо, что я вовремя заподозрил и срезал на подлете :)

Alprog
> Я не буду делать тестов
но ты засцал и обосрался ... ок, не вопрос

#365
(Правка: 22:25) 22:17, 31 янв. 2021

Alprog
> "ой, я не обязан был этого знать. я всё равно спец"
ты какой то ребенок, повзрослей уже ... мы тут для обмена опыта, а не ху..и мерятся ... это у тебя какая та ана..ая фиксция, показать что ты тут крутой ... ну так себе пока .. :) только не взрывайся, лопнишь )

#366
(Правка: 22:32) 22:28, 31 янв. 2021

> особенно хитрых бинарных
> > решений, в которых не пишутся имена
и запомни дорогой, запись в бинарный файл была еще до всех ваших сериализаций, поэтому только такие молодые могут думать, что это что-то новое и требует велосипедов ... удивительным образом придумали JSON, а потом "хитрыми решениями" назвали запись в бинарный файл, который был всегда, было бы смешно не уметь писать в .jpg файл без вашей сериализации :) может расскажешь мне какая там сериализация?

я вот только не мог взять в толк, что в этом вы выдаете за достижение? Оказалось его таки и нет ) спесь чуть слетела и будет

Скучно девочки (с) :) актуальное выражение , учитывая процессы в РФ )

#367
23:25, 31 янв. 2021

Alprog
> Кстати, забавная арифметика: 70к это зарплата для джуна, а 50 евро за день
> работы — столько стоит время архитектора с 20+ лет опыта и "вряд ли потянете".
> Просто если зарплата 70к и 21 стандартный 8-часовой рабочий день
о я тут еще заметил, ты побеспокоился о моем достатке, не переживай ... вообще-то всегда по бухгалтерии считали 22 рабочих дня. Но нет - свой рабочий день я оцениваю в 6 часов.

50 EUR - это как вторая работа по удаленке, и без налогов (чистыми) в то время которое я назначу, а не работодатель ... надеюсь удовлетворил твой интерес, жду предложений :)

#368
(Правка: 23:32) 23:28, 31 янв. 2021

tac
> хорошо, что ты подтвердил, что "мне сранные движки для этого не нужны"
Ты просто взял и написал руками то, что мой сериализатор делает автоматически в одном из множества режимов работы. Да, руками можно написать маленькую часть и это будет то же самое.

Но, во-первых, у нас в проекте не 4 сериализуемых поля, а 5000 тысяч. Напишешь в 1250 раз больше кода? Во-вторых, у нас можно сохранять, как в текст, так и в бинарную дату. Если тебе не нужны для этого движки, то ты должен написать уже в 2500 раз больше кода.

Твой пример для 4 полей это 55 строк ручного кода. Нетрудно посчитать, что итого в нашем проекте тебе бы пришлось написать 137500 строк кода, только чтобы добиться малой части моей функциональности.

Для справки. На данный момент весь мой фреймворк сериализации это 3373 строк кода. Это в 40 раз меньше.

Также для справки, сейчас в Encased 226317 строк ручного C# кода. С твоим подходом добавилось бы ещё 137500. Это на 60% больше кода. Если ты не можешь представить, что такое 137000 строк, то замерь какой-нибудь свой проект и сравни. Это огромная куча кода. И весь этот код состоит из бесконечного количества циклов, Append и Read. И ведь у каждой из сотен функций Save должна быть своя фукнция Load, где всё должно быть в той же последовательности. И ещё два таких же варианта для бинарного случая (а как думал? Одной версией не обойдёшься, ты же повторять собрался без движка, а у меня именно так. Если повторяешь, так полностью. С двумя режимами, как минимум).

И это мы повторили только базовую функциональность сериалайзера. Я бы такого на основе MessagePack сделал за пару дней. Остальные три недели ушли, собственно, на более продвинутую функциональность.

Например, ты подумал о том, что случится, если твоему сейву скормить граф, который имеет перекрёстные ссылки? Правильно, уйдёт в бесконечный цикл. Оп-па, а 137500 строчек-то усложнился внезапно! Теперь надо ходить по всей кодобазе, и добавлять при сохранении объектов все ссылочные типы в какой-то массив, и не записывать их второй раз. Но при загрузке, восстанавливать ссылки в обоих местах корректно на один и тот же объект. И надо везде-везде поправить, разумеется. Где-то не поправил — баг.

А теперь, мы хотим, чтобы в сейв писалась только часть информации о локации, что меняется в игре. Например, посетил ли её игрок. Но остальная информация (имя локации, её координаты) берётся из статичного бандла данных. А после десериализации склеивается. И вот мы абсолютно КАЖДЫЙ append в 137500 кодобазе оборачиваем в if (mode == RealTimeSaveGame) или if (mode == StaticBundle).

Думаешь всё? Нет, мы только начали. Добавляем возможность распределённой сериализации и if-ов становится в 2 раза больше. Не в виде атрибута рядом с полем, а в огромной портянке функций Save и Load, которые в больших классах у тебя растянуты уже на сотни строк и не влазят в экран. Захотел поменять, попадает ли галочка в сохранение игры или нет — тебе недостаточно поменять атрибут напротив поля, которое меняешь. Ты должен найти в четырёх здоровых функциях Save и Load именно тот if и именно у него поменять значение. В 4 местах, в разных концах файла. И везде сделать одинаково. Иначе баг, да.

Теперь мы хотим для уменьшения размера сохранений, чтобы в сейв не шли те данные, которые не поменялись по сравнению с оригинальной базой. Вообще туго становится. Нам теперь не только надо помнить, кого мы записали в сейв, а кого ещё нет, нам теперь надо где-то хранить байты, из которых объект был создан, когда его загрузили и сравнивать с ними. И тут ведь какая ещё штука: чтобы понять, писать ли в массив объект, нам нужно сравнить байты, но мы не можем сравнить байты, пока их не записали в массив. Во, незадача. И тут каждый append ещё сверху оборачивается в ещё что-то уродское, умеющее записывать в какой-то отдельный массив или откатывать байты. Предложение внести в архитектуру любое подобное новшество из перечисленных, у тебя вызовет программерскую импотенцию. Но предположим, что ты справился. Тогда уже на этом этапе у нас даже на 137, а 170-180 тысяч корявого и крайне запутанного кода. Его чертовски много, он до посинения однотипный, но вынести повторяющиеся функции никак не получается, потому что он в каждом месте чуть-чуть, да отличается. И в вызываемую функцию надо столько передать аргументов, что только хуже от попыток вынести функцию становится.

И вот тут нам надо поменять List<int> на List<float>. Да так, чтобы старые сейвы продолжили работать. Картина маслом. Прям чувствуется, как удобно будет работать с такой кодобазой.

Это уж не говоря о том, чего в принципе невозможно сделать с твоей архитектурой. Например, перегонять из бинарного формата сохранение игры в текстовый и смотреть его содержимое, не запуская при этом проект именно той версии, на которой был создан этот сейв.

Ух! Забористо.

#369
(Правка: 23:36) 23:35, 31 янв. 2021

Alprog
Молодец, думаешь в правильную сторону, но уже на неделе, обсудим ... сейчас лишь зафиксируем, что у тебя ничего быстрее не работает, такие сказки мы в дальнейшем рассматривать не будем ...

#370
(Правка: 23:45) 23:42, 31 янв. 2021

Alprog
> во-первых, у нас в проекте не 4 сериализуемых поля, а 5000 тысяч
Это вызывает большие вопросы, это скорее свидетельствует о кривой архитектуре, и неумении повторного использования ... хотелось бы примеры ...

это ты подсчитал все свойства всех ваших классов? учитывая

Alprog
> сейчас в Encased 226317
думаю я близок к правде ..

а с этого вопросам мы вроде начинали - нахрена сериализовать ВСЕ!?

#371
(Правка: 23:45) 23:44, 31 янв. 2021

tac
> у тебя ничего быстрее не работает
По сравнению с твоим реальным кодом, конечно, быстрее. У тебя там текстовая сериализация с конкатенацией через "+". Только ты же ссышь сравнивать с твоим реальным кодом. Ты синтетику рисуешь, и то с третьей попытки.

#372
23:46, 31 янв. 2021

Alprog
> Только ты же ссышь
кто сцыт, мы уже определились

Alprog
> Я не буду делать тестов

я тебе дал все, и ничего не получил в замен

#373
23:50, 31 янв. 2021

Alprog
> Твой пример для 4 полей это 55 строк ручного кода. Нетрудно посчитать
ты считать то не умеешь, а все туда же ... это пример для 5 типов данных :)

#374
(Правка: 23:56) 23:51, 31 янв. 2021

tac
> кто сцыт, мы уже определились
Ты согласился на тест, а потом слился до оглашения результатов, сказав, что он не честный и условия надо поменять. Или мы возвращаемся к начальным условиям, или я тебе ничего не должен.

> я тебе дал все, и ничего не получил в замен
Неправда. Я тебе дал больше. Я показал полный пример, как это выглядит у меня и для текстовой сериализации, и для бинарной. И ещё показал, как это выглядит после изменения типа поля. Ты же показал только текстовый вариант, бинарный не полностью (потому что долго и тяжело). А изменения типа вообще не показал.

Замерь сам, если хочешь. Я тебе все данные для этого дал.
Только ты саботировал результаты заранее, так что смысл его проводить.

Страницы: 124 25 26 27 28 Следующая »
Инди-ЮнитиФорум

Тема закрыта.