powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Virtual method + Exceptions in C++
83 сообщений из 83, показаны все 4 страниц
Virtual method + Exceptions in C++
    #39648704
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МастерЗив, поясни пожалуйста, почему ты не согласен с тезисом

"В высоконагруженном проекте не используют виртуальные методы и исключения"
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648722
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что
использование виртуальных методов и исключений не определяется требованиями к производительности. Они просто используются или нет, потому что нет другого выхода.

Использование виртуальных методов и исключений не так сокрушительно влияет на производительность, как кому-то может показаться.

Не понятно также, почему ты вообще смешал эти две техники вместе, они никак не связаны.
Почему ты решил, что именно они ухудшают (видимо) производительность, не понятно.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648724
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь шла об ultra low latency проектах с борьбой за микрос и даже наносекунды

Это два фактора (виртуальные методы и исключения) без которых в принципе можно обойтись и которые вносят оверхед в производительность
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648728
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenРечь шла об ultra low latency проектах с борьбой за микрос и даже наносекунды

Это два фактора (виртуальные методы и исключения) без которых в принципе можно обойтись и которые вносят оверхед в производительность

Что это такое "ultra low latency" - я вот лично не представляю.

С++ весь -- это такой фактор, без которого в принципе можно обойтись, и который вносит оверхед в производительность.
Пиши на С.
Но он -- тоже фактор, без которого можно обойтись, и который вносит...
Пиши в кодах процессора.
Но это сложно и непереносимо же...
НЕ ПИШИ НИЧЕГО! -- идеальный вариант!
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648731
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivsemen.s.semenРечь шла об ultra low latency проектах с борьбой за микрос и даже наносекунды

Это два фактора (виртуальные методы и исключения) без которых в принципе можно обойтись и которые вносят оверхед в производительность

Что это такое "ultra low latency" - я вот лично не представляю.

С++ весь -- это такой фактор, без которого в принципе можно обойтись, и который вносит оверхед в производительность.
Пиши на С.
Но он -- тоже фактор, без которого можно обойтись, и который вносит...
Пиши в кодах процессора.
Но это сложно и непереносимо же...
НЕ ПИШИ НИЧЕГО! -- идеальный вариант!

Нельзя обойтись без С++

Это возможность писать читаемый объектно ориентированный код

Не передергивай смыслы.

ultra low latency - это проект я профилировкой времени отклика то микро и нано секунд
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648744
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenЭто возможность писать читаемый объектно ориентированный код

ЖЕСТЬ
Читаемый объектно ориентированный код - без virtual методов и без exception

Хочется low latency - берите assembler + Intel VTune и не мучайтесь

Вызов виртуального метода vs обычного - лишнее обращение к памяти. С учетом, что (5 лет назад) у последних процессоров Intel было аж > 50 независимых конвееров исполнения таких операций - то требуется доказательство с цифрмами и скриншотами из Intel Vtune, что именно данных конвееров не хватает и из-за этого происходит падение производительности.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648748
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВызов виртуального метода vs обычного - лишнее обращение к памяти. С учетом, что (5 лет назад) у последних процессоров Intel было аж > 50 независимых конвееров исполнения таких операций - то требуется доказательство с цифрмами и скриншотами из Intel Vtune, что именно данных конвееров не хватает и из-за этого происходит падение производительности.

Та даже оверхед от исключений надо доказать ))
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648750
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenНельзя обойтись без С++

Это возможность писать читаемый объектно ориентированный код

Тогда забудь о пикосекундах: за эту возможность ты уже заплатил таким оверхэдом на фоне
которого одна ассемблерная инструкция перехода по адресу в памяти погоды не сделает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648751
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenНельзя обойтись без С++

Это возможность писать читаемый объектно ориентированный код
ИМХО С++ без виртуальных методов и исключений это С с классами, т.е. остается один шаг к чистому С - заменить классы на структуры. Читаемость не пострадает.

semen.s.semenultra low latency - это проект я профилировкой времени отклика то микро и нано секунд
ИМХО таких проектов единицы во всем мире, не стоит на них вообще ориентироваться.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648753
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понеслась ...


Ох зря я эту темку создал )
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648763
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tзаменить классы на структуры. Читаемость не пострадает
Да нет.
Серьезно пострадает. Я постоянно мучаюсь когда приходится драйвера для линукса писать. Отсутствие неявного this приводит к огромному количеству синтаксического мусора (доп аргументы, префиксы в именах функций и т.п.)
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648789
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

+1024
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648790
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы еще согласился, что в высоконагруженных проектах на Java и C# есть существенная разница между скоростью вызова обычных и виртуальных методов, но не на C++, так как даже при большом количестве объектов, уменьшение размера экземпляра объекта на размер указателя и непосредственный вызов обычного метода (вместо вызова метода через указатель, взятый из таблицы виртуальных методов, стабильно сидящей в кэш-лайне процессора из-за постоянных обращений к ней через указатели на эту таблицу из упомянутой большой кучи объектов) увеличивает производительность несущественно.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648799
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЯ бы еще согласился, что в высоконагруженных проектах на Java и C# есть существенная разница между скоростью вызова обычных и виртуальных методов

Там есть невиртуальные методы ?
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648800
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyDima Tзаменить классы на структуры. Читаемость не пострадает
Да нет.
Серьезно пострадает. Я постоянно мучаюсь когда приходится драйвера для линукса писать. Отсутствие неявного this приводит к огромному количеству синтаксического мусора (доп аргументы, префиксы в именах функций и т.п.)Ничто не мешает прикрутить к структуре обычные методы. Будет почти тоже самое, что класс, только без виртуальных методов и указателя на VTBL. Неявный параметр this в таких методах тоже будет, указывая на экземпляр структуры.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648803
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devAnatoly Moskovskyпропущено...

Да нет.
Серьезно пострадает. Я постоянно мучаюсь когда приходится драйвера для линукса писать. Отсутствие неявного this приводит к огромному количеству синтаксического мусора (доп аргументы, префиксы в именах функций и т.п.)Ничто не мешает прикрутить к структуре обычные методы. Будет почти тоже самое, что класс, только без виртуальных методов и указателя на VTBL. Неявный параметр this в таких методах тоже будет, указывая на экземпляр структуры.

Да тока качество кода по сравнению с С++ будет как день и ночь

Уход от виртуальных методов это наименьшее из зол
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648804
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenrdb_devЯ бы еще согласился, что в высоконагруженных проектах на Java и C# есть существенная разница между скоростью вызова обычных и виртуальных методовТам есть невиртуальные методы ?Не помню. Последний раз общался с Java лет 10 тому назад.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648805
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devsemen.s.semenпропущено...
Там есть невиртуальные методы ?Не помню. Последний раз общался с Java лет 10 тому назад.

Зато я знаю
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648807
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenrdb_devпропущено...
Ничто не мешает прикрутить к структуре обычные методы. Будет почти тоже самое, что класс, только без виртуальных методов и указателя на VTBL. Неявный параметр this в таких методах тоже будет, указывая на экземпляр структуры.

Да тока качество кода по сравнению с С++ будет как день и ночь

Уход от виртуальных методов это наименьшее из золТак это и будет C++. В структурах на Си методы не объявишь.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648815
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenЗато я знаюТы придираешься к гипотетической части комментария.
P.S. В C# есть виртуальные методы.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648816
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devsemen.s.semenпропущено...
Там есть невиртуальные методы ?Не помню. Последний раз общался с Java лет 10 тому назад.
В C# есть обычные и виртуальные методы. По производительности не скажу насколько отличаются. Думаю незначительно, как и в С++
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648845
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devВ C# есть виртуальные методы.

да кто б спорил

а невиртуальные есть ?
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648858
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen....
а невиртуальные есть ?
В Java - точно есть.
Как минимум static final

IMHO
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648859
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЯ бы еще согласился, что в высоконагруженных проектах на Java и C# есть существенная разница между скоростью вызова обычных и виртуальных методовВ Java - нет такой разницы.
В си-шарпе, подозреваю - тоже нет.

P.S.
Вы правда думаете, что разработчики JVM это такие лохи, которые чёт-там для какой-то фигни мутят?
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648860
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Java есть JIT

и скорее всего нужные методы в нужный момент становятся невиртуальными
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648863
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen....
и скорее всего нужные методы в нужный момент становятся невиртуальными
Это как так?
Был виртуальный.... раз ...... и уже невиртуальный?

Это в соседнем топике слово virtual обсуждается. Давайте не будет заново?
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648864
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevsemen.s.semen....
и скорее всего нужные методы в нужный момент становятся невиртуальными
Это как так?
Был виртуальный.... раз ...... и уже невиртуальный?

Это в соседнем топике слово virtual обсуждается. Давайте не будет заново?

Да был виртуальный и вдруг бабах и стал невиртуальным
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648866
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovP.S.
Вы правда думаете, что разработчики JVM это такие лохи, которые чёт-там для какой-то фигни мутят?В Java и C# прикручена куча проверок - на тип, на память... Это тоже дополнительные накладные расходы.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648867
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevБыл виртуальный.... раз ...... и уже невиртуальный?... и уже встроенный.
Одна из простейших, хотя, разумеется, не всегда возможных оптимизаций JIT.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648869
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devBasil A. SidorovP.S.
Вы правда думаете, что разработчики JVM это такие лохи, которые чёт-там для какой-то фигни мутят?В Java и C# прикручена куча проверок - на тип, на память... Это тоже дополнительные накладные расходы.

JIT все ненужное отключит

Там только одно зло - GC
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648877
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenда кто б спорил

а невиртуальные есть ? C# Language Specification 5.0 , параграф 1.6.6.3 (Static and instance methods).
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648878
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen....
JIT все ненужное отключит
...

