Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
МастерЗив, поясни пожалуйста, почему ты не согласен с тезисом "В высоконагруженном проекте не используют виртуальные методы и исключения" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 13:53 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Потому что использование виртуальных методов и исключений не определяется требованиями к производительности. Они просто используются или нет, потому что нет другого выхода. Использование виртуальных методов и исключений не так сокрушительно влияет на производительность, как кому-то может показаться. Не понятно также, почему ты вообще смешал эти две техники вместе, они никак не связаны. Почему ты решил, что именно они ухудшают (видимо) производительность, не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:09 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Речь шла об ultra low latency проектах с борьбой за микрос и даже наносекунды Это два фактора (виртуальные методы и исключения) без которых в принципе можно обойтись и которые вносят оверхед в производительность ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:10 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenРечь шла об ultra low latency проектах с борьбой за микрос и даже наносекунды Это два фактора (виртуальные методы и исключения) без которых в принципе можно обойтись и которые вносят оверхед в производительность Что это такое "ultra low latency" - я вот лично не представляю. С++ весь -- это такой фактор, без которого в принципе можно обойтись, и который вносит оверхед в производительность. Пиши на С. Но он -- тоже фактор, без которого можно обойтись, и который вносит... Пиши в кодах процессора. Но это сложно и непереносимо же... НЕ ПИШИ НИЧЕГО! -- идеальный вариант! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:14 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
MasterZivsemen.s.semenРечь шла об ultra low latency проектах с борьбой за микрос и даже наносекунды Это два фактора (виртуальные методы и исключения) без которых в принципе можно обойтись и которые вносят оверхед в производительность Что это такое "ultra low latency" - я вот лично не представляю. С++ весь -- это такой фактор, без которого в принципе можно обойтись, и который вносит оверхед в производительность. Пиши на С. Но он -- тоже фактор, без которого можно обойтись, и который вносит... Пиши в кодах процессора. Но это сложно и непереносимо же... НЕ ПИШИ НИЧЕГО! -- идеальный вариант! Нельзя обойтись без С++ Это возможность писать читаемый объектно ориентированный код Не передергивай смыслы. ultra low latency - это проект я профилировкой времени отклика то микро и нано секунд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:15 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenЭто возможность писать читаемый объектно ориентированный код ЖЕСТЬ Читаемый объектно ориентированный код - без virtual методов и без exception Хочется low latency - берите assembler + Intel VTune и не мучайтесь Вызов виртуального метода vs обычного - лишнее обращение к памяти. С учетом, что (5 лет назад) у последних процессоров Intel было аж > 50 независимых конвееров исполнения таких операций - то требуется доказательство с цифрмами и скриншотами из Intel Vtune, что именно данных конвееров не хватает и из-за этого происходит падение производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:24 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevВызов виртуального метода vs обычного - лишнее обращение к памяти. С учетом, что (5 лет назад) у последних процессоров Intel было аж > 50 независимых конвееров исполнения таких операций - то требуется доказательство с цифрмами и скриншотами из Intel Vtune, что именно данных конвееров не хватает и из-за этого происходит падение производительности. Та даже оверхед от исключений надо доказать )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:26 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenНельзя обойтись без С++ Это возможность писать читаемый объектно ориентированный код Тогда забудь о пикосекундах: за эту возможность ты уже заплатил таким оверхэдом на фоне которого одна ассемблерная инструкция перехода по адресу в памяти погоды не сделает. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:26 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenНельзя обойтись без С++ Это возможность писать читаемый объектно ориентированный код ИМХО С++ без виртуальных методов и исключений это С с классами, т.е. остается один шаг к чистому С - заменить классы на структуры. Читаемость не пострадает. semen.s.semenultra low latency - это проект я профилировкой времени отклика то микро и нано секунд ИМХО таких проектов единицы во всем мире, не стоит на них вообще ориентироваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:27 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Понеслась ... Ох зря я эту темку создал ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:28 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Dima Tзаменить классы на структуры. Читаемость не пострадает Да нет. Серьезно пострадает. Я постоянно мучаюсь когда приходится драйвера для линукса писать. Отсутствие неявного this приводит к огромному количеству синтаксического мусора (доп аргументы, префиксы в именах функций и т.п.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:31 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, +1024 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 14:58 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Я бы еще согласился, что в высоконагруженных проектах на Java и C# есть существенная разница между скоростью вызова обычных и виртуальных методов, но не на C++, так как даже при большом количестве объектов, уменьшение размера экземпляра объекта на размер указателя и непосредственный вызов обычного метода (вместо вызова метода через указатель, взятый из таблицы виртуальных методов, стабильно сидящей в кэш-лайне процессора из-за постоянных обращений к ней через указатели на эту таблицу из упомянутой большой кучи объектов) увеличивает производительность несущественно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:03 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devЯ бы еще согласился, что в высоконагруженных проектах на Java и C# есть существенная разница между скоростью вызова обычных и виртуальных методов Там есть невиртуальные методы ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:08 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyDima Tзаменить классы на структуры. Читаемость не пострадает Да нет. Серьезно пострадает. Я постоянно мучаюсь когда приходится драйвера для линукса писать. Отсутствие неявного this приводит к огромному количеству синтаксического мусора (доп аргументы, префиксы в именах функций и т.п.)Ничто не мешает прикрутить к структуре обычные методы. Будет почти тоже самое, что класс, только без виртуальных методов и указателя на VTBL. Неявный параметр this в таких методах тоже будет, указывая на экземпляр структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:08 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devAnatoly Moskovskyпропущено... Да нет. Серьезно пострадает. Я постоянно мучаюсь когда приходится драйвера для линукса писать. Отсутствие неявного this приводит к огромному количеству синтаксического мусора (доп аргументы, префиксы в именах функций и т.п.)Ничто не мешает прикрутить к структуре обычные методы. Будет почти тоже самое, что класс, только без виртуальных методов и указателя на VTBL. Неявный параметр this в таких методах тоже будет, указывая на экземпляр структуры. Да тока качество кода по сравнению с С++ будет как день и ночь Уход от виртуальных методов это наименьшее из зол ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:11 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenrdb_devЯ бы еще согласился, что в высоконагруженных проектах на Java и C# есть существенная разница между скоростью вызова обычных и виртуальных методовТам есть невиртуальные методы ?Не помню. Последний раз общался с Java лет 10 тому назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:12 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devsemen.s.semenпропущено... Там есть невиртуальные методы ?Не помню. Последний раз общался с Java лет 10 тому назад. Зато я знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:13 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenrdb_devпропущено... Ничто не мешает прикрутить к структуре обычные методы. Будет почти тоже самое, что класс, только без виртуальных методов и указателя на VTBL. Неявный параметр this в таких методах тоже будет, указывая на экземпляр структуры. Да тока качество кода по сравнению с С++ будет как день и ночь Уход от виртуальных методов это наименьшее из золТак это и будет C++. В структурах на Си методы не объявишь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:14 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenЗато я знаюТы придираешься к гипотетической части комментария. P.S. В C# есть виртуальные методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:20 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devsemen.s.semenпропущено... Там есть невиртуальные методы ?Не помню. Последний раз общался с Java лет 10 тому назад. В C# есть обычные и виртуальные методы. По производительности не скажу насколько отличаются. Думаю незначительно, как и в С++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:21 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devВ C# есть виртуальные методы. да кто б спорил а невиртуальные есть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 15:58 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semen.... а невиртуальные есть ? В Java - точно есть. Как минимум static final IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:13 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devЯ бы еще согласился, что в высоконагруженных проектах на Java и C# есть существенная разница между скоростью вызова обычных и виртуальных методовВ Java - нет такой разницы. В си-шарпе, подозреваю - тоже нет. P.S. Вы правда думаете, что разработчики JVM это такие лохи, которые чёт-там для какой-то фигни мутят? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:14 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
В Java есть JIT и скорее всего нужные методы в нужный момент становятся невиртуальными ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:17 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semen.... и скорее всего нужные методы в нужный момент становятся невиртуальными Это как так? Был виртуальный.... раз ...... и уже невиртуальный? Это в соседнем топике слово virtual обсуждается. Давайте не будет заново? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:20 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevsemen.s.semen.... и скорее всего нужные методы в нужный момент становятся невиртуальными Это как так? Был виртуальный.... раз ...... и уже невиртуальный? Это в соседнем топике слово virtual обсуждается. Давайте не будет заново? Да был виртуальный и вдруг бабах и стал невиртуальным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:21 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovP.S. Вы правда думаете, что разработчики JVM это такие лохи, которые чёт-там для какой-то фигни мутят?В Java и C# прикручена куча проверок - на тип, на память... Это тоже дополнительные накладные расходы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:22 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevБыл виртуальный.... раз ...... и уже невиртуальный?... и уже встроенный. Одна из простейших, хотя, разумеется, не всегда возможных оптимизаций JIT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:22 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devBasil A. SidorovP.S. Вы правда думаете, что разработчики JVM это такие лохи, которые чёт-там для какой-то фигни мутят?В Java и C# прикручена куча проверок - на тип, на память... Это тоже дополнительные накладные расходы. JIT все ненужное отключит Там только одно зло - GC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:24 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenда кто б спорил а невиртуальные есть ? C# Language Specification 5.0 , параграф 1.6.6.3 (Static and instance methods). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:35 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semen.... JIT все ненужное отключит ... Раньше в России на царя батюшьку надеялись. Царь батюшка прикажет - и все станет хорошо Теперь на JIT. Похоже царь-батюшька уже не котируется (((( Basil A. SidorovLeonid KudryavtsevБыл виртуальный.... раз ...... и уже невиртуальный?... и уже встроенный. Одна из простейших, хотя, разумеется, не всегда возможных оптимизаций JIT. Что бы virtual сделать обычным, нужно 100% знать тип объекта. Т.ч. тут скорее "не всегда возможных". Скорее возможно только для недавно созданных экземпляров объектов в той же самой области видимости. IMHO P.S. sql.ru преврашается в спорт-лото. Ждем, когда наконец появится тема про Бермудский треугольник ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 16:35 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devкуча проверок - на тип, на память... Это тоже дополнительные накладные расходы.Я вас умоляю - копайтесь в сях и не лезьте туда, где вы не копенганен. Ну вот совсем не копенгаген. P.S. Конечно, лохи, разрабатывающие всякую фигню живут в пещерах, при свечах ... Не ведают они света истины, проливающегося со страниц форума ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 17:04 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devsemen.s.semenТак это и будет C++. В структурах на Си методы не объявишь. Так там выше про С а не С++ )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 18:12 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Про исключения честно сознаюсь что не в курсе откуда тормоза из-за них (просветите кому не лень), а про виртуальные методы уже написали, повторюсь, прочитать адрес перехода и перейти по этому адресу это элементарная операция, почти бесплатная, т.е. на производительность почти не повлияет. Другое дело что вместо вызова невиртуального метода его код инлайнится в место вызова, тут - да, выгоды побольше, не требуется пуш/поп регистров в стэк. Но и это не панацея, если вызываемый код содержит поболее букав чем "return ...". ИМХО нынче главные тормоза из-за многопоточного доступа к общим данным, как следствие синхронизация кэшей ядер проца и т.д., это бОльшие тормоза чем вышеописанные проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 20:18 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Dima TПро исключения честно сознаюсь что не в курсе откуда тормоза из-за них (просветите кому не лень) https://stackoverflow.com/questions/15670169/what-is-difference-between-sjlj-vs-dwarf-vs-seh https://gcc.gnu.org/wiki/WindowsGCCImprovements Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 21:37 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semen..."В высоконагруженном проекте не используют... в высоконагруженном проекте сначала делают правильную логику, на требуемом от задачи и расклада языке. А уж потом профилируется и убираются(читай переписываются) те места которые критичны ко времени выполнения. Если изначально начать с жёстких постулатов, то можно не разглядеть(за лесом постулатов) про бОлее стройную логику или решать не ту задачу, с ослиным упрямством. Например есть рекомендация по развёртыванию циклов. Надеюсь вы не начинаете программировать с копипасты тела цикла указанное кол-во раз??? (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2018, 23:58 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
В гугле на ряде проектов строго требуется неиспользовать исключения и уходить от виртуальных методов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 00:01 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semen...на ряде проектов... ключевые слова... т.е. ОТ ЗАДАЧИ. полностью с этим согласен... сначала задача, всё остальное - вторично... в своё время общался с ребятами по торговым площадкам - они там от объектов синхронизации отказались, при определённой архитектуры взаимодействия. голова дана чтоб думать, а не тупо расшибать лоб по требованию... первична архитектура. оптимизация вторична. (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 00:19 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenВ гугле на ряде проектов строго требуется неиспользовать исключения и уходить от виртуальных методов Если в гугловском Го виртуальные методы и исключения невыносимо тормозят, то... это проблема гугля. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 00:51 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenТам есть невиртуальные методы ?Нету semen.s.semenРечь шла об ultra low latency проектах с борьбой за микрос и даже наносекунды Это два фактора (виртуальные методы и исключения) без которых в принципе можно обойтись и которые вносят оверхед в производительность Давайте разбираться. В ассемблере можно увидеть, что не виртуальный вызов - это просто вызов, а виртуальный вызов - это одно вычисление смещения, и потом вызов. Т.е. отличается на пару инструкций. Если речь про пикосекунды, тогда да, иначе пофиг, как мне думается. С исключениями сложнее, в точке try запоминаются адреса выходов, и в случае исключительной ситуации, просто туда делаются переходы. Ну и там ещё должны деструкторы позваться (ну они в любом случае позовутся), поэтому тоже оверхеда там не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 06:12 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenПонеслась ... Ох зря я эту темку создал ) именно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 08:26 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
rdb_devsemen.s.semenпропущено... Там есть невиртуальные методы ?Не помню. Последний раз общался с Java лет 10 тому назад. Нет, там невиртуальных методов нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 08:30 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Dima TПро исключения честно сознаюсь что не в курсе откуда тормоза из-за них (просветите кому не лень)Я читал у Мейерса. Если вкратце, то в плюсах, объект, созданный на стеке, существует только в области (своей) видимости, а за уничтожение объекта отвечает деструктор, автоматически вызываемый компилятором "на закрывающей скобке". Исключение "разворачивает" стек, "покидая" многие области видимости, поэтому необходим код, организующий вызовы деструкторов. Кроме того, для обеспечения работы с объектом в catch-блоке, объект приходится копировать, что тоже не уменьшает объём кода и время исполнения. Из-за ограничений копирования в этом случае Мейерс рекомендует всегда перехватывать исключение по ссылке на объект. P.S. В Java, где освобождением памяти объектов занимается сборщик мусора, этой проблемы нет. Объект "потерялся" потому, что на него нет ни одной (нециклической) ссылки? Сборщик мусора приберётся. Со временем. Но, по этой же причине, нельзя организовать неявное освобождение ресурсов в деструкторе, которого нет и вся очистка делается в явных finally-блоках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 09:22 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
MasterZivНет, там невиртуальных методов нет.В Java, невиртуальным является любой метод с модификаторами private или final. Просто по определению. P.S. Если вы чего-то не знаете о малознакомой вам среде, это ещё не значит, что "ничего такого" в этой среде нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 09:26 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovневиртуальным является любой метод с модификаторами private или finalСтатические методы тоже невиртуальные. Более того, при вызове переменная.метод(), метод будет выбран по объявленному, а не по фактическому типу переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 10:07 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovИз-за ограничений копирования в этом случае Мейерс рекомендует всегда перехватывать исключение по ссылке на объект. Ну не из-за этого же... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 12:38 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovВ Java, где освобождением памяти объектов занимается сборщик мусора, этой проблемы нет. Объект "потерялся" потому, что на него нет ни одной (нециклической) ссылки? Сборщик мусора приберётся. Со временем. Но, по этой же причине, нельзя организовать неявное освобождение ресурсов в деструкторе, которого нет и вся очистка делается в явных finally-блоках. ЭТОЙ проблемы нет. Зато есть ДРУГИЕ проблемы. Вызов finally-блоков. Необходимость сборки мусора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 12:40 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovMasterZivНет, там невиртуальных методов нет.В Java, невиртуальным является любой метод с модификаторами private или final. Просто по определению. P.S. Если вы чего-то не знаете о малознакомой вам среде, это ещё не значит, что "ничего такого" в этой среде нет. Так я же знаю. Там все методы виртуальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 12:41 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Chapter 6. The Java Virtual Machine Instruction Sets https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html там есть: invokedynamic invokeinterface invokespecial invokestatic invokevirtual Если "все методы виртуальные", зачем столько инструкций? ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 12:48 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
MasterZivТак я же знаю.Иллюзия знания хуже, чем отсутствие знаний.Там все методы виртуальные.Цитирую избранные места JLS6 (выделено мною): 8.4.3.2 static MethodsA method that is declared static is called a class method. A class method is always invoked without reference to a particular object . 8.4.3.3 final MethodsA method can be declared final to prevent subclasses from overriding or hiding it. It is a compile-time error to attempt to override or hide a final method . A private method and all methods declared immediately within a final class (§8.1.1.2) behave as if they are final, since it is impossible to override them. It is a compile-time error for a final method to be declared abstract. At run time, a machine-code generator or optimizer can "inline" the body of a final method, replacing an invocation of the method with the code in its body. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 13:13 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Ой. всё. А функции в языке Fortran ты не хочешь рассмотреть на предмет их виртуальности в данном контексте? Или скажем функции WinAPI... Вот функции WinAPI -- они виртуальные или нет ? А функции (процедуры) FORTRAN? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 13:19 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
MasterZivА функции в языке FortranЯ не лезу туда, где не понимаю. Исходное утверждение было сделано о виртуальности всех функций во вполне конкретном языке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 13:25 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovMasterZivА функции в языке FortranЯ не лезу туда, где не понимаю. Исходное утверждение было сделано о виртуальности всех функций во вполне конкретном языке. Ну методов же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 13:26 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Да-да, к пуговицам претензий нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 13:28 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovВ Java, невиртуальным является любой метод с модификаторами private или final. Просто по определению. Вот, B::test() - final, а значит не виртуальный (просто по определению) Вопрос: что напечатает программа? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 14:49 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. java Test$Main Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 14:58 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovстатические методы А про final что? ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 15:07 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Чтобы уж совсем без вопросов ... Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 15:07 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА про final что? )))В смысле? Модификатор final запрещает сокрытие и переопределение, поэтому в условиях примера будет ошибка компиляции. С модификатором static (без final) - у предка и потомка есть разные, но одноимённые методы с одинаковыми сигнатурами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 15:15 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovМодификатор final запрещает сокрытие и переопределение, поэтому в условиях примера будет ошибка компиляции. Не будет ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 15:37 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyНе будет ошибки. Код: plaintext 1. 2. 3. 4. .java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 16:20 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, А можно все-таки мой пример, а не ваш проверять ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 16:33 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovsemen.s.semenВ гугле на ряде проектов строго требуется неиспользовать исключения и уходить от виртуальных методов Если в гугловском Го виртуальные методы и исключения невыносимо тормозят, то... это проблема гугля. Скорее всего у них там речь не про тормоза, а стоит некий автоматический проверяльщик хода выполнения кода. Они видимо не могут определить куда будет передано управление при вызове виртуальных функций и кидании эксепшенов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 17:46 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА можно все-таки мой пример, а не ваш проверять )))А что, простите, проверять в вашем недооформленном примере: javap -c Test Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 18:41 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
invokevirtual для вызова final метода, который якобы невиртуальный. Чудеса )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 18:55 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyinvokevirtual для вызова final метода, который якобы невиртуальный. Чудеса ))Я неправ в отношении final, но вы иллюстрируете мою ошибку неверным примером. Из байт-кода, который генерирует javac видно, что вызов делается по объявленному типу переменной, а созданный вами финальный метод - вообще не участвует. Это первое. Второе. Что останется от виртуальности в процессе исполнения - неизвестно. Это уже несколько более другой инструментарий, но, насколько я понимаю, ситуации вполне тривиальная для оптимизации и никаких эвристик не требует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 19:06 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovИз байт-кода, который генерирует javac видно, что вызов делается по объявленному типу переменной, а созданный вами финальный метод - вообще не участвует. Как же не участвует? Что выводит программа?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 19:10 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
порезано цензурой ... Спать-гулять надо: и думаю плохо и и какие-то тупые ошибки делаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 19:20 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
готово к употреблению без применения напильника Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 19:25 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov готово к употреблению без применения напильника Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. И что сие доказывает ? Что в java все нестатические методы виртуальные ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 19:45 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenЧто в java все нестатические методы виртуальные ?В байт-коде для финального метода делается invokevirtual "на общих основаниях". Что будет в процессе исполнения - надо смотреть отдельно, но уже сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 19:54 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovsemen.s.semenЧто в java все нестатические методы виртуальные ?В байт-коде для финального метода делается invokevirtual "на общих основаниях". Что будет в процессе исполнения - надо смотреть отдельно, но уже сложнее. В любом случае это будет поведение виртуального метода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 19:57 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenВ любом случае это будет поведение виртуального методаСреда исполнения может и девиртуализировать и встроить вызов финального метода. Это предусмотрено уже в JLS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 20:02 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovsemen.s.semenВ любом случае это будет поведение виртуального методаСреда исполнения может и девиртуализировать и встроить вызов финального метода. Это предусмотрено уже в JLS. Как там среда себя не вела - вызван будет метод ребенка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 20:03 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
semen.s.semenКак там среда себя не вела - вызван будет метод ребенкаКогда ломают копья за (не)виртуальность, то под стягом эффективности распинают накладные расходы виртуального вызова. В ситуации, когда среда исполнения девиртуализировала вызов метода и даже встроила тело метода по месту использования - пофигу, что там в байт-коде. Результат исполнения будет одинаков, а скорость будет достигнута без дополнительных усилий со стороны программиста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2018, 20:12 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovsemen.s.semenКак там среда себя не вела - вызван будет метод ребенкаКогда ломают копья за (не)виртуальность, то под стягом эффективности распинают накладные расходы виртуального вызова. В ситуации, когда среда исполнения девиртуализировала вызов метода и даже встроила тело метода по месту использования - пофигу, что там в байт-коде. Результат исполнения будет одинаков, а скорость будет достигнута без дополнительных усилий со стороны программиста. Вот бы в Яве на девиртуализации метода поэкономить =) :lol: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 00:28 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
то ощущение, когда пришёл попросить научить плюсам, а в результате всех посадил на яву :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 05:28 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyinvokevirtual для вызова final метода, который якобы невиртуальный. Чудеса )) Видите, даже в Java есть виртуальные методы! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 10:51 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorovsemen.s.semenВ любом случае это будет поведение виртуального методаСреда исполнения может и девиртуализировать и встроить вызов финального метода. Это предусмотрено уже в JLS. Может. Она всё может. Даже заинлайнить может. Это сделает метод НЕвиртуальным ? Нет. В Java ВСЕ вызовы нестатических методов делаются на основании динамического типа объекта, с которым он вызывается. Т.е. ВСЕ нестатические методы классов "виртуальные", хотя даже понятия такого у них в языке нет. P.S. пример с final я не понял. Я уверен, что вызовется final метод из B, из наследника, поскольку final запрещает переопределять данный метод ниже по иерархии, но в предке этот метод остаётся таким же "виртуальным", как и был. Вот если бы в A, в предке он был final, то можно было бы ожидать невиртуального вызова (отсутствия диспетчеризации по динамическому типу объекта) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 10:59 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
MasterZivМожет. Она всё может. Даже заинлайнить может. Это сделает метод НЕвиртуальным ? Нет.Если, таки читать спецификацию, то там указано, что "компилятор или среда выполнения". По байт-коду, тем не менее, видно, что компилятор ставит invokevirtual. Причина этого проста. Для среды с динамической компоновкой по требованию невозможно статически доказать, что девиртуализация и встраивание допустимы во всех сценариях исполнения. Таким образом, компилятор просто не выделывается, пытаясь доказать недоказуемое. Представим, что некто, обладающий достаточной степенью квалификации и упорства, сгенерирует корректный байт-код, в котором будет invokespecial с лямбдой или что-нибудь этакое. Метод перестанет быть виртуальным? P.S. Насколько я знаю, для плюсов тоже может быть аналогичная оптимизация. Считать оптимизируемые таким образом методы виртуальными по факту объявления и присутствию в таблице виртуальных методов или невиртуальными по способу фактического вызова? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 12:21 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovP.S. Насколько я знаю, для плюсов тоже может быть аналогичная оптимизация. Считать оптимизируемые таким образом методы виртуальными по факту объявления и присутствию в таблице виртуальных методов или невиртуальными по способу фактического вызова?Если мне не изменяет память, декомпозиция в "плюсах" используется на -O3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 15:18 |
|
||
|
Virtual method + Exceptions in C++
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovПредставим, что некто, обладающий достаточной степенью квалификации и упорства, сгенерирует корректный байт-код, в котором будет invokespecial с лямбдой или что-нибудь этакое. Метод перестанет быть виртуальным? Нет, не перестанет. Но ты уже по-моему вошёл в азарт доказательсва всем обратного, так что не буду спорить с тобой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2018, 17:22 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2017852]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 224ms |

| 0 / 0 |
