Re[43]: benchmark
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 06.02.17 05:59
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

_>>>Ты же наверняка знаешь, что во всех этих языках все методы являются виртуальными функциями (говоря языком C++).

N>>Вы тут ну очень много написали, но в следующих ста сообщениях я не увидел возражений, поэтому комментирую. Как это получилось, что ты не в курсе, что в Java и C# просто перевёрнуто умолчание объявления метода виртуальным? Там, где в C++ говорится virtual, в Java молчат, а где в C++ не говорится virtual, в Java говорится final (а в C# — sealed), последствия для виртуальности те же.

EP>Вообще-то это другое, с другими свойствами. final/sealed не делает метод не виртуальным, точнее виртуальный метод вполне может быть final

EP>И кстати final есть и в C++, что я уже выше упоминал.

Формально и в C++ ничто не мешает сделать все методы виртуальными, насколько я помню. Но не делают
Я про то, что если метод не существовал у предков и сразу был объявлен final, то этого достаточно, чтобы его не виртуализовать, и главное, что это общеизвестно и активно используется. И если собеседник этого не знает, но говорит, что "все методы являются виртуальными функциями", то он просто не готов для дискуссии.
А формальности оставьте для language lawyers.

N>>Это чуть упрощая (есть проблемы одноимённых методов и т.п.), но для данных целей сгодится. И видя final — компилятор (пусть JIT) точно так же имеет право рисовать обращение напрямую к нужному методу или инлайнить его.


EP>Вот только в примере
Автор: pilgrim_
Дата: 14.01.17
который разбирался в топике, final в базе A на метод f не поставишь


Не поставишь. Но компилятор уже знает, что тип зависит от , и вполне может внутри себя сделать (псевдокод)

A a;
if (x) { a = new B(); a.B::f(); }
else { a = new C(); a.C::f(); }


и, по тому, что я слышал, так часто и делает.
И разбирался не только этот пример.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.