Pull to refresh
68
0.1
Nagg @Nagg

Разработчик

Send message

Вообще странно, что они не сделали сам тип string как-нибудь так, чтобы если строка короткая, то она пыталась бы храниться на стеке.

  1. Есть подвижки в .NET 10.0 в эту сторону, но чтобы объект можно было аллоцировать на стеке, джит должен сам себе доказать что он никаким образом не убегает в хип

  2. Эфемерные аллокации типа таких не нагружают гц, люди часто с ними борятся непонятно зачем. Гораздо хуже аллокации при которых создаются Gen2 -> Gen0 линки

Очень сомнительная поправка про "всю кучу", в большинстве случаев ГЦ сканит конкретно одно поколение + области памяти в которых могут быть ссылки на первое поколение (это когда write barrier оставляет в записи в card table каждый раз когда вы любой объект присваиваете в поле другого на хипе) + руты где бы они не были

Эта библиотека содержит 500+ unsafe хаков в разных местах, учитывая что автор так же известен библиотекой MemoryPack где из-за unsafe кода у него там есть набор потенциальных CVE, я бы был осторожен с этой либой. На мой взгляд Zero-Alloc LINQ можно было бы реализовать 100% безопасным кодом

очень сложный слог для меня, но решил забайтится

@stephentoub (he/him), напиши в коменты, если тебя держат насильно.

Стивен самый продуктивный разработчик дотнета (человек оркестр, просто посмотрите страницу contributors https://github.com/dotnet/runtime/graphs/contributors?from=5%2F20%2F2020), он так же большой энтузиаст ИИ и мейнтейнит библиотеки типа MPC SDK сейчас. Не думаю что он нуждается в вашем сочувствии и спасении.

Я не знаю что конкретно Сатья имел ввиду под 30% кода, но рискну предположить что если я написал usi, а копилот подскзал "ng System;" и я нажал таб, то ИИ только что написал 80% кода ;-)

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

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

У вас есть какие-то доказательства этого?

Да, я - сотрудник и у меня около тысячи пулл-реквестов конкретно в этот репозиторий (dotnet/runtime) о котором тут идет речь. Microsoft действительно прямо просит сотрудников использовать ИИ, но я подтверждаю что ни о какой принудиловке бросать всё и бежать отвечать копилоту через вебгуй речи не идет, это просто тестирование технологии. С другой стороны, тяжело и глупо игнорировать тот факт, что агенты, MCP тулы, промпт инженеринг, индексирование с RAG и т.д. очень сильно улучшают продуктивность

работникам MS не разрешили просто их выкинуть

Это какая-то отсебятина, никто некому ничего не запрещал. Просто тестирование технологии

Как это противоречит тому что я написал?

Довольно много размера можно вырезать отключив некоторые JIT оптимизации (такие как клонирование циклов, finally-блоков) или огранить инлайнер

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

Технически, рантайм мог бы кэшировать боксинги сам, аля

object o1 = (object)1;
object o2 = (object)1;
ReferenceEqual(o1, o2) // true

но пока такой "оптимизации" нету (-:

В теории новый Lock дает возможность в будущем избавиться от хедера объектов, в которых сейчас приходится записывать thin lock/sync block + уменьшает контешн, если рядом с вашим объектом для лока есть другие горячие поля - будет большой пеналти от false sharing.

Ещё могу порекомендовать поставить переменную DOTNET_SYSTEM_NET_SOCKETS_THREAD_COUNT в 1 для снижения CPU usage (кол-во тредов крутящих epoll)

Там вроде все сложнее - там используется обычный спинвейт (который одинаков для всех платформ, просто цикл (с определенной в рантайме длительностью) из pause инструкции (yield на арме). Если спиннеров слишком много, то уже переходит на те самые wait-еры которые уже различаются между Windows и nix. Переменная, которую автор поста использовал вроде как регулирует кол-во кросплатформенных спиннеров.

По спиннерам надо помнить что они очень неэффективны на arm64 где они по сути действительно грузят проц на 100%. На х64 pause инструкция более лайтовая (особенно в сочитании с Hyper Threading).

Новость ведет на Blind (анонимный борд для всяких FAANG сотрудников), а там такие ошуительные истории каждый день по 5 постят, хз почему автор решил эту выбрать и создать из этого целую новость

не всех, а только от кэшбонуса, по факту сумма очень небольшая

Не то чтобы сильно затратный. В общем случае - это просто бамп поинтера с установкой пары полей

Нет, нужно явно указать GC что это куча, пусть и не управляемая. Для этого есть внутренние апишки, можете глянуть пример тут https://twitter.com/EgorBo/status/1706316706316996947
К тому же, вы не можете в таких объектах хранить ссылки на объекты из нормальной кучи, только из вашей же неуправляемой, как минимум потому что GC не будет ее сканить

1
23 ...

Information

Rating
3,650-th
Registered
Activity