Раньше в России на царя батюшьку надеялись. Царь батюшка прикажет - и все станет хорошо
Теперь на JIT. Похоже царь-батюшька уже не котируется ((((

Basil A. SidorovLeonid KudryavtsevБыл виртуальный.... раз ...... и уже невиртуальный?... и уже встроенный.
Одна из простейших, хотя, разумеется, не всегда возможных оптимизаций JIT.
Что бы virtual сделать обычным, нужно 100% знать тип объекта. Т.ч. тут скорее "не всегда возможных". Скорее возможно только для недавно созданных экземпляров объектов в той же самой области видимости. IMHO

P.S.
sql.ru преврашается в спорт-лото. Ждем, когда наконец появится тема про Бермудский треугольник
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648895
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devкуча проверок - на тип, на память... Это тоже дополнительные накладные расходы.Я вас умоляю - копайтесь в сях и не лезьте туда, где вы не копенганен. Ну вот совсем не копенгаген.

P.S.
Конечно, лохи, разрабатывающие всякую фигню живут в пещерах, при свечах ...
Не ведают они света истины, проливающегося со страниц форума ...
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648924
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devsemen.s.semenТак это и будет C++. В структурах на Си методы не объявишь.
Так там выше про С а не С++ ))
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39648997
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про исключения честно сознаюсь что не в курсе откуда тормоза из-за них (просветите кому не лень), а про виртуальные методы уже написали, повторюсь, прочитать адрес перехода и перейти по этому адресу это элементарная операция, почти бесплатная, т.е. на производительность почти не повлияет.

Другое дело что вместо вызова невиртуального метода его код инлайнится в место вызова, тут - да, выгоды побольше, не требуется пуш/поп регистров в стэк. Но и это не панацея, если вызываемый код содержит поболее букав чем "return ...".

ИМХО нынче главные тормоза из-за многопоточного доступа к общим данным, как следствие синхронизация кэшей ядер проца и т.д., это бОльшие тормоза чем вышеописанные проблемы.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649028
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649067
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen..."В высоконагруженном проекте не используют...

в высоконагруженном проекте сначала делают правильную логику, на требуемом от задачи и расклада языке. А уж потом профилируется и убираются(читай переписываются) те места которые критичны ко времени выполнения.

Если изначально начать с жёстких постулатов, то можно не разглядеть(за лесом постулатов) про бОлее стройную логику или решать не ту задачу, с ослиным упрямством.

Например есть рекомендация по развёртыванию циклов. Надеюсь вы не начинаете программировать с копипасты тела цикла указанное кол-во раз???


(круглый)
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649069
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В гугле на ряде проектов строго требуется неиспользовать исключения и уходить от виртуальных методов
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649075
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semen...на ряде проектов...

ключевые слова...
т.е. ОТ ЗАДАЧИ. полностью с этим согласен... сначала задача, всё остальное - вторично...

в своё время общался с ребятами по торговым площадкам - они там от объектов синхронизации отказались, при определённой архитектуры взаимодействия.

голова дана чтоб думать, а не тупо расшибать лоб по требованию...
первична архитектура. оптимизация вторична.

(круглый)
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649081
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenВ гугле на ряде проектов строго требуется неиспользовать исключения и уходить от
виртуальных методов

Если в гугловском Го виртуальные методы и исключения невыносимо тормозят, то... это
проблема гугля.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649104
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenТам есть невиртуальные методы ?Нету

semen.s.semenРечь шла об ultra low latency проектах с борьбой за микрос и даже наносекунды

Это два фактора (виртуальные методы и исключения) без которых в принципе можно обойтись и которые вносят оверхед в производительность

Давайте разбираться. В ассемблере можно увидеть, что не виртуальный вызов - это просто вызов, а виртуальный вызов - это одно вычисление смещения, и потом вызов. Т.е. отличается на пару инструкций. Если речь про пикосекунды, тогда да, иначе пофиг, как мне думается.

С исключениями сложнее, в точке try запоминаются адреса выходов, и в случае исключительной ситуации, просто туда делаются переходы. Ну и там ещё должны деструкторы позваться (ну они в любом случае позовутся), поэтому тоже оверхеда там не вижу.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649128
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenПонеслась ...


Ох зря я эту темку создал )

именно
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649131
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devsemen.s.semenпропущено...
Там есть невиртуальные методы ?Не помню. Последний раз общался с Java лет 10 тому назад.

Нет, там невиртуальных методов нет.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649156
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПро исключения честно сознаюсь что не в курсе откуда тормоза из-за них (просветите кому не лень)Я читал у Мейерса.
Если вкратце, то в плюсах, объект, созданный на стеке, существует только в области (своей) видимости, а за уничтожение объекта отвечает деструктор, автоматически вызываемый компилятором "на закрывающей скобке".
Исключение "разворачивает" стек, "покидая" многие области видимости, поэтому необходим код, организующий вызовы деструкторов.
Кроме того, для обеспечения работы с объектом в catch-блоке, объект приходится копировать, что тоже не уменьшает объём кода и время исполнения.
Из-за ограничений копирования в этом случае Мейерс рекомендует всегда перехватывать исключение по ссылке на объект.

P.S.
В Java, где освобождением памяти объектов занимается сборщик мусора, этой проблемы нет.
Объект "потерялся" потому, что на него нет ни одной (нециклической) ссылки? Сборщик мусора приберётся. Со временем.
Но, по этой же причине, нельзя организовать неявное освобождение ресурсов в деструкторе, которого нет и вся очистка делается в явных finally-блоках.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649160
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНет, там невиртуальных методов нет.В Java, невиртуальным является любой метод с модификаторами private или final. Просто по определению.

P.S.
Если вы чего-то не знаете о малознакомой вам среде, это ещё не значит, что "ничего такого" в этой среде нет.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649199
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovневиртуальным является любой метод с модификаторами private или finalСтатические методы тоже невиртуальные.
Более того, при вызове переменная.метод(), метод будет выбран по объявленному, а не по фактическому типу переменной.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649342
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovИз-за ограничений копирования в этом случае Мейерс рекомендует всегда перехватывать исключение по ссылке на объект.


Ну не из-за этого же...
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649344
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovВ Java, где освобождением памяти объектов занимается сборщик мусора, этой проблемы нет.
Объект "потерялся" потому, что на него нет ни одной (нециклической) ссылки? Сборщик мусора приберётся. Со временем.
Но, по этой же причине, нельзя организовать неявное освобождение ресурсов в деструкторе, которого нет и вся очистка делается в явных finally-блоках.

ЭТОЙ проблемы нет. Зато есть ДРУГИЕ проблемы.
Вызов finally-блоков.
Необходимость сборки мусора.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649346
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovMasterZivНет, там невиртуальных методов нет.В Java, невиртуальным является любой метод с модификаторами private или final. Просто по определению.

P.S.
Если вы чего-то не знаете о малознакомой вам среде, это ещё не значит, что "ничего такого" в этой среде нет.

Так я же знаю.
Там все методы виртуальные.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649355
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

Если "все методы виртуальные", зачем столько инструкций? )))
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649376
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
Вроде, должно быть очевидным, что метод, который или вызывается без ссылки на объект или который нельзя перекрыть или переопределить в классе-наследнике, не может быть виртуальным.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649380
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

