Да, две отдельные, Вы правы. Проглядел. Ну и что, ради того, чтобы в каких-то там “многопоточностях”, отремонтировать эти NET-странности, Вы предлагаете всегда заниматься дополнительным копированием строк?
Видимо, пытается “оптимизировать”, не заводя разных констант под одинаковый литерал. Дырка, конечно. Хотя, если сделать одной из переменных хотя бы одно присваивание, чудеса испаряются.
Это особенность .Net строк, поэтому не рекомендуется использовать строки, наследники System.Type
и остальные подобные типы в lock
, это может вызвать дедлок у 2 несвязаных друг с другом .exe файлов .
Это не просто какая то мелкая фигня, эту ошибку в настоящей программе будет найти нереально. Надо хотя бы предупреждение, чтоб небыло неопределённого и необъяснимого для программиста поведения.
Т.е. прошерстить программу на предмет присваивания одного и того же литерала и выдать предупреждение?
Нет, предупреждение когда символ взятый прямо из строки передают как var-параметр. А искать одинаковые литерали бесполезно, потому что это не только с литералами работает.
А где в Вашем коде передача var-параметра?
@RAlex, давайте вы всё же перечитаете о чём тут говорят, чтоб по 10 раз одно и тоже не говорить. Со свапа всё и началось.
Это не дырка. Это называется “интернирование строк”
Строки у нас не многопоточные. Как не являются многопоточными типы Stack из C#. Никакого предупреждения там разумеется нет
У Stack проявятся проблемы если одну и туже переменную использовать в 2 потоках. А у строк они проявляются спонтанно, с отдельными переменными, поэтому надо предупредить программиста. Ибо будет нереально найти проблему в полноценной программе.
Так может просто их запретить в многопоточных ветках?
Как вы себе это представляете?
И, предупреждение делать неправильно, а полностью запретить уже нормально?
Это предложение лишь. Решать будут все равно разработчики. Предупреждение - это надо думать, когда и как выводить, чтобы вхолостую оно не выскакивало, ибо тупо будет предупреждать там, где нет проблемы. А если строки не многопоточные, зачем разрешать с ними работу и сидеть с занозой в известном месте, размышляя, как и где прикрутить костыль к коду.
Нет, ну вот после того как вы нападаете на каждое чужое предложение, не смотря на то - на сколько оно логично, не надо говорить про своё ни капли не продуманное предложение, что оно “лишь”.
Это попытка заткнуть рот? Не стоит этим заниматься…
Нет, это попытка заставить вас продумать своё предложение, перед тем как предлагать. Все стандартные модули графики используют несколько потоков, а вы предложили запретить строки в многопоточных приложениях… И как, по вашему, компилятор должен определять, какая процедура будет выполнена в отдельном потоке, а какая в том же? Это ужасно сложно реализовать. А потом вы ещё рассказываете, когда кто то предлагает добавить полезную фичу, что предложивший человек тратит время разработчиков.
Заставлять Вы можете свою подружку, если она Вам это позволит.
А предлагать каждый имеет право то, что считает нужным - на то и форум. Я, заметьте, говоря о том, что считаю предлагаемые вещи ненужными, никого не просил прекратить писанину. Продуманное предложение или нет - это каждый для себя сам решает - не Вы.
Уже была беседа про некоторую избыточность языка. Я предлагал её в отношении ограничений устранить, @spectatorBH дал понять, что этого делать не стоит, ибо избыточность присутствует в любом языке (повторять почему я так хотел сделать я не буду, Вы сами можете найти и прочесть снова, если хотите). В данном случае речь тоже идёт про избыточность. Я не вижу особого смысла в этом запрете. Но, как Вы правильно заметили: