Re[15]: Кому ваще этот С++ нужен?
От: 0BD11A0D  
Дата: 29.05.15 11:46
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Meanwhile in IDEA: http://blog.jetbrains.com/idea/2012/08/complete-static-methods-and-fields-with-the-new-intellij-idea-12-eap-build-12229/

BDA>>Талант у человека — что ни напишет, все не в тему. Взять IDE от Java вместо CLion, притянуть поиск по именам в статических методах вместо ПОДБОРА ВСЕХ ПОДДЕРЖИВАЕМЫХ АЛГОРИТМОВ ПО ОБЪЕКТУ, а потом ололокать — это не говнопрограммистом надо быть, а я не знаю, кем.
C>Я понимаю, у вас в String запиханы ВСЕ методы, которые когда-либо работают со строкой. Для тех методов, которые со строками не работают по каким-то надуманным причинам — сделаны строковые обёртки.

C>А программы пишутся выбором методов после "MyNameIsVasja".ctrl-space. При этом заранее неизвестно что за метод нужен, программист всегда пробегает по всему списку методов и выбирает наиболее интересный.


C>Ну типа, надо вызвать disk.getInfo() и программист пишет "MyNameIsVasja".getDiskBlockInfo(disk). При этом интеллисенс очен вежливо подсказывает, какой именно disk должен попасть в параметр!


C>Да, я начинаю понимать всю всемогущность такой техники! Завтра же переписываю все свои программы!


Ядовитость и острота хороши тогда, когда ими приправлен хорошо продуманный и полезный ответ. Когда ответ как у вас — тупой бесформенный пельмень из сои — а вы его еще и поливаете уксусом, впечатление совсем другое.

Я написал, что в Джаве найти по части имени статические методы всех известных классов — это не то же самое, что найти все алгоритмы в C++, которые могут быть применены к объекту o типа T. Не находите в себе сил признать, что пример притянут за уши и другие внешние органы — не пишите ничего.
Re[16]: Кому ваще этот С++ нужен?
От: Cyberax Марс  
Дата: 29.05.15 16:27
Оценка: +1
Здравствуйте, 0BD11A0D, Вы писали:

C>>Ну типа, надо вызвать disk.getInfo() и программист пишет "MyNameIsVasja".getDiskBlockInfo(disk). При этом интеллисенс очен вежливо подсказывает, какой именно disk должен попасть в параметр!

C>>Да, я начинаю понимать всю всемогущность такой техники! Завтра же переписываю все свои программы!
BDA>Я написал, что в Джаве найти по части имени статические методы всех известных классов — это не то же самое, что найти все алгоритмы в C++, которые могут быть применены к объекту o типа T.
Что конкретно "не так"? Это ровно та же задача, для С++ она только немного сложнее. Принципиальной разницы нет.

BDA>Не находите в себе сил признать, что пример притянут за уши и другие внешние органы — не пишите ничего.

Ну я понимаю, у тебя интеллисенс головного мозга, осложнённый двусторонним ООП, и всё такое.
Sapienti sat!
Re[17]: Кому ваще этот С++ нужен?
От: 0BD11A0D  
Дата: 29.05.15 16:43
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Что конкретно "не так"? Это ровно та же задача, для С++ она только немного сложнее. Принципиальной разницы нет.


Если разницы нет, почему бы не привести сразу «правильный» пример? Хотя бы одну IDE, которая решает поставленную мною задачу. Это же так легко — р-раз, и я понимаю, что кругом неправ.
Re[9]: Кому ваще этот С++ нужен?
От: IID Россия  
Дата: 29.05.15 17:19
Оценка:
Здравствуйте, Eugeny__, Вы писали:

E__>Что значит "редкий сценарий"? Программы работают с внешними данными, характер которых и размер на этапе компиляции по определению неизвестен. Иначе на кой хрен та программа вообще нужна?


Почему нельзя поставить оценку "фейспалм" ?
kalsarikännit
Re[12]: Кому ваще этот С++ нужен?
От: IID Россия  
Дата: 29.05.15 17:24
Оценка:
Здравствуйте, greenpci, Вы писали:

G>так как он был неразрывно связан с нашими данными.


Тогда вам бы вообще ничего не подошло. Зная характер и особенности данных всегда можно придумать более оптимальную их обработку. Ты демки в 90е не писал ? Обалдел бы, что и как можно выжать из убогенького 8битного камня. Просто хитрой организацией обрабатываемых данных. Даже не в сотни, в тысячи и десятки тысяч раз ускорение.
kalsarikännit
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 и много-много нейронных сетей — которые приготовили тебе список на блюде, задай только вопрос на английском языке (такой вот интеллисенс). Но когда человек с забустованным мозгом садится писать свою систему, он воспроизводит тот же паттерн, да еще считает, что делает хорошее дело. ЕГО библиотеку, однако, использует три с половиной анонима, вопросы на СО не задаются, Гугл про это ничего не знает. А значит, есть только один способ не прошляпить то, что нужно — выкурить ВЕСЬ код от начала до конца. Что, конечно, писуну этого кода очень нравится. Но не способствует популярности ни библиотеки, ни языка, на котором она создавалась.
Re[10]: Кому ваще этот С++ нужен?
От: Eugeny__ Украина  
Дата: 29.05.15 19:20
Оценка: +1
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, Eugeny__, Вы писали:


E__>>Что значит "редкий сценарий"? Программы работают с внешними данными, характер которых и размер на этапе компиляции по определению неизвестен. Иначе на кой хрен та программа вообще нужна?


IID>Почему нельзя поставить оценку "фейспалм" ?


Объясни, пожалуйста.
Внешние данные могут занимать килобайты, мегабайты, и терабайты, а также сотни тысяч терабайт, приходить порциями от нескольких байт до терабайт. В чем фейспалм?
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[12]: Кому ваще этот С++ нужен?
От: Evgeny.Panasyuk Россия  
Дата: 30.05.15 08:58
Оценка:
Здравствуйте, 0BD11A0D, Вы писали:

BDA>>>Как раз интеллисенс играет тут первую скрипку. Вы открываете его окошко и видите ВСЕ возможности некоторого класса.

EP>>Нет, далеко не все. Например он не покажет что этот объект может быть аргументом у метода другого объекта
BDA>Потому, что это информация не об объекте.

То есть ты считаешь что эта информация настолько незначительная, что её можно не показывать, а вот информация о методах — это must-have?

EP>>это скорее вопрос к IDE — пусть делают новые формы дополнения, а не только "через точку"

BDA>Это принципиально невозможно.

Что невозможно? Получить список функций для которых данный объект может быть аргументом? Не считая случаи какого-нибудь сильного TMP/duck-typing — то всё возможно.
В любом случае "дополнение через точку" не стоит того чтобы уродовать язык и код — да и главным преимуществом ООП уж точно не является.

BDA>>>Альтернатива — курить маны. То есть, вышел новый стандарт, новый STL, новый boost и вы должны сразу прочитать, понять и запомнить все, что написано в сопроводиловке.

EP>>Читать документацию придётся в любом случае, чтобы знать контракты.
BDA>В хорошем коде контракты выражены через него же.

А как например выражается алгоритмическая сложность, список возможных исключений, и exception safety guarantee? Не говоря уже о том, что на последовательность вызова методов могут быть наложены некоторые ограничения.
IntelliSense Oriented Development возможен только в примитивнейших случаях типа установки свойств формы и т.п. В общем же случае от него польза только в качестве подсказки правильного имени метода/поля.

EP>>А это вообще ортогонально. Декомпозицию на контейнеры и алгоритмы можно делать и в что называется в "true OO style". То есть смотришь ты "с высоты птичьего полета" на класс UTF-8 строки, и видишь что она реализует IBidirectionalSequence, далее смотришь на алгоритмы которые принимают IBidirectionalSequence — и находишь там to_lower, split или что там нужно.

BDA>Когда вы покажете, что в IDE можно сделать интеллисенс, не основанный на инкапсуляции, я соглашусь.

* глобальные функции дополняются без всякой инкапсуляции.

* MSVS C# умеет дополнять extension method'ы — которые по сути те же внешние функции. Думаю очевидно что такое же дополнение возможно без ключевого слова this и без специального синтаксиса вызова глобальной функции.

BDA>Но выше я утверждаю, что это невозможно. Однако бремя доказательства обратного я возлагаю на вас — ведь это вы написали «пусть делают новые формы дополнения», вам и показывать, КАК ИМЕННО.


А что конкретно не понятно? Как найти список функций? Или как инициировать такое дополнение?

EP>>Или ты против такой декомпозиции вообще? Тогда например для каждой строки (и контейнера в общем) придётся придётся реализовывать каждый алгоритм — M контейнеров * N алгоритмов

BDA>Зачем? Если алгоритму не важен тип контейнера, он может быть реализован в классе АбстрактныйКонтейнер, а затем переопределен в более специфическом классе. Никакого комбинаторного взрыва.

