Помощь новичкам


#1527

Обратите внимание, что в C# следующий код вернет три раза True:

            string s = "123";
            string s1 = "123";
            Console.WriteLine(s == s1);
            Console.WriteLine(s.Equals(s1));
            Console.WriteLine(Object.ReferenceEquals(s,s1));

Как и у нас. Особенно интересно, почему True в последнем случае


#1528

Да, две отдельные, Вы правы. Проглядел. Ну и что, ради того, чтобы в каких-то там “многопоточностях”, отремонтировать эти NET-странности, Вы предлагаете всегда заниматься дополнительным копированием строк?


#1529

Видимо, пытается “оптимизировать”, не заводя разных констант под одинаковый литерал. Дырка, конечно. Хотя, если сделать одной из переменных хотя бы одно присваивание, чудеса испаряются.


#1530

Это особенность .Net строк, поэтому не рекомендуется использовать строки, наследники System.Type и остальные подобные типы в lock, это может вызвать дедлок у 2 несвязаных друг с другом .exe файлов .

Это не просто какая то мелкая фигня, эту ошибку в настоящей программе будет найти нереально. Надо хотя бы предупреждение, чтоб небыло неопределённого и необъяснимого для программиста поведения.


#1531

Т.е. прошерстить программу на предмет присваивания одного и того же литерала и выдать предупреждение?


#1532

Нет, предупреждение когда символ взятый прямо из строки передают как var-параметр. А искать одинаковые литерали бесполезно, потому что это не только с литералами работает.


#1533

А где в Вашем коде передача var-параметра?


#1534

@RAlex, давайте вы всё же перечитаете о чём тут говорят, чтоб по 10 раз одно и тоже не говорить. Со свапа всё и началось.


#1535

Это не дырка. Это называется “интернирование строк”


#1536

Строки у нас не многопоточные. Как не являются многопоточными типы Stack из C#. Никакого предупреждения там разумеется нет


#1537

У Stack проявятся проблемы если одну и туже переменную использовать в 2 потоках. А у строк они проявляются спонтанно, с отдельными переменными, поэтому надо предупредить программиста. Ибо будет нереально найти проблему в полноценной программе.


#1538

Так может просто их запретить в многопоточных ветках?


#1539

Как вы себе это представляете?

И, предупреждение делать неправильно, а полностью запретить уже нормально?


#1540

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


#1541

Нет, ну вот после того как вы нападаете на каждое чужое предложение, не смотря на то - на сколько оно логично, не надо говорить про своё ни капли не продуманное предложение, что оно “лишь”.


#1542

Это попытка заткнуть рот? Не стоит этим заниматься…


#1543

Нет, это попытка заставить вас продумать своё предложение, перед тем как предлагать. Все стандартные модули графики используют несколько потоков, а вы предложили запретить строки в многопоточных приложениях… И как, по вашему, компилятор должен определять, какая процедура будет выполнена в отдельном потоке, а какая в том же? Это ужасно сложно реализовать. А потом вы ещё рассказываете, когда кто то предлагает добавить полезную фичу, что предложивший человек тратит время разработчиков.


#1544

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

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


#1546

@RAlex, сделайте опрос.


#1547

Уже была беседа про некоторую избыточность языка. Я предлагал её в отношении ограничений устранить, @spectatorBH дал понять, что этого делать не стоит, ибо избыточность присутствует в любом языке (повторять почему я так хотел сделать я не буду, Вы сами можете найти и прочесть снова, если хотите). В данном случае речь тоже идёт про избыточность. Я не вижу особого смысла в этом запрете. Но, как Вы правильно заметили: