Re[18]: Кому ваще этот С++ нужен?
От: 0BD11A0D  
Дата: 29.05.15 18:32
Оценка:
Очень показательно, что 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 и много-много нейронных сетей — которые приготовили тебе список на блюде, задай только вопрос на английском языке (такой вот интеллисенс). Но когда человек с забустованным мозгом садится писать свою систему, он воспроизводит тот же паттерн, да еще считает, что делает хорошее дело. ЕГО библиотеку, однако, использует три с половиной анонима, вопросы на СО не задаются, Гугл про это ничего не знает. А значит, есть только один способ не прошляпить то, что нужно — выкурить ВЕСЬ код от начала до конца. Что, конечно, писуну этого кода очень нравится. Но не способствует популярности ни библиотеки, ни языка, на котором она создавалась.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.