Предлагаешь наследовать реализацию? Сразу получаем проблемы в языках без множественного наследования.
Да и как расширять? Как добавить новый алгоритм без изменения?

BDA>>>Как раз вынесение алгоритмов за пределы классов принципиально и не дает воспользоваться этим преимуществом ООП. Процедурщина и хендловщина в полный рост.

EP>>Ты так говоришь как будто "true OOP" это всегда хорошо, а "процедурщина" плохо.
BDA>С меня будет достаточно, если вы подтвердите, что стандартная библиотека C++ — не true OOP.

Она не true OOP ни в каких смыслах.

BDA>Хорошо это или плохо, мы поговорим в другой раз.


Конечно же это хорошо, я бы сказал что это большая удача что C++ пошёл по этому пути.
Re[13]: Кому ваще этот С++ нужен?
От: 0BD11A0D  
Дата: 30.05.15 16:10
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

BDA>>>>Как раз интеллисенс играет тут первую скрипку. Вы открываете его окошко и видите ВСЕ возможности некоторого класса.

EP>>>Нет, далеко не все. Например он не покажет что этот объект может быть аргументом у метода другого объекта
BDA>>Потому, что это информация не об объекте.

EP>То есть ты считаешь что эта информация настолько незначительная, что её можно не показывать, а вот информация о методах — это must-have?


Да, она менее значительна (вплоть до полной незначительности).

Пример: File OpenFile(String name); — это незначительно в контексте String s, если s = "Мама мыла раму", а не "/etc/www/blah-blah-blah.htm".

И вот такого мусора вывалится ГОРА. И ничего с этим не сделать. Поэтому все значительное умные люди инкапсулируют либо маскируют под инкапсуляцию (extension). Это прямо вот такой способ указать на значительность. Которую все равно надо указывать явно.

EP>>>это скорее вопрос к IDE — пусть делают новые формы дополнения, а не только "через точку"

BDA>>Это принципиально невозможно.

EP>Что невозможно? Получить список функций для которых данный объект может быть аргументом? Не считая случаи какого-нибудь сильного TMP/duck-typing — то всё возможно.


Вот что невозможно:

http://rsdn.ru/forum/flame.comp/6063107.1
Автор: 0BD11A0D
Дата: 29.05.15


EP>В любом случае "дополнение через точку" не стоит того чтобы уродовать язык и код — да и главным преимуществом ООП уж точно не является.


Не просто главным, а единственным (известным мне). Конечно, не само по себе, а как маркер. Я могу писать в блокноте без интеллисенса, предварительно осмотрев класс, но не могу, не изучив проект досконально, понять, что полагается делать с некоторым набором данных, если автор это не формализовал. То есть, на моделирование проекта в голове уйдет времени намного больше и оно будет потрачено неэффективно — мне придется рутинную работу делать как творческую.

Все. А какие еще у него есть преимущества, по-вашему? Сокрытие и защита данных? Так хендлы давно это делают. Безопасность? Смешно. Какие?

BDA>>>>Альтернатива — курить маны. То есть, вышел новый стандарт, новый STL, новый boost и вы должны сразу прочитать, понять и запомнить все, что написано в сопроводиловке.

EP>>>Читать документацию придётся в любом случае, чтобы знать контракты.
BDA>>В хорошем коде контракты выражены через него же.

EP>А как например выражается алгоритмическая сложность, список возможных исключений, и exception safety guarantee? Не говоря уже о том, что на последовательность вызова методов могут быть наложены некоторые ограничения.

EP>IntelliSense Oriented Development возможен только в примитивнейших случаях типа установки свойств формы и т.п. В общем же случае от него польза только в качестве подсказки правильного имени метода/поля.

Как например? Так вам надо поискать примеры. Они есть.

EP>>>А это вообще ортогонально. Декомпозицию на контейнеры и алгоритмы можно делать и в что называется в "true OO style". То есть смотришь ты "с высоты птичьего полета" на класс UTF-8 строки, и видишь что она реализует IBidirectionalSequence, далее смотришь на алгоритмы которые принимают IBidirectionalSequence — и находишь там to_lower, split или что там нужно.

BDA>>Когда вы покажете, что в IDE можно сделать интеллисенс, не основанный на инкапсуляции, я соглашусь.

EP>* глобальные функции дополняются без всякой инкапсуляции.


Нет, это невозможно, я показал это на примере с boost::split по ссылке выше.

EP>* MSVS C# умеет дополнять extension method'ы — которые по сути те же внешние функции. Думаю очевидно что такое же дополнение возможно без ключевого слова this и без специального синтаксиса вызова глобальной функции.


Ага, ехали Ландау с Лившицем в такси...

Не только не очевидно, но и ложно. C# потому и C#, что в нем не стали повторять ошибок C++. Вся роль extension'ов сводится к тому, чтобы маркировать статику в явном виде, как предназначенную для классов, в тех случаях, когда это невозможно сделать при помощи инкапсуляции (кастомизация или разделение во времени). Если их НЕ маркировать, получим (в этом отношении) C++, в котором знания о привязке просто ТЕРЯЮТСЯ. И уж точно автоматизировать эту работу будет нельзя.

В следующий раз, когда захочется написать «очевидно», опишите сразу как и почему.

BDA>>Но выше я утверждаю, что это невозможно. Однако бремя доказательства обратного я возлагаю на вас — ведь это вы написали «пусть делают новые формы дополнения», вам и показывать, КАК ИМЕННО.


EP>А что конкретно не понятно? Как найти список функций? Или как инициировать такое дополнение?


Вот это продуктивный подход, уважаю. Ответ по той же самой ссылке.

EP>>>Или ты против такой декомпозиции вообще? Тогда например для каждой строки (и контейнера в общем) придётся придётся реализовывать каждый алгоритм — M контейнеров * N алгоритмов

BDA>>Зачем? Если алгоритму не важен тип контейнера, он может быть реализован в классе АбстрактныйКонтейнер, а затем переопределен в более специфическом классе. Никакого комбинаторного взрыва.

EP>Предлагаешь наследовать реализацию? Сразу получаем проблемы в языках без множественного наследования.

EP>Да и как расширять? Как добавить новый алгоритм без изменения?

Вы слишком уводите тему в сторону. В этой теме, в этой ее ветке, речь идет о способе организации стандартной библиотеки, которая содержит в себе конечный набор алгоритмов. Что делать, когда нужен свой, новый, предлагаю обсудить на примере.
Re[14]: Кому ваще этот С++ нужен?
От: Evgeny.Panasyuk Россия  
Дата: 01.06.15 00:09
Оценка: +1
Здравствуйте, 0BD11A0D, Вы писали:

EP>>То есть ты считаешь что эта информация настолько незначительная, что её можно не показывать, а вот информация о методах — это must-have?

BDA>Да, она менее значительна (вплоть до полной незначительности).
BDA>Пример: File OpenFile(String name); — это незначительно в контексте String s, если s = "Мама мыла раму", а не "/etc/www/blah-blah-blah.htm".
BDA>И вот такого мусора вывалится ГОРА. И ничего с этим не сделать. Поэтому все значительное умные люди инкапсулируют либо маскируют под инкапсуляцию (extension).
BDA>Это прямо вот такой способ указать на значительность. Которую все равно надо указывать явно.

Во-первых нужно правильно сортировать варианты. Например функции из того же namespace — более приоритетные. В более общем виде — чем меньше расстояние в дереве namespace'ов — тем выше приоритет.
Во-вторых рулит type-rich programming. Например path вместо string.

EP>>>>это скорее вопрос к IDE — пусть делают новые формы дополнения, а не только "через точку"

BDA>>>Это принципиально невозможно.
EP>>Что невозможно? Получить список функций для которых данный объект может быть аргументом? Не считая случаи какого-нибудь сильного TMP/duck-typing — то всё возможно.
BDA>Вот что невозможно:
BDA>http://rsdn.ru/forum/flame.comp/6063107.1
Автор: 0BD11A0D
Дата: 29.05.15


Там говорится про "типичный" алгоритм — но если у класса сотни методов то как IDE должна выбрать из них "типичные"?

EP>>В любом случае "дополнение через точку" не стоит того чтобы уродовать язык и код — да и главным преимуществом ООП уж точно не является.

BDA>Не просто главным, а единственным (известным мне). Конечно, не само по себе, а как маркер.

Всё же "единственным" или просто "маркер"?
Вот если бы не было авто-дополнения — ты бы вообще использовал ООП?

BDA>Я могу писать в блокноте без интеллисенса, предварительно осмотрев класс, но не могу, не изучив проект досконально, понять, что полагается делать с некоторым набором данных, если автор это не формализовал. То есть, на моделирование проекта в голове уйдет времени намного больше и оно будет потрачено неэффективно — мне придется рутинную работу делать как творческую.


И как тут помогает ООП? Ты моделируешь проект бегая по коду с IntelliSense'ом?

BDA>Все. А какие еще у него есть преимущества, по-вашему? Сокрытие и защита данных? Так хендлы давно это делают. Безопасность? Смешно. Какие?


Например иерархичность — в некоторых областях это действительно удобно и естественно, правда далеко не во всех.

EP>>>>Читать документацию придётся в любом случае, чтобы знать контракты.

BDA>>>В хорошем коде контракты выражены через него же.
EP>>А как например выражается алгоритмическая сложность, список возможных исключений, и exception safety guarantee? Не говоря уже о том, что на последовательность вызова методов могут быть наложены некоторые ограничения.
EP>>IntelliSense Oriented Development возможен только в примитивнейших случаях типа установки свойств формы и т.п. В общем же случае от него польза только в качестве подсказки правильного имени метода/поля.
BDA>Как например? Так вам надо поискать примеры. Они есть.

Примеры IntelliSense Oriented Development я действительно видел — "нужно добавить элементы. что тут у нас есть? ага — add, его и заюзаем — клац" — и в итоге получаем квадратическую сложность на ровном месте, потому что в контракт не смотрели. Что характерно, я фиксил подобное с помощью документации и "блокнота", даже без возможности скомпилировать.

EP>>>>А это вообще ортогонально. Декомпозицию на контейнеры и алгоритмы можно делать и в что называется в "true OO style". То есть смотришь ты "с высоты птичьего полета" на класс UTF-8 строки, и видишь что она реализует IBidirectionalSequence, далее смотришь на алгоритмы которые принимают IBidirectionalSequence — и находишь там to_lower, split или что там нужно.

BDA>>>Когда вы покажете, что в IDE можно сделать интеллисенс, не основанный на инкапсуляции, я соглашусь.
EP>>* глобальные функции дополняются без всякой инкапсуляции.
BDA>Нет, это невозможно, я показал это на примере с boost::split по ссылке выше.

Конкретно здесь речь об дополнении имени функции по части её имени, а не по типам аргументов.
"IntelliSense не основанный на инкапсуляции" в чистом виде

EP>>* MSVS C# умеет дополнять extension method'ы — которые по сути те же внешние функции. Думаю очевидно что такое же дополнение возможно без ключевого слова this и без специального синтаксиса вызова глобальной функции.

BDA>Ага, ехали Ландау с Лившицем в такси...
BDA>Не только не очевидно, но и ложно. C# потому и C#, что в нем не стали повторять ошибок C++. Вся роль extension'ов сводится к тому, чтобы маркировать статику в явном виде, как предназначенную для классов, в тех случаях, когда это невозможно сделать при помощи инкапсуляции (кастомизация или разделение во времени). Если их НЕ маркировать, получим (в этом отношении) C++, в котором знания о привязке просто ТЕРЯЮТСЯ. И уж точно автоматизировать эту работу будет нельзя.
BDA>В следующий раз, когда захочется написать «очевидно», опишите сразу как и почему.

А я и описал. Непонятно с чем конкртено ты не согласен. Могу ещё раз повторить: убери ключевое слово this из extension method'ов в C# и специальный синтаксис вызова — как ты думаешь, будет ли технически возможно автодополнение в таком случае, и если нет то почему.

EP>>Предлагаешь наследовать реализацию? Сразу получаем проблемы в языках без множественного наследования.

EP>>Да и как расширять? Как добавить новый алгоритм без изменения?
BDA>Вы слишком уводите тему в сторону. В этой теме, в этой ее ветке, речь идет о способе организации стандартной библиотеки, которая содержит в себе конечный набор алгоритмов. Что делать, когда нужен свой, новый, предлагаю обсудить на примере.

1. Не вижу смысла ограничиваться стандартной библиотекой, да и не думал что в этой ветке такое ограничение.
2. Не вижу смысла уродовать код библиотеки (тем более стандартной) и сваливать внешние по сути алгоритмы во внутрь всех контейнеров, только из-за возможности получить автодополнение через точку.
3. Алгоритмов очень много, далеко не все есть в стандартной библиотеке, расширять набор алгоритмов рано или поздно всё равно придётся.
Re[7]: Кому ваще этот С++ нужен?
От: Aртём Австралия жж
Дата: 01.06.15 04:22
Оценка:
Здравствуйте, greenpci, Вы писали:

G>Могу подтвердить. Производил замеры памяти и скорости, и пришлось отказаться от std::map и std::vector<bool> (отдельная спецификация вектора) в нашем продукте в пользу других реализаций, хотя очень хотелось использовать СТЛевские. Надо сказать, что создатели и не претендавали на самую быструю реализацию. Задача была выбрать меньшее из зол и удовлетворить большинство.


http://www.cplusplus.com/reference/unordered_map/unordered_map/ не подошёл?
Re[8]: Кому ваще этот С++ нужен?
От: greenpci  
Дата: 01.06.15 07:27
Оценка:
Здравствуйте, Aртём, Вы писали:

Aё>http://www.cplusplus.com/reference/unordered_map/unordered_map/ не подошёл?


Упоминалось здесь
Автор: greenpci
Дата: 24.05.15
Re[12]: Кому ваще этот С++ нужен?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.06.15 07:51
Оценка:
Здравствуйте, 0BD11A0D, Вы писали:


EP>>это скорее вопрос к IDE — пусть делают новые формы дополнения, а не только "через точку"

BDA>Это принципиально невозможно.

Принципиально это возможно, всего лишь небольшое изменение в язык. Только это не нужно. Дополнения должны вызываться точно так же, как и основные методы, что бы не было никакой разницы с тз. синтаксиса.
x.Method(y)
x.ExtensionMethod(y)
x `Method` y
x `ExtensionMethod` y


BDA>Когда вы покажете, что в IDE можно сделать интеллисенс, не основанный на инкапсуляции, я соглашусь. Но выше я утверждаю, что это невозможно. Однако бремя доказательства обратного я возлагаю на вас — ведь это вы написали «пусть делают новые формы дополнения», вам и показывать, КАК ИМЕННО.


Ужос. Экстншны в шарпе сделаны как раз не на инкапсуляции и отлично поддерживаются IDE.
Отредактировано 01.06.2015 7:57 Pauel . Предыдущая версия .
Re[13]: Кому ваще этот С++ нужен?
От: Evgeny.Panasyuk Россия  
Дата: 01.06.15 08:38
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Дополнения должны вызываться точно так же, как и основные методы, что бы не было никакой разницы с тз. синтаксиса.


1. Чем плоха эта разница?
2. Почему внешние функции должны вызываться как внутренние, а не наоборот?
3. Extension методы работают только по первому параметру, в то время когда автодополнение возможно по любому — и в этом случае синтаксис "через точку" пролетает.

Вызовы через точку хороши только когда нужно делать method chaining — то есть эдакая инфиксность.

P.S. Вот статья
Автор: Qbit86
Дата: 21.10.14
от Страуструпа на эту тему и обсуждение.
Re[14]: Кому ваще этот С++ нужен?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.06.15 09:51
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

I>>Дополнения должны вызываться точно так же, как и основные методы, что бы не было никакой разницы с тз. синтаксиса.


EP>1. Чем плоха эта разница?


Ломает полиморфизм.

EP>2. Почему внешние функции должны вызываться как внутренние, а не наоборот?


Смотри внимательно пример кода, там оба варианта.

EP>3. Extension методы работают только по первому параметру, в то время когда автодополнение возможно по любому — и в этом случае синтаксис "через точку" пролетает.


"через точку" это специальный случай

EP>P.S. Вот статья
Автор: Qbit86
Дата: 21.10.14
от Страуструпа на эту тему и обсуждение.


Так себе идея и здесь вроде как нет ничего про "автодополнение возможно по любому".
Гораздо полезнее сделать чтото навроде x `f` y
Re[14]: Кому ваще этот С++ нужен?
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 01.06.15 10:23
Оценка:
Здравствуйте, 0BD11A0D, Вы писали:

EP>>* MSVS C# умеет дополнять extension method'ы — которые по сути те же внешние функции. Думаю очевидно что такое же дополнение возможно без ключевого слова this и без специального синтаксиса вызова глобальной функции.


BDA>Не только не очевидно, но и ложно. C# потому и C#, что в нем не стали повторять ошибок C++. Вся роль extension'ов сводится к тому, чтобы маркировать статику в явном виде, как предназначенную для классов, в тех случаях, когда это невозможно сделать при помощи инкапсуляции (кастомизация или разделение во времени). Если их НЕ маркировать, получим (в этом отношении) C++, в котором знания о привязке просто ТЕРЯЮТСЯ. И уж точно автоматизировать эту работу будет нельзя.


Роль экстеншнов это вобщем инкапсуляция + полиморфизм, как это странно ни звучит.
Re[18]: Кому ваще этот С++ нужен?
От: Cyberax Марс  
Дата: 01.06.15 10:27
Оценка:
Здравствуйте, 0BD11A0D, Вы писали:

C>>Что конкретно "не так"? Это ровно та же задача, для С++ она только немного сложнее. Принципиальной разницы нет.

