powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Виртуальные методы
23 сообщений из 48, страница 2 из 2
Виртуальные методы
    #39846994
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
Не язык а языкИ.
И они индивидуальны.
Это только MS может проектировать один всеобщий универсальный язык.
Ну, как сильверлайт типо.
Царствие ему небесное.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847001
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,
Сильверлайт - это не язык.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847025
betelgeizex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВPetroNotC Sharpпропущено...
+1
А как бы вы сделали, если проектировали язык с нуля?

А что тут проектировать? В Scala давно всё придумали до нас:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class A {
  def M1(): Unit = ???

  def M2(): Unit = {
    M1()
  }
}

class B extends A {
  def M1(): Unit = ??? // Error:(12, 7) `override` modifier required to override concrete member
}



Все методы виртуальные по умолчанию, но модификатор 'override' обязателен, без него ошибка.
Модификатора 'new' нет, ибо нефиг :)
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847031
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВPetroNotC Sharp,
Сильверлайт - это не язык.я про Помыслы такие, а не про язык. Сами пОмыслы греховные у тебя)
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847051
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
betelgeizex

А что тут проектировать? В Scala давно всё придумали до нас:



Все методы виртуальные по умолчанию, но модификатор 'override' обязателен, без него ошибка.
Модификатора 'new' нет, ибо нефиг :)
Тоже плохо. Вызов виртуального метода дороже, чем не виртуального. А производительность и так проседает....
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847055
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВPetroNotC Sharpпропущено...
+1
А как бы вы сделали, если проектировали язык с нуля?

Kotlin и С++ (если не забыл) обязательно требуют писать override у методов, которые перекрывают базовые.
В результате обновление библиотеки сломало бы компиляцию и потребовало бы переименовать метод.
По-моему правильный подход.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847057
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВТоже плохо. Вызов виртуального метода дороже, чем не виртуального. А производительность и так проседает....

JVM давно уже неперекрытые методы не просто делает не-виртуальными, а даже инлайнит.
Предложено вроде в eiffel - там линковщик решал, что виртуальное, а что нет.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847063
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВА производительность и так проседает....где?
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847065
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВТоже плохо. Вызов виртуального метода дороже, чем не виртуального. А производительность и так проседает....
Не факт

Три года назад, когда последний раз запускал VTune, у Intel процессора было > 50 независимых конвееров обращения к памяти (вычисление исполнительного адреса)

Оно, конечно, считать адрес из инструкции вроде теоретически проще, но не факт, что считать из таблицы виртуальных методов практически медленнее.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847067
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Производительность всегда относительно.
То есть где виртуальный стал узким горлышком?
Полиморфизм он вообще не для скорости. Глупо его так оценивать.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847103
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpПроизводительность всегда относительно.
В данном случае сравнение стоимости виртуального и не виртуального вызова.

PetroNotC SharpТо есть где виртуальный стал узким горлышком?
Смотря с чем сравнивать.

PetroNotC SharpПолиморфизм он вообще не для скорости. Глупо его так оценивать.
Речь о снижении стоимости поддержки полиморфного поведения.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847108
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
Эти слова выше просто бла бла бла ни о чем.
Удачи!
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847118
betelgeizex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЕвгенийВbetelgeizex
А что тут проектировать? В Scala давно всё придумали до нас:



Все методы виртуальные по умолчанию, но модификатор 'override' обязателен, без него ошибка.
Модификатора 'new' нет, ибо нефиг :)
Тоже плохо. Вызов виртуального метода дороже, чем не виртуального. А производительность и так проседает....

Если для вашего приложения действительно критична скорость вызова таблицы методов, то вы просто обязаны использовать профилировщик.
Профилировщик вам покажет, какие из методов требуют оптимизации. И вы этим методам проставите модификатор final (в Scala он тоже есть), это сделает методы невиртуальными и может даже заинлайнит.

Вы придумываете искусственные проблемы, мне кажется :)
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847119
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Just-In-time Java компилятор/оптимизатор умудряется даже виртуальные метода (без всякого final) инлайнить
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847236
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevJust-In-time Java компилятор/оптимизатор умудряется даже виртуальные метода (без всякого final) инлайнить
Тут бабка надвое сказала, дай ссылку на исследование? Какие нашел, там простейшие случаи.
У JIT сильно меньше возможностей, в том же времени, по сравнении например с оптимизирующим компилятором С++
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847251
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВLeonid KudryavtsevJust-In-time Java компилятор/оптимизатор умудряется даже виртуальные метода (без всякого final) инлайнить