Ой. всё.

А функции в языке Fortran ты не хочешь рассмотреть на предмет их виртуальности в данном контексте?
Или скажем функции WinAPI...
Вот функции WinAPI -- они виртуальные или нет ?

А функции (процедуры) FORTRAN?
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649385
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА функции в языке FortranЯ не лезу туда, где не понимаю.
Исходное утверждение было сделано о виртуальности всех функций во вполне конкретном языке.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649387
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovMasterZivА функции в языке FortranЯ не лезу туда, где не понимаю.
Исходное утверждение было сделано о виртуальности всех функций во вполне конкретном языке.

Ну методов же.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649391
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да-да, к пуговицам претензий нет.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649457
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
public class A {
    void test()
    {
        System.out.println("A");
    }
}

public class B extends A {
    final void test()
    {
        System.out.println("B");
    }
}

A a = new B();
a.test();
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649467
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class Test{
  public static class Main
  {
    public static void main(String[] args)
    {
    	A v;
    	v = new B();  v.msg();
    	v = new A();  v.msg();
    }
  }
  
  static class A
  {
  	static void msg() { System.out.println("A class");}
  }
  
  static class B extends A
  {
  	static void msg() { System.out.println("B class"); }
  } 
}

java Test$Main
Код: plaintext
1.
 A class
 A class
Отсюда мораль: не вызывайте статические методы через переменные - (рано или поздно) запутаетесь в типах.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649475
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovстатические методы
А про final что? )))
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649477
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы уж совсем без вопросов ...
Код: 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.
class Test
{
  public static class Main
  {
    public static void main(String[] args)
    {
    	A v;
    	v = new B();  v.msg();
    	v = new A();  v.msg();
    	v = null;
    	System.out.println("--");
    	A.msg();
    	B.msg();
    }
  }
  
  static class A
  {
  	static void msg() { System.out.println("A class");}
  }
  
  static class B extends A
  {
  	static void msg() { System.out.println("B class"); }
  } 
}

Код: plaintext
1.
2.
3.
4.
5.
 java -cp bin Test$Main
 A class
 A class
 --
 A class
 B class
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649483
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА про final что? )))В смысле?
Модификатор final запрещает сокрытие и переопределение, поэтому в условиях примера будет ошибка компиляции.
С модификатором static (без final) - у предка и потомка есть разные, но одноимённые методы с одинаковыми сигнатурами.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649497
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovМодификатор final запрещает сокрытие и переопределение, поэтому в условиях примера будет ошибка компиляции.
Не будет ошибки.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649508
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНе будет ошибки.
Код: plaintext
1.
2.
3.
4.
src\.java:19: error: msg() in B cannot override msg() in A
        final static void msg() { System.out.println("B class"); }
                          ^
  overridden method is static,final
1 error
.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class Test
{
  public static class Main
  {
    public static void main(String[] args)
    {
    	A.msg();
    	B.msg();
    }
  }
  
  static class A
  {
  	final static void msg() { System.out.println("A class");}
  }
  
  static class B extends A
  {
  	final static void msg() { System.out.println("B class"); }
  } 
}