BDA>Если разницы нет, почему бы не привести сразу «правильный» пример? Хотя бы одну IDE, которая решает поставленную мною задачу. Это же так легко — р-раз, и я понимаю, что кругом неправ.
Clion. Запусти и посмотри, БЛДЖАД. Не для всех случаев пока что, но уже вполне нормально.

Я уж не говорю о том, что слегка кретинично ставить во главу угла то, что через intellisense говнодебил сможет найти метод с примерно подходящим названием.
Sapienti sat!
Re[15]: Кому ваще этот С++ нужен?
От: 0BD11A0D  
Дата: 01.06.15 11:00
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Во-первых нужно правильно сортировать варианты. Например функции из того же namespace — более приоритетные. В более общем виде — чем меньше расстояние в дереве namespace'ов — тем выше приоритет.


Еще чуть-чуть, и окажется, что class — САМЫЙ приоритетный namespace. Просто доведите свою мысль до конца.

EP>Во-вторых рулит type-rich programming. Например path вместо string.


Про path я думал, идея неплохая. Если добавить поддержку частей пути как списка и неявное преобразование в строки, я бы одобрил.

Ну хорошо — конструктор нового исключения. Предельно близок по неймсейсам, тип однозначно строковый. Будет вылезать всегда. И?

EP>>>>>это скорее вопрос к IDE — пусть делают новые формы дополнения, а не только "через точку"

BDA>>>>Это принципиально невозможно.
EP>>>Что невозможно? Получить список функций для которых данный объект может быть аргументом? Не считая случаи какого-нибудь сильного TMP/duck-typing — то всё возможно.
BDA>>Вот что невозможно:
BDA>>http://rsdn.ru/forum/flame.comp/6063107.1
Автор: 0BD11A0D
Дата: 29.05.15


EP>Там говорится про "типичный" алгоритм — но если у класса сотни методов то как IDE должна выбрать из них "типичные"?


Все методы, явно помещеные в класс — типичные. Типичными их делает как раз помещение туда. Дура-IDE должна показывать все молча. И, конечно, это авторский замысел, то есть, некая модель программистских представлений о сущностях. Например, регексы в FCL лежат отдельно, хотя ничего не мешало бы... То есть, не надо искать тут закономерностей, это удачное (или не очень) представление авторов кода о типичности.

EP>>>В любом случае "дополнение через точку" не стоит того чтобы уродовать язык и код — да и главным преимуществом ООП уж точно не является.

BDA>>Не просто главным, а единственным (известным мне). Конечно, не само по себе, а как маркер.

EP>Всё же "единственным" или просто "маркер"?

EP>Вот если бы не было авто-дополнения — ты бы вообще использовал ООП?

Удивительно вы разбиваете текст, который читаете. Ниже ответ, стоило ли задавать вопрос?

BDA>>Я могу писать в блокноте без интеллисенса, предварительно осмотрев класс, но не могу, не изучив проект досконально, понять, что полагается делать с некоторым набором данных, если автор это не формализовал. То есть, на моделирование проекта в голове уйдет времени намного больше и оно будет потрачено неэффективно — мне придется рутинную работу делать как творческую.


EP>И как тут помогает ООП? Ты моделируешь проект бегая по коду с IntelliSense'ом?


По-моему, я все понятно написал и на все ответил.

BDA>>Все. А какие еще у него есть преимущества, по-вашему? Сокрытие и защита данных? Так хендлы давно это делают. Безопасность? Смешно. Какие?


EP>Например иерархичность — в некоторых областях это действительно удобно и естественно, правда далеко не во всех.


Ну, это долгая песня — является ли иерархичность непременным атрибутом ООП. Тратить время на нее не хочу, скажу просто, что с моей точки зрения она очень рульная вещь, но вторичная.

EP>>>А как например выражается алгоритмическая сложность, список возможных исключений, и exception safety guarantee? Не говоря уже о том, что на последовательность вызова методов могут быть наложены некоторые ограничения.

EP>>>IntelliSense Oriented Development возможен только в примитивнейших случаях типа установки свойств формы и т.п. В общем же случае от него польза только в качестве подсказки правильного имени метода/поля.
BDA>>Как например? Так вам надо поискать примеры. Они есть.

EP>Примеры IntelliSense Oriented Development я действительно видел — "нужно добавить элементы. что тут у нас есть? ага — add, его и заюзаем — клац" — и в итоге получаем квадратическую сложность на ровном месте, потому что в контракт не смотрели. Что характерно, я фиксил подобное с помощью документации и "блокнота", даже без возможности скомпилировать.


