Нет, нужно явно указать GC что это куча, пусть и не управляемая. Для этого есть внутренние апишки, можете глянуть пример тут https://twitter.com/EgorBo/status/1706316706316996947 К тому же, вы не можете в таких объектах хранить ссылки на объекты из нормальной кучи, только из вашей же неуправляемой, как минимум потому что GC не будет ее сканить
В F#, Unsafe.As даёт возможность небезопасно кастить любую область памяти во что угодно и работать с ней как с любым типом. C# такие выкрутасы делать не даёт.
Я бы настойчиво не рекомендовал такое делать для чего угодно кроме как струтур/примитивов без полей reference типа (и то, даже в структурах можно наступить на грабли unaligned read). Это вам кажется что вы ловко что-то скастили, а по факту могли создать GC Hole который взорвет ваш код отложенной раз в 100 запусков, поэтому Unsafe не зря называется Unsafe, и если F# (по вашим словам) позволяет это делать более свободно то это не звучит как реклама
в теории он должен быть супер дешевым на большинстве платформе где есть спец регистры указывающие на текущий поток, просто пока это не сделано в дотнете - я файлил ишью https://github.com/dotnet/runtime/issues/63619
По поводу Equals(object,object) - у нас уже есть фикс для этого в dotnet/runtime, но пока это еще не вмерженно. Там необходим escape analysis чтобы понять что бокшенный value type никуда не убегает и можно не боксить, либо эмулировать боксинг но на стеке.
Без телеметрии невозможно сделать нормально ни одно приложение в принципе (UX). Давно пора перестать истерить по этому поводу, но если сам факт использования тех же гугл или фб аналитик пугает — наверняка есть коробочные решения для своего сервера.
не всех, а только от кэшбонуса, по факту сумма очень небольшая
Не то чтобы сильно затратный. В общем случае - это просто бамп поинтера с установкой пары полей
Нет, нужно явно указать GC что это куча, пусть и не управляемая. Для этого есть внутренние апишки, можете глянуть пример тут https://twitter.com/EgorBo/status/1706316706316996947
К тому же, вы не можете в таких объектах хранить ссылки на объекты из нормальной кучи, только из вашей же неуправляемой, как минимум потому что GC не будет ее сканить
А вы уверены про "extra field" 4 байта? Если моя память меня не подводит лейаут у строки как раз [8b header][8b pMT][4b Length][data...
И ещё у вас ссылки на исходную имплементацию NativeAOT, это немного другое чем CLR/JIT
Я бы настойчиво не рекомендовал такое делать для чего угодно кроме как струтур/примитивов без полей reference типа (и то, даже в структурах можно наступить на грабли unaligned read). Это вам кажется что вы ловко что-то скастили, а по факту могли создать GC Hole который взорвет ваш код отложенной раз в 100 запусков, поэтому Unsafe не зря называется Unsafe, и если F# (по вашим словам) позволяет это делать более свободно то это не звучит как реклама
в теории он должен быть супер дешевым на большинстве платформе где есть спец регистры указывающие на текущий поток, просто пока это не сделано в дотнете - я файлил ишью https://github.com/dotnet/runtime/issues/63619
Можете развернуть мысль?
1) Нет, там не только PGO
2) На шарплабе нет возможности выбирать рантаймы новее .NET 5.0 релиз.
свитч тут не причем, в том коде он разворачивается в обычные ифы розлином
В .NET 6.0 инлайнер стал намного агрессивнее (см. https://github.com/dotnet/runtime/pull/52708 и https://github.com/dotnet/runtime/pull/55478) и инлайнит такое без проблем теперь.
По поводу Equals(object,object) - у нас уже есть фикс для этого в dotnet/runtime, но пока это еще не вмерженно. Там необходим escape analysis чтобы понять что бокшенный value type никуда не убегает и можно не боксить, либо эмулировать боксинг но на стеке.
Да, но он девиртуализирован в .NET Core и не аллоцирует ;-)
Напишите проверку что аргумент ф-ции делится на 10 без остатка на чистом асме и сравните с Си.
Без телеметрии невозможно сделать нормально ни одно приложение в принципе (UX). Давно пора перестать истерить по этому поводу, но если сам факт использования тех же гугл или фб аналитик пугает — наверняка есть коробочные решения для своего сервера.
https://github.com/saagarjha/TSOEnabler
Кстати, раз тут вспомнили М1 — то там есть возможность нативно отключить для потока слабую модель памяти и использовать TSO ;-)
Думаю, вы спутали дизайн архитектур процессоров и написание очередного фронтенд фраемворка :-)
От мыслей о барьерах и слабой модели памяти вас не защитит и C# с Java :-)
Ага, инвестор их наличкой в офис в Минске принес в сумках :D
Это еще как здорово! Просто статья написана таким образом, что у читателя может сложиться мнение что решения от Google и Microsoft совсем никчемные.
Именно, думаю, можно за вечер натренировать сеточку распознавать хотдоги КРУЧЕ ЧЕМ В ГУГЛ!!1