Очень показательно, что Cyberax даже не попытался зафиксировать меня в рамки, потребовав формализовать задачу (поставленную мною). Хотя я бы первым делом это потребовал. Поскольку победить Cyberax'а мне неинтересно (по причинам, которые ему показались бы обидными, если бы я их озвучил), я сделаю необходимое уточнение сам, добровольно: вдруг кто-то еще покажет мне, что C++ вовсе не так ужасен (а вот это будет интересно).
std::wstring s = L"Москва,Новосибирск,Париж,Лондон,Владивосток";
Панасюк выше написал (про IDE):
>пусть делают новые формы дополнения, а не только "через точку"
Окей, мы не будем ставить точку и ждать интеллисенса. Мы нажмем любую комбинация клавиш и будем ждать вывода в любой форме, пусть хоть в консоль, а вывестись должно следующее: какие операции (алгоритмы) нам вообще доступны для объекта s? То есть, то, что я назвал индексом контрактов. Что нас интересует (так уж сформулирована задача), это получение списка городов, заданного строкой, как коллекции. Чтобы сложить с другим списком-коллекцией, например.
В C++ мы должны написать что-то типа такого:
std::vector<std::wstring> cities;
boost::split(cities, s, boost::is_any_of(L","));
Спрашивается, КАК IDE должна понять, что это типичный алгоритм, применимый к s? Что это за «новая форма дополнения»? Разумеется, это просто невозможно. Мы или будем искать статику, куда можно отдать строку, и погрязнем в куче бесполезных вхождений, или пропустим полезное.
Хорошо, а как это понимает человек? Человек читает мануалы, спрашивает у других человеков и Гугла и опирается на неявное знание. Которое можно сделать явным, сжулив и научив IDE понимать, что такому-то классу соответствует такой-то набор алгоритмов. И вся эта схема идет по звезде, потому, что boost не часть языка. Если он не подключен, компилятор должен ругаться на include, а не советовать вызвать неподключенный метод. Хорошо, определяем, подключен boost или нет. А ЧТО ЕСЛИ ПОДКЛЮЧИТЬ ЕГО, А ЗАТЕМ УДАЛИТЬ split? Все, тут мы приплываем окончательно.
В случае с FCL студии жулить смысла нет, поскольку проблему и невозможность его создатели понимали отлично. Поэтому там принято соглашение неявное знание делать явным другим путем: универсальным путем вписывания алгоритмов в классы. Чуть позже создатели языка формализовали синтаксис extension, чтобы алгоритмы можно было дописывать, оставаясь в рамках того же способа явно привязать алгоритм к классу.
К чему это ведет, я показал. Задача посмотреть список контрактов принципиально неавтоматизируема ни в каком виде. Например, если у какого-то... товарища смех без причины при виде интеллисенса, можно было бы попросить IDE построить диаграмму. В случае со стандартной библиотекой беда не так страшна. Есть три инструмента — StackOverflow, Google и много-много нейронных сетей — которые приготовили тебе список на блюде, задай только вопрос на английском языке (такой вот интеллисенс). Но когда человек с забустованным мозгом садится писать свою систему, он воспроизводит тот же паттерн, да еще считает, что делает хорошее дело. ЕГО библиотеку, однако, использует три с половиной анонима, вопросы на СО не задаются, Гугл про это ничего не знает. А значит, есть только один способ не прошляпить то, что нужно — выкурить ВЕСЬ код от начала до конца. Что, конечно, писуну этого кода очень нравится. Но не способствует популярности ни библиотеки, ни языка, на котором она создавалась.