Обновить
-15
0
Мстислав Павлов@bezarius

Lead Developer

Отправить сообщение

Забавно, пилил недавно похожее решение и даже проделал похожие шаги. Пришел к похожему результату, даже ScriptValue есть) В своей реализации я сделал поддержку промежуточного кода, что бы можно было разного формата скрипты юзать. Тоже комбинируется и есть некоторый Jit для оптимизации строк. Циклы, переменные, математические операции есть. Поддержку managed не вводил, просто оставил возможность взаимодействовать с ними через пользовательские функции. В конечном итоге тоже подумал, что наверное такое лучше делать на С/С++

В недетерминированном мире постоянно будет происходить ошибка предсказания банально из за floating-point error.

В детерминированном мире достаточно передачи инпута. В случае десинка можно накатить стейт.

Из готовых реализаций знаком с Quantum, довольно неплохая реализация.

Меня смущает то, что это схематичный каркас имеет множество архитектурных мин. Джуны в силу нехватки опыта наступят на них. То что могло быть интересно для опытных программистов тут опущено, а то что продемонстрировано, вряд ли имеет ценность.

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

Банально на проблемах с менеджментом жизненного цикла реактивок можно много где выстрелить себе в ногу.

Наверняка фабрики таки используете. Можно было же было просто фабрику заюзать(или хотя бы ее интерфейс), и комментами накидать ее функционал, но показать правильный пример применения.

И таки "схематичность" не объясняет, зачем тут структуры для контекстных зависимостей. Зачем смешивать подходы, это я про подписку на кнопку классическими методами, в то время когда используется RX, в которых есть для этого API. Что с подменой поведения - не понятно.

Бтв, на счет DI, может стоит использовать термин Context Injection? Мне кажется это более подходящий термин для того, что тут демонстрируется. Т.к. лично я когда вижу DI, ожидаю увидеть DIP, и как минимум задел под IoC-контейнер, иначе в чем смысл вообще упоминать DI?

Вообще то, я не предлагал не использовать существующий uGUI, а указал на его проблемы, и что нужно делать, что бы их сгладить. Складывается впечатление, что вы не читали комментарий.

Здесь есть единая точка входа и Dependency Injection

Единую точку входа увидел, но что касается DI, то этого я не увидел, как и задела под него.

Если используете рх, то не стоит смешивать подходы и делать так:

button.onClick.AddListener( () => _ctx.buttonClickCounter.Value++);

А еще, по хорошему, ReactiveProperty нужно освобождать.

Непонятно, зачем вам ctx в качестве valueType, если из этого не извлекается какого либо профита.

_ctx.buttonClickCounter.Subscribe(ShowClicks);

Тоже нужно освобождать.

Что мешает какому нить джуну вызвать в `CubeView` метод `Init` несколько раз, и наплодить подписок, которые в результате могут привести к весьма "забавным" багам?

В целом, на уровне дизайна - очень сомнительно.

Во первых, UI построенный на GameObject в Unity3d крайне ущербный из за своего перформенса. Следовательно если вы делаете что то, более менее серьезное, должны быть пулы и ресайклинг элементов UI.

Во вторых, как правило, вьюхи могут реюзаться 100500 раз, с небольшими изменениями в плане отображения и поведения. Другими словами, у объектов из пула должны поддерживаться возможность конфигурирования отображения и подмены поведения. Если вы конечно не хотите плодить в пуле объекты, у которых небольшие различия.

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

В четвертых, если работаем с управляемыми ресурсами, должен быть лайфсайкл менеджмент и защита от дурака. Например, при повторном вызове `Init`, предыдущие подписки должны автоматически подчиститься.

На самом деле это далеко не все, что можно было бы выделить, но коммент и так уже большой получился.

Если бы они были заинтересованы в монополии, то они бы заопенсорсили технологии ASML, хотя бы предыдущих поколений, а также обложили бы их доп. обязательствами, как это было у Intel перед AMD. Ничего подобного мы не наблюдаем.

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

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

Я озвучиваю факты, а не заявляю о поддержке такого, а вот Вы, де-факто, поддерживали подобное. По этому, если я больной ублюдок, то кто Вы?

Во первых давайте без политоты(ее везде с избытком). Во вторых давать оценки без владения полной информацией - такое себе. Или вам там Путин лично докладывался о причинах? В третьих, атаковать мирные дома - нормальная практика для цивилизованного мира.

Раз вы считаете это нецелесообразным, то я потрачу это время вместо Вас и процитирую тот пункт, выполнение которого якобы Украина потеряет суверенитет.

11 пункт соглашений:

"Проведение конституционной реформы на Украине и вступление в силу к концу 2015 года новой Конституции, предполагающей в качестве ключевого элемента децентрализацию (с учётом особенностей отдельных районов Донецкой и Луганской областей, согласованных с представителями этих районов), а также принятие до конца 2015 года постоянного законодательства об особом статусе отдельных районов Донецкой и Луганской областей."

Примечание про особый статус:

"Особый статус «отдельных районов Донецкой и Луганской областей» должен был, в частности, предусматривать:

  • освобождение от наказания, преследования и дискриминации лиц, участвовавших в конфликте;

  • право на языковое самоопределение;

  • участие органов местного самоуправления в назначении глав органов прокуратуры и судов;

  • государственную поддержку социально-экономического развития территорий;

  • содействие центральных органов власти трансграничному сотрудничеству территорий с регионами Российской Федерации;

  • создание отрядов народной милиции по решению местных советов с целью поддержания общественного порядка."

Отмечу от себя, проведение децентрализации значит переход от унитарного государства, к децентрализованному унитарному государству. Примерами таких государств является Великобритания, Япония и Швеция. Отличительной чертой такой формы правления является то, что местные органы самоуправления формируются и выбираются местным населением и они не находятся в прямом подчинении у общенационального органа, но при этом подотчетны. Естественно, правом вето такая форма государственного строя регионы не наделяет.

Если у Вас вдруг возникнет желание заявить, что не нахождение в прямом подчинении от общенационального органа является потерей суверенитета. То спешу напомнить, что Европейская Хартия местного самоуправления, которая ратифицирована во всей Европе, обязывает государства закрепить во внутреннем законодательстве и применять на практике совокупность юридических норм, гарантирующих политическую, административную и финансовую независимость муниципальных образований.  Она также устанавливает необходимость конституционного регулирования автономии местного самоуправления. Кроме того, Хартия является первым юридическим документом, гарантирующим соблюдение принципа субсидиарности государствами — членами Совета Европы. Таким образом, местные власти должны осуществлять управление и контролировать значительную часть публичных обязательств в интересах местного населения и под свою ответственность. В соответствии с принципом субсидиарности Хартия закрепляет, что публичные обязательства должны реализовываться на наиболее близком населению уровне и должны относиться к более высокому административному уровню только в том случае, если решение таких задач силами местных администраций неэффективно или невозможно. Принципы Хартии применимы ко всем видам органов местного самоуправления.

Ну и наконец не могу не спросить. А Вы точно читали соглашение, и точно ли Вы гражданин РФ? Меня очень настораживает Ваша предвзятость в данном вопросе.

Не могли бы вы процитировать конкретный пункт соглашения, в котором описывается то, о чем вы говорите.

По такой логике, наверное проще найти тех, кто не является "поборником военных преступников" :)

А кого вы определяете как военных преступников?

Если я правильно понял Ваш пост выше, то Вы утверждаете, что граждане РФ обязаны были что то делать, даже свои варианты предложили, включая уклонение от налогов и миграцию. При этом фактически утверждая, что те кто не делает этого, по сути пособники военных преступников. Или может я как то не правильно понял Ваш посыл?

Знаю, читал, они в открытом доступе. Если вы считаете, что там все очевидно, то объясните мне, далекому от политики человеку, в чем проблема в этом соглашений.

Интересные вещи говорите. Тогда у меня к вам следующий вопрос, а что мешало Украине имплементировать Минские Соглашения и тем самым завершить конфликт?

>Не больший велосипед, чем "некоробочные" Uni*. Код как код, работает (с 2012 года). <

Предложенный вами велоспед, это велосипед во круг решения в котором проблемы с аллокациями и перформенсом.

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

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

>Речь шла о том, может ли корутина возвращать значения, поддерживает ли обработку исключений. Да и да.<

А почему опускается, тот факт, что нужно сначала запилить велоспед?=)

Ну, это не коробочное решение, это чей то велосипед. Выше же заявлялось, что: "корутина более удобна". Возможно я ошибаюсь, но мне кажется, что если бы это было так, то не было бы необходимости изобретать вокруг этой технологии какие то велосипеды, что бы вернуть значение, диспатчеры и тп. А если требуются такие велосипеды, то наверное все же лучше использовать проверенные решения типа UniRx\UniTask?

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

>Как это нельзя, это же IEnumerator, yield return никто не отменял.<

Ну покажите пример, тогда поговорим, на счет удобства=)

>Для .Net мира может и является стандартным, а для Unity мира - нет <

Ну во первых, Unity3d часть мира .NET, а во вторых, UniTask это реализация Task для Unity3d. По этому было бы странно, если бы реализация была иной.

>Но в юнити такое решение как корутина было всегда. И оно более удобно в этом плане.<

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

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Разработчик игр
Ведущий
От 10 000 $
Unity3d
C#
.NET
Git