Re[14]: Source code comprehension
От: Evgeny.Panasyuk Россия  
Дата: 29.12.16 00:55
Оценка:
Здравствуйте, 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()? Список или только один конкретный вариант?
Re[15]: Source code comprehension
От: Qbit86 Кипр
Дата: 29.12.16 01:04
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Возьми обычный код принимающий какой-нибудь какой-нибудь IShape — что по-твоему должен выдать GoTo... для .draw()? Список или только один конкретный вариант?


В C# он меня приведёт на объявление метода в интерфейсе. (Причём на одну подходящую перегрузку по типам/количеству, ежели вдруг там несколько сигнатур метода Draw().) Там уже можно выбрать вариант Go To Implementation, он выдаст список рализаций в разных наследниках. Причём опять же, список реализаций именно нужной сигнатуры из нескольких перегрузок по типам/количеству.
Глаза у меня добрые, но рубашка — смирительная!
Re[14]: Не баг, а фича
От: Evgeny.Panasyuk Россия  
Дата: 29.12.16 01:05
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Вот, опять. Жму F12 по вызову функции, применяемой к четырём аргументам. В .NET, даже если у меня несколько перегрузок по типам/количеству аргументов, компилятор C# в этой точке знает, какая вызывается. Компилятор же C++ выдаёт мне список из 8 вариантов, среди которых функции от трёх аргументов.


Какой ещё компилятор? Давай конкретный пример.

Q>Это сложно воспринимать как фичу, но мы справимся!


Держись там.
Re[16]: вместо простого перехода
От: Evgeny.Panasyuk Россия  
Дата: 29.12.16 01:09
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Там уже можно выбрать вариант Go To Implementation, он выдаст список


Q>Или вместо простого перехода выдаёт список каких-то методов-кандидатов, их перегрузок, специализаций, или что у них там.

Re[15]: /std:c++latest
От: Qbit86 Кипр
Дата: 29.12.16 01:15
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Какой ещё компилятор? Давай конкретный пример.


Майкрософтовский компилятор C++, поставляемый с Visual Studio 2017 RC. В режиме «/std:c++latest» (C++17, на меньшее не согласен).
Глаза у меня добрые, но рубашка — смирительная!
Re[16]: /std:c++latest
От: Evgeny.Panasyuk Россия  
Дата: 29.12.16 01:16
Оценка:
Здравствуйте, Qbit86, Вы писали:

EP>>Какой ещё компилятор?

Q>Майкрософтовский компилятор C++

Тебе он список выдаёт?
Re[17]: Концепты
От: Qbit86 Кипр
Дата: 29.12.16 01:20
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

Q>>Там уже можно выбрать вариант Go To Implementation, он выдаст список

EP>

Q>>Или вместо простого перехода выдаёт список каких-то методов-кандидатов, их перегрузок, специализаций, или что у них там.


Я таки не понял, мне надо расписывать разницу между динамическим и статическим полиморфизмом? Никаких проблем у компилятора не было бы, если бы статический полиморфизм был constrained/bounded. Как внятные концепты завезут, тогда и приходите!
Глаза у меня добрые, но рубашка — смирительная!
Re[17]: /std:c++latest
От: Qbit86 Кипр
Дата: 29.12.16 01:23
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Тебе он список выдаёт?


Да. Выдаёт список с вариантами, некоторые из них не матчатся даже по количеству параметров с интересующей меня функцией.
Глаза у меня добрые, но рубашка — смирительная!
Re[18]: Концепты
От: Evgeny.Panasyuk Россия  
Дата: 29.12.16 01:24
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>>>Там уже можно выбрать вариант Go To Implementation, он выдаст список

EP>>

Q>>>Или вместо простого перехода выдаёт список каких-то методов-кандидатов, их перегрузок, специализаций, или что у них там.

Q>Я таки не понял, мне надо расписывать разницу между динамическим и статическим полиморфизмом?

И в чём разница в данном контексте?

Q>Никаких проблем у компилятора не было бы, если бы статический полиморфизм был constrained/bounded.


template<typename T>
void foo(T x)
{
    bar(x);
}
У bar несколько перегрузок/специализаций, что должен выдать F12 когда курсор внутри foo на bar?
Re[19]: Концепты
От: Qbit86 Кипр
Дата: 29.12.16 01:35
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>
EP>template<typename T>
EP>void foo(T x)
EP>{
EP>    bar(x);
EP>}
EP>
У bar несколько перегрузок/специализаций, что должен выдать F12 когда курсор внутри foo на bar?


В нормальных языках есть проверки/ограничения параметризованных типов при определении шаблонов. Чтоб система типов отсеивала ошибки на раннем этапе. В C++ их нет, приходится мучиться. (Их отсутствие считает недостатком в том числе Страуструп — это во избежание сказок про «не баг, а фича».) Но пусть в этом случае хотя бы в списке вариантов не выпадала функция bar с четырьмя параметрами.
Глаза у меня добрые, но рубашка — смирительная!
Re[13]: Visual C# vs C++. Надо сравнить перспективы.
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.12.16 02:40
Оценка:
Здравствуйте, 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>>
AVK Blog
Re[12]: Проблемы с навигацией
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.12.16 02:40
Оценка: -1
Здравствуйте, 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>>
AVK Blog
Re[15]: Source code comprehension
От: hardcase Пират http://nemerle.org
Дата: 29.12.16 06:26
Оценка: +1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Возьми обычный код принимающий какой-нибудь какой-нибудь IShape — что по-твоему должен выдать GoTo... для .draw()? Список или только один конкретный вариант?