У JIT сильно меньше возможностей, в том же времени, по сравнении например с оптимизирующим компилятором С++

Это с какого перепугу? Вот тут ссылку было бы как раз неплохо.
у JIT есть преимущество, потому что ему на вход поступает не только статическая(на момент компиляции) но и динамическая(как часто какой метод или цикл выполняется), так что ему все карты в руки заоптимизировать по самое небалуй. Те же полиморфик методы по дефолту JIT делает мономорфик. Если два наследника - то bimorph, а вот если уже JIT найдет третьего - тогда он деоптимизирует код и вставляет таблицу виртуальных методов
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847263
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,
для сферического коня в вакууме можно идти в шарп.
Все твои теоретические вопросы разбиваются о практику.
Как например неудобство совпадения имен метода - ерунда.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847267
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpКак например неудобство совпадения имен метода - ерунда.

Это далеко не ерунда. Мы в RichFaces в свое время наследовались от JSF абстрактных компонент, и добавляли свои методы. И вот пришел JSF 2 и поломал нам много чего, так что проблема не надумана. И это все следствие ублюдочного дизайна наследования и ООП в целом, когда твой код может аффектнуть изменение в чужом коде.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847288
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никублюдочного дизайна наследования и ООПты за ФП топишь?
Мы вроде выяснили что ООП нипричем.
В дельфях есть слова в коде
f() virtual, override
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847311
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВLeonid KudryavtsevJust-In-time Java компилятор/оптимизатор умудряется даже виртуальные метода (без всякого final) инлайнить
Тут бабка надвое сказала, дай ссылку на исследование? Какие нашел, там простейшие случаи.

Это жизнь- девиртуализируются методы, которые именют не более двух ИСПОЛЬЗУЮЩИХСЯ реализаций. Например в типичном коде при вызове методов List будет учитываться только методы ArrayList
Т.е. даже если инлайна нет то вместо виртуального вызова ставится нечто вроде

if (o.type == TYPE1) staticCall TYPE1.method(o)
else if (o.type == TYPE2) staticCall TYPE2.method(o)
else убрать_всё_нафиг_и_оптимизировать_заново

ЕвгенийВУ JIT сильно меньше возможностей, в том же времени, по сравнении например с оптимизирующим компилятором С++

На разных алгоритмах разные штуки выигрывают.
И дело даже не в использовании информации о реально встречающихся типах - JIT может использовать все возможности данного процессора и информацию о времени выполнения команд именно на нём (а не на абстрактном i86x64).
И победить JIT можно либо компиляцией под конкретный процессор, а лучше ручными ассемблерными вставками. Но это стоит очень дорого.
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847408
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevJust-In-time Java компилятор/оптимизатор умудряется даже виртуальные метода (без всякого final) инлайнить
Я помню какой-то синтетический бенчмарк который доказывал что на виртуальных вызовах Java эффективнее С++.
Причем Java там была бородатых версий. Кажется 1.5...
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847418
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin....
И победить JIT можно либо компиляцией под конкретный процессор, а лучше ручными ассемблерными вставками. Но это стоит очень дорого.
Победить JIT в общем-то элементарно. Но обычно с этим никто не заморачивается.

Профелировал чтение тестовых строк из потока (readline, был когда-то вопрос на данном подфоруме) - предсказание переходов JIT умудрялся прос....ть полностью. Хотя, теоретически, при наличие хоть какой-то статистики времени выполнения, оптимизация предсказания переходов у JIT должна быть практически идеальной.

Полно ситуаций, когда легким движением руки, легко оптимизирующийся код становится не оптимизирующимся. Код работы со стримами. Насколько помню, есть два варианта вызова forEach() один вызывает унивирсальный итератор, второй заточен под типы. В результате банальная итерация по ArrayList в одном случае работает нормально (т.к. оптимизатор выключает проверку выхода за границы массива), в другом случае - жутко тормозит. Цикл по ByteBuffer в большистве случаев аналогично, можно в цикле получить жуткие тормоза, т.к. на каждом обращении идет проверка выхода за пределы массива (практическая задача перевести строки из одной кодировки в другую, для String - оптимизатор оптимизирует, для "универсальных" вызовов /ByteBuffer в Apache HTTP Components/ нифига).

Можно поискать в И-нете замеры скорости и код для быстрого преобразования String в другую кодировку.... жуть... а вроде элементарная и часто требующаяся задача
...
Рейтинг: 0 / 0
Виртуальные методы
    #39847427
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, оптимизация кода со Streams - хорошая тема пятничного топика.
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Виртуальные методы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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