Но в вашем тексте написано безусловно: «value type (...) хранятся в быстром stack», а не «локальные переменные значимых типов хранятся на стеке, за исключением (тут перечисление)».
То, что поля хранятся там же, где и весь объект, вовсе не очевидно: например, если объект значимого, а поле ссылочного типа, то они хранятся не вместе.
value type (пример int, struct, ссылки на инстансы reference type) хранятся в быстром stack
Это неверно. Простейший контрпример:
class RefType
{
int Value;
}
Value будет храниться вместе со всем объектом, в куче.
Затем, замыкания, async-функции, генераторы, все они могут оправить value typed-значение в кучу.
Затем, само наличие стека — это подробность реализации текущей Microsoft CLR, она не гарантирована по стандарту.
Не обязательно в многопоточном окружении. Метод Add может выбросить исключение. Или обнулить поле, куда записывается ссылка на объект. Или ещё что-нибудь.
Ну всё же идиоматически ваш код обычно записывается так:
private DateTime m_now;
public DateTime Now
{
get => m_now;
set => Set(ref m_now, value);
}
что вовсе не такой уж крокодил. Если ключевое слово field взлетит, то будет на строку меньше. А с пришествием original/replace будет просто атрибут, кто там хвалил Питон?
Ну это да, можно в нарушение семантики сделать что угодно. Можно сделать, чтобы Add ничего не добавляло, или добавляло не значение своего аргумента, а что-то другое. C# не может защитить программиста, который упорно вредит сам себе. Но по крайней мере C# старается, чтобы код, делающий странные вещи, и выглядел странно.
От коллекции программист на .NET ожидает, что она будет перебираться. А если хочется странного, так можно в GetEnumerator и исключение бросить.
Вероятно, чтобы синтаксис инициализации коллекции не использовали не по назначению. Если класс реализует IEnumerable, то он, вероятно, семантически является коллекцией. А формально, конечно, достаточно и Add с нужной сигнатурой. Принцип наименьшего удивления — один из центральных идеологических принципов C#.
В синтаксисе с инициализацией коллекцией, если уж есть Add с IEnumerable, то по идее дополнительные скобки не обязательны, т. к. это частный случай инициализации одним элементом. (Проверка.)
Проблема в том, что бюрократы Википедии (как и администрация ru.SO) крайне обидчивы, и всякую критику, даже конструктивную, считают оскорблением. Кроме того, деятельность на некоторых сайтах (любая, кроме деструктивной) ими не одобрялась, то есть, приводила к бану.
Кроме того, я вот лично не понимаю позицию «вы или во всём соглашаетесь с руководством, или враг», которую вы подаёте как «либо помогаете, либо мешаете». Вы протянули какую-то очень странную логическую цепочку от приколов на Лурке про Википедию через «ругает матом маму участника» к «прямо вредит основной цели Википедии и наносит ей ущерб», в стиле «мама, он меня сукой назвал».
Насколько мне помнится, причина для удаления race из исходников — вовсе не происки SJW. Майкрософт хотела осложнить хакерам поиск мест в коде с потенциальными проблемами (и в конечном итоге уязвимостями), и это была часть принятых мер. Да, это объяснение не объясняет фильтр на rape и ass.
Некоторые модераторы после апрельского кризиса даже спрашивали у меня лично, что же случилось на сайте, и удивлялись результатам. Они были не в курсе драмы потому, конечно, что всё время сидели на сайте, о да.
Конечно, администрация вольна делать что угодно, врать, нарушать собственные правила, банить любую критику, пускаться в любой неадекват.
Но и мы не продались за репу, и мы вольны рассказать всему миру, что администрация врёт, нарушает собственные правила и пускается в неадекват. Мы вольны перестать создавать контент для этой администрации, и отговаривать других.
Если администрация не понимает ценность своих авторов, и считает, что может делать что хочет без противодействия, пусть провалится в ад.
С удовольствием обсужу эти вопросы на платформе, где можно говорить на равных. В чате ru.SO, простите, нет: я хорошо усвоил, что попытки отстоять своё мнение заканчиваются баном (или баном как в чате, так и на основном сайте).
Но эти наши склоки, думаю, читателям Хабра неинтересны.
Я вижу на ответе, в котором прямо упомянуто право компании наложить вето на любое решение сообщества 10 плюсов и один минус. Причем этот минус — мой.
Теперь уже два минуса. В историческом контексте, тогда ещё была вера в демократию, и заявление КМ о том, что у него остаётся на крайний случай право вето, воспринималось всеми как реально исключительный механизм. Никто и подумать не мог, что правом вето КМ будет пользоваться вето практически всегда и во вред сообществу. К настоящему моменту все научены, и никто больше не выдвигает предложений. (Например, были спущены плохо переведённые с английского «ценности сообщества», которые подаются как консенсус участников, а не спущенные сверху лозунги — это отбивает новичкам желание поменять их.)
Сейчас понятно, что это была первая стадия отъёма власти у сообщества. Неудивительно, что через полтора месяца после этого наступил кризис.
«Сообщество управляет контентом». А бинайс «спущен сверху», его демократически отменить нельзя.
Контрпример по поводу спущенного сверху бинайса (для английского сайта) я приводил, ссылки на обсуждение, критику и изменение были вам даны. То, что Николас не захотел обсуждения на нашем подсайте — его личная трусость. Но высказывание о «спущенном сверху» бинайсе — искажение фактов: на английском SO такого не было, а вот то, что на русском было, и есть часть претензии к администрации.
Вы просто оказывались с нужной стороны «демократии» на год дольше, чем я. Очень легко принять за демократию схему «мы выслушаем ваши предложения, и решим за вас», когда КМ прислушивается лично к вам.
Вы, должно быть, забыли, как на сайте было вначале. Вот по ссылке первый попавшийся пример нормального демократического процесса. Или вот, из совсем недавнего.
По поводу демократии — поищите на мете т.н. регламент по инициативам, и подумайте, зачем это было нужно, если и так была демократия. Ну или посмотрите, как эту "демократию" перекашивало в зависимости от того, кто вносил предложения. Например, сравните усилия на утверждение первой и второй редакции причины закрытия домашки. Там отлично видно, насколько односторонне "демократия" работала. Просто те, чьи предложения тогда заворачивались, спокойно это принимали и не бастовали.
Это и есть «демократия»: ситуация, при которой предложения принимаются активной частью коллектива, а не единолично одним упёртым представителем администрации. Да, от аргументов и способа их подачи зависит результат, и ничего плохого в этом нет: если решение неправильно, через определённое время выйдет обоснованное контрпредложение, которое убедит сообщество, и получит свои голоса. Или не убедит, если проблема лишь мерещится одному человеку.
Сообщество имеет право ошибаться, и исправляться, принимая новые решения, и это нормально, так работает демократическая организация власти. Никто из нас не делегировал администрации право избавлять нас от ошибок путём отнятия у нас возможности что-либо решать самим.
И да, ситуация, когда у предложения много голосов против, намного лучше воспринимается сообществом, чем ситуация, когда у предложения много голосов за, а против лишь один перевешивающий всё голос представителя властей.
Но в вашем тексте написано безусловно: «value type (...) хранятся в быстром stack», а не «локальные переменные значимых типов хранятся на стеке, за исключением (тут перечисление)».
То, что поля хранятся там же, где и весь объект, вовсе не очевидно: например, если объект значимого, а поле ссылочного типа, то они хранятся не вместе.
Это неверно. Простейший контрпример:
Value
будет храниться вместе со всем объектом, в куче.Затем, замыкания, async-функции, генераторы, все они могут оправить value typed-значение в кучу.
Затем, само наличие стека — это подробность реализации текущей Microsoft CLR, она не гарантирована по стандарту.
Немного по теме: ответ на SO и статья Эрика Липперта, обсуждаемая в этом ответе.
Кстати, и reference types не прибиты гвоздями к куче. Вот тут их от кучи отвязывают.
Не обязательно в многопоточном окружении. Метод
Add
может выбросить исключение. Или обнулить поле, куда записывается ссылка на объект. Или ещё что-нибудь.Ну всё же идиоматически ваш код обычно записывается так:
что вовсе не такой уж крокодил. Если ключевое слово
field
взлетит, то будет на строку меньше. А с пришествием original/replace будет просто атрибут, кто там хвалил Питон?Ну это да, можно в нарушение семантики сделать что угодно. Можно сделать, чтобы
Add
ничего не добавляло, или добавляло не значение своего аргумента, а что-то другое. C# не может защитить программиста, который упорно вредит сам себе. Но по крайней мере C# старается, чтобы код, делающий странные вещи, и выглядел странно.От коллекции программист на .NET ожидает, что она будет перебираться. А если хочется странного, так можно в
GetEnumerator
и исключение бросить.Вероятно, чтобы синтаксис инициализации коллекции не использовали не по назначению. Если класс реализует
IEnumerable
, то он, вероятно, семантически является коллекцией. А формально, конечно, достаточно иAdd
с нужной сигнатурой. Принцип наименьшего удивления — один из центральных идеологических принципов C#.В синтаксисе с инициализацией коллекцией, если уж есть Add с IEnumerable, то по идее дополнительные скобки не обязательны, т. к. это частный случай инициализации одним элементом. (Проверка.)
Проблема в том, что бюрократы Википедии (как и администрация ru.SO) крайне обидчивы, и всякую критику, даже конструктивную, считают оскорблением. Кроме того, деятельность на некоторых сайтах (любая, кроме деструктивной) ими не одобрялась, то есть, приводила к бану.
Кроме того, я вот лично не понимаю позицию «вы или во всём соглашаетесь с руководством, или враг», которую вы подаёте как «либо помогаете, либо мешаете». Вы протянули какую-то очень странную логическую цепочку от приколов на Лурке про Википедию через «ругает матом маму участника» к «прямо вредит основной цели Википедии и наносит ей ущерб», в стиле «мама, он меня сукой назвал».
Насколько мне помнится, причина для удаления
race
из исходников — вовсе не происки SJW. Майкрософт хотела осложнить хакерам поиск мест в коде с потенциальными проблемами (и в конечном итоге уязвимостями), и это была часть принятых мер. Да, это объяснение не объясняет фильтр на rape и ass.Вероятно, было слишком интеллектуально.
Это была точка бифуркации, да. С этого момента всё пошло хуже и хуже.
В бэкенд-приложении можно по идее установить
CultureInfo.DefaultThreadCurrentCulture
.Вы опять забыли скрестить пальцы? Отсутствие модераторов прекрасно видно по дате последнего посещения.
Некоторые модераторы после апрельского кризиса даже спрашивали у меня лично, что же случилось на сайте, и удивлялись результатам. Они были не в курсе драмы потому, конечно, что всё время сидели на сайте, о да.
Конечно, администрация вольна делать что угодно, врать, нарушать собственные правила, банить любую критику, пускаться в любой неадекват.
Но и мы не продались за репу, и мы вольны рассказать всему миру, что администрация врёт, нарушает собственные правила и пускается в неадекват. Мы вольны перестать создавать контент для этой администрации, и отговаривать других.
Если администрация не понимает ценность своих авторов, и считает, что может делать что хочет без противодействия, пусть провалится в ад.
С удовольствием обсужу эти вопросы на платформе, где можно говорить на равных. В чате ru.SO, простите, нет: я хорошо усвоил, что попытки отстоять своё мнение заканчиваются баном (или баном как в чате, так и на основном сайте).
Но эти наши склоки, думаю, читателям Хабра неинтересны.
О да, а я в бан улетел сам, видимо. Не, подождите, это не из-за критики, это из-за разжигания, точно, не могут же модераторы обманывать? </сарказм>
Теперь уже два минуса. В историческом контексте, тогда ещё была вера в демократию, и заявление КМ о том, что у него остаётся на крайний случай право вето, воспринималось всеми как реально исключительный механизм. Никто и подумать не мог, что правом вето КМ будет пользоваться вето практически всегда и во вред сообществу. К настоящему моменту все научены, и никто больше не выдвигает предложений. (Например, были спущены плохо переведённые с английского «ценности сообщества», которые подаются как консенсус участников, а не спущенные сверху лозунги — это отбивает новичкам желание поменять их.)
Сейчас понятно, что это была первая стадия отъёма власти у сообщества. Неудивительно, что через полтора месяца после этого наступил кризис.
Контрпример по поводу спущенного сверху бинайса (для английского сайта) я приводил, ссылки на обсуждение, критику и изменение были вам даны. То, что Николас не захотел обсуждения на нашем подсайте — его личная трусость. Но высказывание о «спущенном сверху» бинайсе — искажение фактов: на английском SO такого не было, а вот то, что на русском было, и есть часть претензии к администрации.
Вы, должно быть, забыли, как на сайте было вначале. Вот по ссылке первый попавшийся пример нормального демократического процесса. Или вот, из совсем недавнего.
Это и есть «демократия»: ситуация, при которой предложения принимаются активной частью коллектива, а не единолично одним упёртым представителем администрации. Да, от аргументов и способа их подачи зависит результат, и ничего плохого в этом нет: если решение неправильно, через определённое время выйдет обоснованное контрпредложение, которое убедит сообщество, и получит свои голоса. Или не убедит, если проблема лишь мерещится одному человеку.
Сообщество имеет право ошибаться, и исправляться, принимая новые решения, и это нормально, так работает демократическая организация власти. Никто из нас не делегировал администрации право избавлять нас от ошибок путём отнятия у нас возможности что-либо решать самим.
И да, ситуация, когда у предложения много голосов против, намного лучше воспринимается сообществом, чем ситуация, когда у предложения много голосов за, а против лишь один перевешивающий всё голос представителя властей.