Я тоже много чего видел. Например, площадь Сан-Марко, как мне тут с утра напомнили. Но я же не пишу обо всем об этом, а пишу только о том, что имеет отношение к вопросам и ответам. Вопрос был — «А как например выражается алгоритмическая сложность, список возможных исключений». Я говорю: есть такие примеры и вы можете их найти самостоятельно. Незачем зацикливаться на C++.

EP>Конкретно здесь речь об дополнении имени функции по части её имени, а не по типам аргументов.

EP>"IntelliSense не основанный на инкапсуляции" в чистом виде

Ну конечно, сейчас уже речь пойдет о том, чтобы часть имени указывать. Как иначе гору мусора фильтровать. Вы мне покажите ВСЕ операции. И чтобы мусора не было. В FCL все это есть и упаковано в вызывающий у некоторых смех интеллисенс. На меньшее не согласен. И никто, кто его видел вживую, а не в книжках с картинками и без, обратно к std возвращаться не хочет.

BDA>>Не только не очевидно, но и ложно. C# потому и C#, что в нем не стали повторять ошибок C++. Вся роль extension'ов сводится к тому, чтобы маркировать статику в явном виде, как предназначенную для классов, в тех случаях, когда это невозможно сделать при помощи инкапсуляции (кастомизация или разделение во времени). Если их НЕ маркировать, получим (в этом отношении) C++, в котором знания о привязке просто ТЕРЯЮТСЯ. И уж точно автоматизировать эту работу будет нельзя.

BDA>>В следующий раз, когда захочется написать «очевидно», опишите сразу как и почему.

EP>А я и описал. Непонятно с чем конкртено ты не согласен. Могу ещё раз повторить: убери ключевое слово this из extension method'ов в C# и специальный синтаксис вызова — как ты думаешь, будет ли технически возможно автодополнение в таком случае, и если нет то почему.


Нет, не будет. Потому, что ни IDE, ни компилятор в вашу голову залезть не может и понять, что это за функция — случайно совместимая по сигнатуре или задизайненная как extension — тоже не может. Вы там вверху начали предлагать косвенно указывать на близость к телу, например, поощрять избыточную типизацию или рулить неймспейсами. Зачем косвенно, когда можно все это делать прямо?

Я хотел найти описание необходимости this от создателей языка, но все, что нашел, это вот такую болтологию:

http://stackoverflow.com/questions/3510964/why-is-the-this-keyword-required-to-call-an-extension-method-from-within-the-e

Первый НЕудачный ответ Эрика Липперта на моей памяти. Он просто уходит от ответа. Чем-то же они думали, когда вводили this, а не перебирали совместимые сигнатуры. Вот и надо было написать, зачем и почему было принято такое решение. Ответ, как ни крути, сводится к явной маркировке, но что мешало ответить по существу?

EP>1. Не вижу смысла ограничиваться стандартной библиотекой, да и не думал что в этой ветке такое ограничение.

EP>2. Не вижу смысла уродовать код библиотеки (тем более стандартной) и сваливать внешние по сути алгоритмы во внутрь всех контейнеров, только из-за возможности получить автодополнение через точку.
EP>3. Алгоритмов очень много, далеко не все есть в стандартной библиотеке, расширять набор алгоритмов рано или поздно всё равно придётся.

1. А я вижу и объяснил почему.
2. А я вижу и объяснил почему.
3. Я предложил привести пример, чтобы его разобрать, но вместо примера получил общие рассуждения.
Re[13]: Кому ваще этот С++ нужен?
От: 0BD11A0D  
Дата: 01.06.15 11:09
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Ужос. Экстншны в шарпе сделаны как раз не на инкапсуляции и отлично поддерживаются IDE.


Они сделаны на псевдоинкапсуляции, отложенной инкапсуляции, называйте как хотите. Суть в том, что и при включении метода в класс, и при написании extension'ов, требуется явно указывать принадлежность к классу. Это — суть. А если вам хочется формально до чего-нибудь доковыряться, пожалуйста: да, согласен, экстншны в шарпе сделаны как раз не на инкапсуляции и отлично поддерживаются IDE, +100500, вы правы, абсолютно справедливое утверждение, еще или хватит?
Re[19]: Кому ваще этот С++ нужен?
От: 0BD11A0D  
Дата: 01.06.15 11:13
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Clion. Запусти и посмотри, БЛДЖАД. Не для всех случаев пока что, но уже вполне нормально.


Понятно с вами все. Я написал Clion — через постинг получаю Clion. Элиза какая-то просто.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.