...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649513
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov,

А можно все-таки мой пример, а не ваш проверять )))
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649536
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovsemen.s.semenВ гугле на ряде проектов строго требуется неиспользовать исключения и уходить от
виртуальных методов

Если в гугловском Го виртуальные методы и исключения невыносимо тормозят, то... это
проблема гугля.

Скорее всего у них там речь не про тормоза, а стоит некий автоматический проверяльщик хода выполнения кода. Они видимо не могут определить куда будет передано управление при вызове виртуальных функций и кидании эксепшенов.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649554
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА можно все-таки мой пример, а не ваш проверять )))А что, простите, проверять в вашем недооформленном примере:
javap -c Test
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public class Test {
   public Test();
     Code:
        0: aload_0
        1: invokespecial #1                  // Method java/lang/Object."<init>":()V
        4: return

   public static void main(java.lang.String[]) throws java.io.IOException;
     Code:
        0: new           #2                  // class B
        3: dup
        4: invokespecial #3                  // Method B."<init>":()V
        7: astore_1
        8: aload_1
       9: invokevirtual #4                  // Method A.test:()V
       12: return
}
?
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649559
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invokevirtual для вызова final метода, который якобы невиртуальный.
Чудеса ))
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649560
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyinvokevirtual для вызова final метода, который якобы невиртуальный.
Чудеса ))Я неправ в отношении final, но вы иллюстрируете мою ошибку неверным примером.
Из байт-кода, который генерирует javac видно, что вызов делается по объявленному типу переменной, а созданный вами финальный метод - вообще не участвует.
Это первое.

Второе.
Что останется от виртуальности в процессе исполнения - неизвестно.
Это уже несколько более другой инструментарий, но, насколько я понимаю, ситуации вполне тривиальная для оптимизации и никаких эвристик не требует.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649561
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovИз байт-кода, который генерирует javac видно, что вызов делается по объявленному типу переменной, а созданный вами финальный метод - вообще не участвует.
Как же не участвует? Что выводит программа?))
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649565
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
порезано цензурой ...
Спать-гулять надо: и думаю плохо и и какие-то тупые ошибки делаю.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649567
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
готово к употреблению без применения напильника
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
// Test.java
public class Test {
  public static void main(String[] args) throws java.io.IOException
  {
    A v = new B();
    v.msg();
  }
}

class A
{
  void msg() { System.out.println("A class"); }
}

class B extends A
{
  @Override
  final void msg() { System.out.println("B class"); }
}

...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649571
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
готово к употреблению без применения напильника
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
// Test.java
public class Test {
  public static void main(String[] args) throws java.io.IOException
  {
    A v = new B();
    v.msg();
  }
}

class A
{
  void msg() { System.out.println("A class"); }
}

class B extends A
{
  @Override
  final void msg() { System.out.println("B class"); }
}



И что сие доказывает ?

Что в java все нестатические методы виртуальные ?
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649573
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenЧто в java все нестатические методы виртуальные ?В байт-коде для финального метода делается invokevirtual "на общих основаниях".
Что будет в процессе исполнения - надо смотреть отдельно, но уже сложнее.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649575
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovsemen.s.semenЧто в java все нестатические методы виртуальные ?В байт-коде для финального метода делается invokevirtual "на общих основаниях".
Что будет в процессе исполнения - надо смотреть отдельно, но уже сложнее.

В любом случае это будет поведение виртуального метода
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649577
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenВ любом случае это будет поведение виртуального методаСреда исполнения может и девиртуализировать и встроить вызов финального метода.
Это предусмотрено уже в JLS.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649578
semen.s.semen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovsemen.s.semenВ любом случае это будет поведение виртуального методаСреда исполнения может и девиртуализировать и встроить вызов финального метода.
Это предусмотрено уже в JLS.

Как там среда себя не вела - вызван будет метод ребенка
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649580
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
semen.s.semenКак там среда себя не вела - вызван будет метод ребенкаКогда ломают копья за (не)виртуальность, то под стягом эффективности распинают накладные расходы виртуального вызова.
В ситуации, когда среда исполнения девиртуализировала вызов метода и даже встроила тело метода по месту использования - пофигу, что там в байт-коде.
Результат исполнения будет одинаков, а скорость будет достигнута без дополнительных усилий со стороны программиста.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649622
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovsemen.s.semenКак там среда себя не вела - вызван будет метод ребенкаКогда ломают копья за (не)виртуальность, то под стягом эффективности распинают накладные расходы виртуального вызова.
В ситуации, когда среда исполнения девиртуализировала вызов метода и даже встроила тело метода по месту использования - пофигу, что там в байт-коде.
Результат исполнения будет одинаков, а скорость будет достигнута без дополнительных усилий со стороны программиста.
Вот бы в Яве на девиртуализации метода поэкономить =) :lol:
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649651
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то ощущение, когда пришёл попросить научить плюсам, а в результате всех посадил на яву :)
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649746
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovskyinvokevirtual для вызова final метода, который якобы невиртуальный.
Чудеса ))

Видите, даже в Java есть виртуальные методы!
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649751
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovsemen.s.semenВ любом случае это будет поведение виртуального методаСреда исполнения может и девиртуализировать и встроить вызов финального метода.
Это предусмотрено уже в JLS.

Может. Она всё может. Даже заинлайнить может.
Это сделает метод НЕвиртуальным ? Нет.
В Java ВСЕ вызовы нестатических методов делаются на основании динамического
типа объекта, с которым он вызывается.
Т.е. ВСЕ нестатические методы классов "виртуальные", хотя даже понятия такого у них в языке нет.

P.S. пример с final я не понял. Я уверен, что вызовется final метод из B, из наследника, поскольку final запрещает переопределять данный метод ниже по иерархии, но в предке этот метод остаётся таким же "виртуальным", как и был.
Вот если бы в A, в предке он был final, то можно было бы ожидать невиртуального вызова (отсутствия диспетчеризации по динамическому типу объекта)
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649819
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivМожет. Она всё может. Даже заинлайнить может.
Это сделает метод НЕвиртуальным ? Нет.Если, таки читать спецификацию, то там указано, что "компилятор или среда выполнения".
По байт-коду, тем не менее, видно, что компилятор ставит invokevirtual. Причина этого проста.
Для среды с динамической компоновкой по требованию невозможно статически доказать, что девиртуализация и встраивание допустимы во всех сценариях исполнения.
Таким образом, компилятор просто не выделывается, пытаясь доказать недоказуемое.

Представим, что некто, обладающий достаточной степенью квалификации и упорства, сгенерирует корректный байт-код, в котором будет invokespecial с лямбдой или что-нибудь этакое.
Метод перестанет быть виртуальным?

P.S. Насколько я знаю, для плюсов тоже может быть аналогичная оптимизация.
Считать оптимизируемые таким образом методы виртуальными по факту объявления и присутствию в таблице виртуальных методов или невиртуальными по способу фактического вызова?
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39649977
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovP.S. Насколько я знаю, для плюсов тоже может быть аналогичная оптимизация.
Считать оптимизируемые таким образом методы виртуальными по факту объявления и присутствию в таблице виртуальных методов или невиртуальными по способу фактического вызова?Если мне не изменяет память, декомпозиция в "плюсах" используется на -O3.
...
Рейтинг: 0 / 0
Virtual method + Exceptions in C++
    #39650052
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovПредставим, что некто, обладающий достаточной степенью квалификации и упорства, сгенерирует корректный байт-код, в котором будет invokespecial с лямбдой или что-нибудь этакое.
Метод перестанет быть виртуальным?


Нет, не перестанет.
Но ты уже по-моему вошёл в азарт доказательсва всем обратного, так что не буду спорить с тобой.
...
Рейтинг: 0 / 0
83 сообщений из 83, показаны все 4 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Virtual method + Exceptions in C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]