Форум
Компьютерные священные войны
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, netch80, Вы писали: N>Здравствуйте, alex_public, Вы писали: _>>>>Не следует путать final (кстати тоже есть в C++, как отдельная сущность) и не виртуальные функции. В отличие от последних final полностью блокирует одно из ключевых преимуществ ООП подхода - расширяемость и кастомизируемость через наследование. N>>>Я не путаю. Задача исключить переопределение в потомке им обеспечивается, а подобные философии тут не интересны. N>>>Тем более что одна из задач final - исключить как раз это "ключевое преимущество" в конкретном месте. _>>С этой задачей то final конечно без проблем справляется. Только вот ты похоже забыл, что в данной дискуссии обсуждаются оптимизации и соответственно задача совсем другая стоит. А именно: обеспечить наиболее эффективный вызов функций, причём желательно не вводя при этом никаких ограничений на код. И вот как раз со второй частью у final проблемы. ) N>Ну так и у C++ в этом проблемы. Не написал virtual - оп-па, ввёл ограничение. Причём, сюрприз, сам того не зная! (пока не выработал привычку замечать это на каждом новом добавлении) N>И вся разница - что одна молча даёт, а другая дразнится. © _>>>> Так что если в своём коде ты вполне можешь позволить себе применять данную возможность, то у скажем авторов библиотек ситуация намного печальнее. N>>>Шарповцы в большом количестве стандартных классов размахивают своим sealed направо и налево. Расскажи им про эту печаль. _>>Не знаю где они там и чем размахивают, но в любом случае сильно сомневаюсь, что sealed там активно применяется именно для оптимизаций. Скорее для архитектурных целей, так же как и final в C++. N>А тут фиг отделиш одно от другого. "Архитектурные цели" в смысле не допустить изменения базового класса (и получить какие-то гарантии от этого, например, возможностью JIT что-то инлайнить не занимаясь поиском по потомкам) это то же самое, что в твоём случае возможность сэкономить на вызове по VMT. Ну да, есть особые случаи - когда переопределение может сломать рантайм в целом - но таких исключений немного, насколько я видел. N>>>В C# не щупал, но если они не воспользуются этим при немедленном стартовом JIT, я удивлюсь. Хотя что-то навскидку помню - показывали выход IL, где он вызывал явно, а где через VMT. Так что тоже должно работать. _>>В этой темке народ тестировал - по их словам не работает такая оптимизация в C#. N>Хм, попадётся снова - заброшу сюда пример. Может, ещё от конкретного рантайма зависит.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …