Обновить
104
0.3

Пользователь

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

Значит, будет года через 2, как с Re:Fantasio, или с FF7.
Сейчас прогресс в графике минимальный, игра не устареет за 2 года.

я лично больше люблю rich модели в домене

Не могу сообразить, как это будет выглядеть с зависимостями.
Вот например anemic модель

    public class Customer
    {
        public Customer(string name)
        {
            Name = name;
        }

        public string Name { private set; get; }
    }

    public class CustomerService : ICustomerService
    {
        ILogger _logger;
        ICustomerRepository _repository;

        public CustomerService(ILogger logger, ICustomerRepository customerRepository)
        {
            _logger = logger;
            _repository = customerRepository;
        }

        public void Save(Customer customer)
        {
            _repository.Save(customer);
            _logger.Log("customer saved");
        }
    }

Если делаем rich-объект Customer и переносим метод Save в него, конструктор доменного объекта должен принимать зависимости?

var customer = new Customer("John Smith", logger, customerRepositoty);

Выглядит некрасиво.

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

Почему ломается? Потому что SEH устроен так, что когда выбрасывается SEH-исключение, системный код начинает обходить цепочку SEH-фреймов в поисках обработчика, который возьмётся обработать исключений

Не актуально для x64. Код не создаёт seh-фреймы. Адреса обработчиков исключений прописаны статически в PE-файле.

Если вы столкнулись с такой ситуацией, вот пошаговые действия:

  1. Сохраняйте спокойствие

Такое может случиться с каждым из-за стресса, болезни, проблем с пищеварением или других причин. Главное – не паниковать.

  1. Очистите кожу

Аккуратно снимите испачканную одежду.

Промойте кожу теплой водой с мягким мылом (лучше детским или pH-нейтральным).

Если нет доступа к воде, воспользуйтесь влажными салфетками (лучше для чувствительной кожи).

  1. Смените одежду

Наденьте чистое белье и одежду.

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

  1. Решите проблему с запахом

Проветрите помещение.

Используйте освежитель воздуха, если нужно.

  1. Разберитесь с причиной

Если это произошло из-за диареи, примите смекту, лоперамид или активированный уголь.

Пейте больше воды, чтобы избежать обезвоживания.

Если проблема повторяется, обратитесь к врачу (гастроэнтерологу или терапевту).

  1. Если ситуация произошла в общественном месте Найдите туалет, чтобы привести себя в порядок.

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

Главное – не переживать, такое случается, и это не конец света! 😊

То есть то же самое, что в rust. Проверка будет в run-time. А нам тут рассказывали, как компилятор сможет всё устроить без оверхеда.

причем тут кодирование?

При том, что "китайская комната" не обучена визуальной модальности, как крестьянин не умеет читать UTF-8, а слепой не видит "банальное яблоко".

так будет очевидно что человек в данном случае низведен просто до винтика в системе

Да и так очевидно. Роль человека в китайской комнате - выполнять инструкции. Если он это делает качественно, он не должен вносить отсебятину и что-то там делать по-своему. Даже если он знает китайский и видит, что получается неверный перевод.

если китайской комнате показать что то, например банальное яблоко

Потому что другой способ кодирования, к которому она не приспособлена.
Если китайскому крестьянину показать слово "яблоко" hex-кодами в кодирвке utf-8 (E8 98 8B E6 9E 9C), он тоже ничего не поймёт. И что с того, он не знает китайский, по-вашему?

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

А если так описать:

  • выдели признаки изображения

  • если есть острые углы, открой ящик #2

  • если есть скругления, радиус которых меньше 10% от объекта, открой ящик #3

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

Решение не production-ready, т.е. для другой структуры данных нужно будет писать новый код.
Для другой операции над данными (поиск по 2 словам, например) - тоже писать код.

Похожий подход в общем виде реализован в БД полнотекстового поиска (Sphinx, Lucene).
Там либо индексный файл, либо подход "читаю блоб 1 раз от начала до конца, для скорости прыгая через блоки, используя скип-листы). И там куча операций реализована, куча эвристик, чтобы сжать данные. Например, словарь сортируется, а соседние слова пишутся только с разницей в суффиксе.

Вот так китаец Хуанг стал мексиканцем/испанцем Хуаном.
Если конечно это не первоапрельская шутка редактора...

Думаю, нет. Игра работает нормально. А проблемы модов устранят сами моддеры.

Большая статья на тему, как бы это могло быть реализовано в Delphi, здесь: https://habr.com/en/articles/504386/

Хотя, я посмотрел asm-код. В class procedure уже передаётся классовый параметр vt. То есть в Delphi class procedure это не то же самое, что static метод в C++.

классовых переменных нет

Теперь я понял, что требуется.

Иногда мне тоже было нужно такое, и оно решалось через generics.
Но чтобы прямо в языке, нигде этого не видел. Наверное, потому что сложно реализовать компилятору. Под капотом будет что-то типа виртуального наследования из C++, т.е. чтобы получить доступ к переменной, надо сходить в VT и оттуда достать смещение этой переменной (для классовой переменной - адрес, т.к. поле глобальное, а не в экземпляре объекта класса).

Самое неприятное - это оверхед на ровном месте. Во все static-функции класса придётся передавать ещё один параметр - указатель на vt класса, чтобы понять в контексте какого класса работает метод. Хотя это нужно почти никогда.

Слово есть, классовых переменных нет :-(

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

Приведите кусок псевдокода, в котором эти "классовые переменные" были бы полезны.

Поэтому ваш эксперимент и вызывает столько непонимания. А я сразу объявил это нереалистичной абстракцией.

По вашим же условиям

которое приняли бы вы сами, будь у вас столько же данных

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

Пусть они мне совершенно не понравятся

Не имея ответа на вопрос "почему", вы их не будете выполнять.
Ах, опять же "у нас мысленный эксперимент, представьте ситуацию 100% доверия", да? Но смысл, если в реальности таких условий никогда не будет.

Вам нужна возможность в рантайме создавать новые классы?
Накидывать в созданные классы новые поля, методы? И каким синтаксисом потом всё это вызывать, сейчас-то компилятор проверяет валидность методов и полей в compile-time.

Единственное что не хватает это классовых переменных.

Delphi 7 так умеет:

type
  TMyObjectClass = class of TMyCustomObject;
var
  aClass: TMyObjectClass;
  aObject: TMyCustomObject;
begin
  aClass := TMySpecificObject;
  aObject :=  aClass.Create( ... );
end;

А какие решения вам нужны?

Мне нужна другая нейросеть

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

Информация

В рейтинге
2 478-й
Откуда
Россия
Зарегистрирован
Активность