Строки и тупые оптимизаторы из MS
От: Kolesiki  
Дата: 22.06.21 21:24
Оценка: -10 :))) :))) :))) :)))
Тема для многих не новая, но её тупость не теряет актуальности. Речь идёт об "интернировании строк", коей MS конечно же горда до усрачки!
Грабли, которые она заботливо разложила, не нужно долго искать, вот простой код:

var s1 = "stroka";
var s2 = "stroka";

var lst = new List<string>();
lst.Add(s1);
lst.Add(s2);
Console.WriteLine("I=" + lst.IndexOf(s2));


Как вы уже догадались, выведется "I=0". НО ПОЧЕМУ?? Где логика? В какой идиотской стране два одинаково выглядящих дома имеют ОДИН АДРЕС?
А чем строки отличаются от домов? Да ничем! Выглядеть одинаково != быть одним и тем же.
Но здесь ручка грабель только начинается, вот слегка модифицированный код:

var s1 = "stroka";
var s2 = "stroka";

var lst = new List<string>();
lst.Add(s1);
lst.Add("чупакабра");
lst.Add(s2);
lst.Remove(s2);
Console.WriteLine(Fmt.JSON(lst));


Вывод (логичный с т.з. MS) будет ["чупакабра","stroka"] , но мы же хотели удалить ВТОРОЙ экземпляр "stroka", какого чёрта?? Мы-то (наивные) ожидаем ["stroka", "чупакабра"]!
Чувствуете, как на лбу почёсывается шишка? Вот это оно! ЗАБОТА и "преждевременная оптимизация" 20-летних усатых "сеньоров". Как так можно глупо подходить к проблеме?? Неужели им самим не прилетало от подобных оптимизаций? Ах, да... они же "пилят компилятор", какое им дело до ваших... хм... ничтожных "прикладных задач"!
Думаете, в Core кто-то уберёт эти грабли? Как бы не так! Будут жрать, плакать, снова колоться, но кактус не бросят.

По-уму, надо было оставить сравнение строк (s1 == s2) ровно таким же, как для объектов — через сравнение ссылок. И ТОЛЬКО если речь идёт о контенте, сделать отдельный оператор
(s1 eq s2) или case-insensitive вариант (s1 ieq s2). Всё. Но разве может "поколение с бейсиком головного мозга" думать категориями Си?! Не даром они этот бейсик до 2021 года дотащили — по уму и инструмент.

Кому-то задачка может показаться узконаправленной, но вот не так это. Всплыла она на "простой ГУЙне", где всего-то и нужны были упорядоченные строки. "Чего может быть проще?", — подумал мой мозг и забыл надеть каску.

Ну и напоследок вопрос: кому-то вообще пригождались их вот эти "интернирования"?? Что, прямо в каждой программе миллионы одинаковых строк, что надо было усираться и экономить байты? Сэкономили — с гулькин писюн, а насрали на 20 лет вперёд! И они за это ещё получают зарплату...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.