Здравствуйте, Qbit86, Вы писали:
Q>Не только Boost, но и STL. В .NET, когда мне надо уточнить поведение стандартного класса, я вбиваю в поисковый запрос «coreclr SomeClass» или «corefx SomeClass». Обычно по первой ссылке — исходник класса на GitHub в майкрософтовском репозитории. Я читаю его прямо в браузере без всяких навигаций, и о чудо — понимаю! С заголовочными файлами Стандартной Библиотеки Шаблонов такое не прокатывает, там по крупицам надо выдирать смысл из мешанины type_trait'ов, typedef'ов и прочего итераторного шлака.
Поведение STL нормально описано на cppreference.com и cplusplus.com, с примерами и всей необходимой информацией. Вбиваешь в поиске partition_point и на первых местах будет один из этих сайтов. Более точно в стандарте. Закладываться на какие-то особенности одной из реализаций, в какой-то из моментов времени — вредно, это не только STL касается.
EP>>Так это не баг, а фича — у тебя в том месте скорей всего возможны разные варианты, поэтому и список. Q>Спасибо, такой фичи не надо. Нужна такая фича, чтобы варианты проверялись/энфорсились в момент чтения/написания обобщённого кода, а не когда-то потом при инстанцировании пользователем в непонятном месте.
Возьми обычный код принимающий какой-нибудь какой-нибудь IShape — что по-твоему должен выдать GoTo... для .draw()? Список или только один конкретный вариант?
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Возьми обычный код принимающий какой-нибудь какой-нибудь IShape — что по-твоему должен выдать GoTo... для .draw()? Список или только один конкретный вариант?
В C# он меня приведёт на объявление метода в интерфейсе. (Причём на одну подходящую перегрузку по типам/количеству, ежели вдруг там несколько сигнатур метода Draw().) Там уже можно выбрать вариант Go To Implementation, он выдаст список рализаций в разных наследниках. Причём опять же, список реализаций именно нужной сигнатуры из нескольких перегрузок по типам/количеству.
Здравствуйте, Qbit86, Вы писали:
Q>Вот, опять. Жму F12 по вызову функции, применяемой к четырём аргументам. В .NET, даже если у меня несколько перегрузок по типам/количеству аргументов, компилятор C# в этой точке знает, какая вызывается. Компилятор же C++ выдаёт мне список из 8 вариантов, среди которых функции от трёх аргументов.
Какой ещё компилятор? Давай конкретный пример.
Q>Это сложно воспринимать как фичу, но мы справимся!
Здравствуйте, Evgeny.Panasyuk, Вы писали:
Q>>Там уже можно выбрать вариант Go To Implementation, он выдаст список EP>
Q>>Или вместо простого перехода выдаёт список каких-то методов-кандидатов, их перегрузок, специализаций, или что у них там.
Я таки не понял, мне надо расписывать разницу между динамическим и статическим полиморфизмом? Никаких проблем у компилятора не было бы, если бы статический полиморфизм был constrained/bounded. Как внятные концепты завезут, тогда и приходите!
У bar несколько перегрузок/специализаций, что должен выдать F12 когда курсор внутри foo на bar?
В нормальных языках есть проверки/ограничения параметризованных типов при определении шаблонов. Чтоб система типов отсеивала ошибки на раннем этапе. В C++ их нет, приходится мучиться. (Их отсутствие считает недостатком в том числе Страуструп — это во избежание сказок про «не баг, а фича».) Но пусть в этом случае хотя бы в списке вариантов не выпадала функция bar с четырьмя параметрами.
Глаза у меня добрые, но рубашка — смирительная!
Re[13]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>"Рефакторинг вручную" это по сути обычная разработка.
А ты ожидал какой то необычной? Мерседес тоже обычная машина, но это не делает его идентичным Логану.
AVK>>жизненно важным становится работающий полностью корректно Go to usages. EP>Если например будут false positives — это не критично.
С точи зрения эффективности — весьма критично.
EP>В крайнем случае "Go to usages" легко эмулируется с помощью компилятора
Мне добавить нечего.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, Qbit86, Вы писали:
Q>Навигация в одной и той же Студии 2017 RC для C# и C++ — экспириенс совершенно различный, доложу я вам.
Понимаешь, люди привыкают к варианту С++ и уже проблем не замечают. Видишь, Евгений пишет — ну подумайшь попадешь десять раз не туда, все оравно ж попадешь. И пишет он совершенно искренне, не понимая что это рвет непрерывность процесса и очень сильно замедляет процесс изучения кода.
И практически невозможно объяснить, что после некоторого экспириенса вся эта навигация в шарпе уходит на подзознательный уровень, ты даже не задумываешься туда ли ты попал или нет. Чтобы это понять надо минимум месяцок другой с этим плотно, без перерыва, поработать.
P.S. Вспоминается как в далеком 2006 на конференции, народ, видя с какой скоростью я набираю и правлю код в решарпере, замирал с открытыми ртами. А, казалось бы, и решарпер тогдашний был сильно попроще, и кетчуп для шарпа пока еще был весьма популярен. Ан нет, чего то не хватало.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Возьми обычный код принимающий какой-нибудь какой-нибудь IShape — что по-твоему должен выдать GoTo... для .draw()? Список или только один конкретный вариант?
К интерфейсу можно даже не ходить, а сразу выбрать Go To Implementation и вижак выдаст список реализаций метода либо сразу перейдет на единственную реализацию.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, Katyr, Вы писали:
K>он компилит в машинный код или байт-код, как в JVM?
Компилит в исполняемый байт-код, который выглядит как файлы (*.exe и *.dll).
Его исполняет .NET Core Run-Time.
Re[7]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, AlexGin, Вы писали:
AG>Здравствуйте, Katyr, Вы писали:
K>>он компилит в машинный код или байт-код, как в JVM? AG>Компилит в исполняемый байт-код, который выглядит как файлы (*.exe и *.dll). AG>Его исполняет .NET Core Run-Time.
.NET Native и NGEN
Генератор образов в машинном коде (NGEN) компилирует сборки в машинный код и устанавливает их в кэш образов в машинном коде на локальном компьютере. Однако хотя NGEN, как и .NET Native, создает машинный код, NGEN имеет существенные отличия от .NET Native:
Если для конкретного метода нет образа в машинном коде, NGEN переключается на JIT-компиляцию кода. Это означает, что образы в машинном коде должны продолжать включать метаданные и IL-код для того случая, если генератору NGEN необходимо переключиться на JIT-компиляцию. В противоположность этому .NET Native только создает образы в машинном коде и не переключается на JIT-компиляцию. В результате должны сохраняться метаданные, необходимые только для некоторых сценариев отражения, сериализации и взаимодействия.
NGEN по-прежнему полагается на полную среду CLR для таких сервисов, как загрузка сборок, удаленное и локальное взаимодействие, управление памятью, сбор мусора и, при необходимости, JIT-компиляция. В .NET Native многие из этих сервисов являются либо ненужными (JIT-компиляции), либо разрешаются во время построения и включаются в сборку приложения. Остальные сервисы, наиболее важным из которых является сбор мусора, включены в гораздо более компактную, оптимизированную среду выполнения mrt100_app.dll.
Образы NGEN, как правило, хрупкие. Например, обновление или изменение зависимости обычно требует, чтобы сборки, которые его используют, также были пересозданы NGEN. Это особенно верно для системных сборок в библиотеке классов .NET Framework. В противоположность этому .NET Native позволяет обслуживать приложения независимо друг от друга.
и солнце б утром не вставало, когда бы не было меня
Re[14]: Visual C# vs C++. Надо сравнить перспективы.
Здравствуйте, AndrewVK, Вы писали:
EP>>"Рефакторинг вручную" это по сути обычная разработка. AVK>А ты ожидал какой то необычной?
Нет, я говорю что навигация и автоматический рефакторинг это разные вещи, точно также как разными вещами являются утечки памяти и висячие указатели.
AVK>>>жизненно важным становится работающий полностью корректно Go to usages. EP>>Если например будут false positives — это не критично. AVK>С точи зрения эффективности — весьма критично.
В большинстве случаев, даже на древних версиях студии, их не будет. А в оставшихся уж точно не критично, но ты конечно можешь попытаться раздуть из мухи слона
Здравствуйте, AndrewVK, Вы писали:
Q>>Навигация в одной и той же Студии 2017 RC для C# и C++ — экспириенс совершенно различный, доложу я вам. AVK>Понимаешь, люди привыкают к варианту С++ и уже проблем не замечают.
Я внезапно использую C# в том числе. И например для того же C кода нет проблем связанных с шаблонами и перегрузками.
AVK>Видишь, Евгений пишет — ну подумайшь попадешь десять раз не туда, все оравно ж попадешь. И пишет он совершенно искренне, не понимая что это рвет непрерывность процесса и очень сильно замедляет процесс изучения кода. AVK>И практически невозможно объяснить, что после некоторого экспириенса вся эта навигация в шарпе уходит на подзознательный уровень, ты даже не задумываешься туда ли ты попал или нет. Чтобы это понять надо минимум месяцок другой с этим плотно, без перерыва, поработать.
И тут Остапа понесло. Конечно только Истинный Свидетель Сишарпа может понять и прочуствовать что такое непрерываность процесса и подсознательная навигация, неверующим не понять — у них нет такого органа — да они вообще код набирают по одной буковке, двумя пальцами смотря на клавиатуру, в Консоле и Блокноте (tm)
Здравствуйте, hardcase, Вы писали:
EP>>Возьми обычный код принимающий какой-нибудь какой-нибудь IShape — что по-твоему должен выдать GoTo... для .draw()? Список или только один конкретный вариант? H>К интерфейсу можно даже не ходить, а сразу выбрать Go To Implementation и вижак выдаст список реализаций
Q>Или вместо простого перехода выдаёт список каких-то методов-кандидатов, их перегрузок, специализаций, или что у них там.
Здравствуйте, Evgeny.Panasyuk, Вы писали:
H>>К интерфейсу можно даже не ходить, а сразу выбрать Go To Implementation и вижак выдаст список реализаций
EP>
Q>>Или вместо простого перехода выдаёт список каких-то методов-кандидатов, их перегрузок, специализаций, или что у них там.
Мне кажется, ты реально не способен удержать нить разговора, или просто тупо троллишь.