Замена C++ headers
От: johny5 Новая Зеландия
Дата: 16.12.13 20:32
Оценка:
Всем привет.

Чем вы обходитесь чтобы быстро скакать по коду, группировать код в блоки подобных ф-ций и т.д... C++ подобные хеадеры отменили, сейчас всё одной большой простынёй.

Нашёл похожую тему от 2003 года, предлагалось использовать "Collapse to definitions". Вариант, только неудовлетворительный на 100%. Возможно таки появилось что то новое за 10 лет?

Я так понимаю использовать интерфейсы — не вариант. Работать через них — каждый раз вызов через виртуальный метод, издержки на ровном месте. Хотя поддерживать впринципе подобно по сложности поддержки C++ headers (ну тут уже Visual Assist выручает).
Re: Замена C++ headers
От: Aen Sidhe Россия Просто блог
Дата: 16.12.13 21:06
Оценка:
Здравствуйте, johny5, Вы писали:


J>Всем привет.


J>Чем вы обходитесь чтобы быстро скакать по коду, группировать код в блоки подобных ф-ций и т.д... C++ подобные хеадеры отменили, сейчас всё одной большой простынёй.


Средствами навигации в студии.

J>Нашёл похожую тему от 2003 года, предлагалось использовать "Collapse to definitions". Вариант, только неудовлетворительный на 100%. Возможно таки появилось что то новое за 10 лет?


Да, появилось.

J>Я так понимаю использовать интерфейсы — не вариант. Работать через них — каждый раз вызов через виртуальный метод, издержки на ровном месте. Хотя поддерживать впринципе подобно по сложности поддержки C++ headers (ну тут уже Visual Assist выручает).


Где можно посмотреть на ваш код без единого наследования, в котором заметен выигрыш от замены callvirt на call, учитывая, что callvirt шарп ставит везде, кроме как если класс не помечен как sealed?
С уважением, Анатолий Попов.
ICQ: 995-908
Re[2]: Замена C++ headers
От: johny5 Новая Зеландия
Дата: 16.12.13 21:27
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

AS>Где можно посмотреть на ваш код без единого наследования, в котором заметен выигрыш от замены callvirt на call, учитывая, что callvirt шарп ставит везде, кроме как если класс не помечен как sealed?


У меня нет наследований, и всё равно идёт callvirt?

Хорошо, перефразируя скажем — плохой вариант. Вносить издержки в рантайм только для улучшения читабельности... должен быть другой путь.
Re[3]: Замена C++ headers
От: fddima  
Дата: 16.12.13 22:53
Оценка: 4 (1) +1 -1
Здравствуйте, johny5, Вы писали:

J>У меня нет наследований, и всё равно идёт callvirt?

Оптимизацией callvirt занимается JIT. Эта инструкция несёт в себе семантику проверки this на null. Реальных же проверок не остаётся, за не надобностью (т.к. AV по 0 и так прекрастно трансформируется в NullReferenceException). Поэтому компилятор на всё подряд ставит callvirt, где это ему удобно.

J>Хорошо, перефразируя скажем — плохой вариант. Вносить издержки в рантайм только для улучшения читабельности... должен быть другой путь.

Меня в C++ очень парят издержки править что-то в 2-х местах. А ещё всякие макросы надо в хидере вставлять (OVERRIDE например какой-нибудь), которые бы соответствовали всем правилам того или иного кода. А вот смотря на имплементацию какого-нибудь метода, макроса этого не видно. Сигнатура — не совсем полная.

Уже сказали за массу средств навигации самой студии. Ещё можно попытаться доки генерировать. Кому как удобнее.

PS: Ну и врядли добавление ненужного интерфейса как-либо улучшит читаемость.
Re[3]: Замена C++ headers
От: Aen Sidhe Россия Просто блог
Дата: 17.12.13 04:13
Оценка: -2
Здравствуйте, johny5, Вы писали:

J>Здравствуйте, Aen Sidhe, Вы писали:


AS>>Где можно посмотреть на ваш код без единого наследования, в котором заметен выигрыш от замены callvirt на call, учитывая, что callvirt шарп ставит везде, кроме как если класс не помечен как sealed?


J>У меня нет наследований, и всё равно идёт callvirt?


Дизассемблируй и посмотри.

J>Хорошо, перефразируя скажем — плохой вариант. Вносить издержки в рантайм только для улучшения читабельности... должен быть другой путь.


Тогда вам в машинные коды и ассемблер с плюсами.
С уважением, Анатолий Попов.
ICQ: 995-908
Re: Замена C++ headers
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.12.13 09:20
Оценка: +1 -1
Здравствуйте, johny5, Вы писали:
J>Чем вы обходитесь чтобы быстро скакать по коду, группировать код в блоки подобных ф-ций и т.д...
Директива #region и partial classes спасут отца русской демократии.
Это в том случае, если архитектурно оправдано иметь настолько длинный список мемберов, что его хочется попилить на слабозависимые части. Вы же в курсе про Single Responsibility Principle?
J>C++ подобные хеадеры отменили, сейчас всё одной большой простынёй.
Хидеры C++ — позор и ужос, т.к. Don't Repeat Yourself.

J>Я так понимаю использовать интерфейсы — не вариант. Работать через них — каждый раз вызов через виртуальный метод, издержки на ровном месте.

Издержек никаких нет, ваши представления о производительности кода устарели.
J>Хотя поддерживать впринципе подобно по сложности поддержки C++ headers (ну тут уже Visual Assist выручает).
Да, поддержка лишних интерфейсов, как и хидеров С++ — это геморрой на ровном месте, т.е. чистые затраты без каких-либо выигрышей.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.