К интерфейсу можно даже не ходить, а сразу выбрать Go To Implementation и вижак выдаст список реализаций метода либо сразу перейдет на единственную реализацию.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Visual C# vs C++. Надо сравнить перспективы.
От: AlexGin Беларусь  
Дата: 29.12.16 11:12
Оценка:
Здравствуйте, Katyr, Вы писали:

K>он компилит в машинный код или байт-код, как в JVM?

Компилит в исполняемый байт-код, который выглядит как файлы (*.exe и *.dll).
Его исполняет .NET Core Run-Time.
Re[7]: Visual C# vs C++. Надо сравнить перспективы.
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.12.16 11:23
Оценка:
Здравствуйте, AlexGin, Вы писали:

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


K>>он компилит в машинный код или байт-код, как в JVM?

AG>Компилит в исполняемый байт-код, который выглядит как файлы (*.exe и *.dll).
AG>Его исполняет .NET Core Run-Time.

Не всегда
.NET Native: создание двоичных файлов машинного кода

.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++. Надо сравнить перспективы.
От: Evgeny.Panasyuk Россия  
Дата: 29.12.16 11:24
Оценка:
Здравствуйте, AndrewVK, Вы писали:

EP>>"Рефакторинг вручную" это по сути обычная разработка.

AVK>А ты ожидал какой то необычной?

Нет, я говорю что навигация и автоматический рефакторинг это разные вещи, точно также как разными вещами являются утечки памяти и висячие указатели.

AVK>>>жизненно важным становится работающий полностью корректно Go to usages.

EP>>Если например будут false positives — это не критично.
AVK>С точи зрения эффективности — весьма критично.

В большинстве случаев, даже на древних версиях студии, их не будет. А в оставшихся уж точно не критично, но ты конечно можешь попытаться раздуть из мухи слона
Re[13]: Проблемы с навигацией
От: Evgeny.Panasyuk Россия  
Дата: 29.12.16 11:28
Оценка: -2
Здравствуйте, AndrewVK, Вы писали:

Q>>Навигация в одной и той же Студии 2017 RC для C# и C++ — экспириенс совершенно различный, доложу я вам.

AVK>Понимаешь, люди привыкают к варианту С++ и уже проблем не замечают.

Я внезапно использую C# в том числе. И например для того же C кода нет проблем связанных с шаблонами и перегрузками.

AVK>Видишь, Евгений пишет — ну подумайшь попадешь десять раз не туда, все оравно ж попадешь. И пишет он совершенно искренне, не понимая что это рвет непрерывность процесса и очень сильно замедляет процесс изучения кода.

AVK>И практически невозможно объяснить, что после некоторого экспириенса вся эта навигация в шарпе уходит на подзознательный уровень, ты даже не задумываешься туда ли ты попал или нет. Чтобы это понять надо минимум месяцок другой с этим плотно, без перерыва, поработать.

И тут Остапа понесло. Конечно только Истинный Свидетель Сишарпа может понять и прочуствовать что такое непрерываность процесса и подсознательная навигация, неверующим не понять — у них нет такого органа — да они вообще код набирают по одной буковке, двумя пальцами смотря на клавиатуру, в Консоле и Блокноте (tm)
Re[16]: Source code comprehension
От: Evgeny.Panasyuk Россия  
Дата: 29.12.16 11:32
Оценка:
Здравствуйте, hardcase, Вы писали:

EP>>Возьми обычный код принимающий какой-нибудь какой-нибудь IShape — что по-твоему должен выдать GoTo... для .draw()? Список или только один конкретный вариант?

H>К интерфейсу можно даже не ходить, а сразу выбрать Go To Implementation и вижак выдаст список реализаций

Q>Или вместо простого перехода выдаёт список каких-то методов-кандидатов, их перегрузок, специализаций, или что у них там.

Re[17]: Source code comprehension
От: Qbit86 Кипр
Дата: 29.12.16 11:44
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

H>>К интерфейсу можно даже не ходить, а сразу выбрать Go To Implementation и вижак выдаст список реализаций


EP>

Q>>Или вместо простого перехода выдаёт список каких-то методов-кандидатов, их перегрузок, специализаций, или что у них там.


Мне кажется, ты реально не способен удержать нить разговора, или просто тупо троллишь.
Глаза у меня добрые, но рубашка — смирительная!
Re[7]: CIL
От: Qbit86 Кипр
Дата: 29.12.16 11:52
Оценка: +1
Здравствуйте, AlexGin, Вы писали:

AG>Компилит в исполняемый байт-код, который выглядит как файлы (*.exe и *.dll).

AG>Его исполняет .NET Core Run-Time.

Всё-таки не исполняет, а компилирует CIL в машинный код, исполняемый процессором.
Глаза у меня добрые, но рубашка — смирительная!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.