Как стать автором
Обновить
87
0

Open source contributor

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

Ну а как добавлять какие-то вещи типа generics? Или вот DIM (default interface member)? Хотя про последнее не уверен, может это только от рантайма зависит

C# 9 определенно не является серьезным мотивом для переезда на новый дотнет

Добавлю. Новый шарп — это в основном синтаксические накрутки, генерируемый IL не изменяется. Например, record — это на самом деле класс под капотом. А значит можно использовать многие фичи девятого шарпа даже на netstandard2.0.


Для этого вам нужно написать следующий костыль где-нибудь.


Либо почитайте пост от автора Nullables, который сделал nuget-пакет для этой же цели (чтобы использовать девятый шарп в < 5 версиях)


У меня есть проект (библиотека), таргетящий 2.0, и при этом использующий девятый шарп. Очень удобно

Тут все готовы дискутировать, тебе вполне цивилизованно задали вопрос

Какая работа выполняется исключительно/преимущественно на смартфоне?

Просто смотреть мемесы в соцсетках выполнять типичные пользовательские сценарии спокойно можно на смартах, которые вышли и 6 лет назад.

А губки, отнюдь не морские, на что фоткать? Впрочем, это где все преимущства новых смартов кончаются. Офигенный экран? Это планшетам и ноутам… Мощный проц ну это смешно. Вот я и сижу на xperia z 7-летней давности

Разумеется (я думал это должно быть очевидно), речь идет о прочих равных условиях, естественно.


Ох уж эти любители вставить "потому что нужно было вообще все не так делать!11!"

Не факт, что айпад повысит производительность ученика… а вот то, на чем майнкрафт не запустится — может быть. Хотя это не объясняет стоимость, конечно

Лок у меня один раз вызывается. По сравнению с вызовом еще одного метода он почти бесплатный, так что почему нет?


Другое дело, что вероятно есть более быстрые способы, но моя задача была показать дизайн, а не сделать самый быстрый lazy

LazyInitializer требует референса на тип (или на булеву), ничто из чего я могу себе позволить в рекорде

Я уже говорил, почему приватное поле с Lazy я не могу позволить себе. И я же в итоге делаю что-то похожее, просто лишенное недостатков классического подхода.


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

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

Да, верно. А вот что значит "искать начало и конец инициализации" — не очень понятно. Если вы хотите что-то отдебажить, достаточно изолировать ваш объект от других, и при первом обращении попадете туда, куда нужно. Хотя можно и проще: поставить условные бряки и когда-нибудь ваш метод вызывется.

Вы можете сказать, в чем грабли?


Сейчас я использую это в библиотеке. Вместо того, что бы думать, где запускать Eval(), а где нет, а где один раз запустить, я просто обращаюсь к одному свойству. Это сильно увеличило скорость разработки и производительность (потому что все результаты все время кешируются).


А ваших аргументов я пока не услышал.

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

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

Сам FieldCache использую в своем проекте (через NuGet). Не уверен, что кому-то нужен сам пакет, потому что гениального тут ничего нет, и, вероятно, проще написать свой велосипед.


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


Примеры: InnerSimplified, Evaled.


Тут вызываются рекурсивные методы, которые в общем случае должны были бы обходить все дерево выражения. В данном случае, при первом обращении к свойству, вычисления будут происходить основываясь на свойствах детей. К примеру, если мы хоть раз обратились к свойству Evaled у выражения 2^5, то при обращении к этому же свойству у выражения 2^5 + 3 у нас не будет заново вычисляться 2^5. И это, по моему мнению, должно инкапсулироваться именно холдером, чтобы при обращении к свойству ни о чем думать не нужно было, и считать это обращение — бесплатным.

Забавно, даже не думал об этом, но теперь осознаю потенциальную уязвимость в своем проекте.

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

Кто пользуется?

Юпитером — дофига кто, те, кто занимаются исследованиями


Чем это удобнее локальной разработки?

Тем, что это не разработка вовсе. Вот вам надо посчитать какую-нибудь формулу, найти производную, или посмотреть, что выдаст нейросетка по данной модели — открываете блокнотик в юпитере и смотрите


Просто даже визуализировать локальные данные проще (банально цеплянием либ)

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

Так стоп, я где-то это видел пару месяцев назад

Информация

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