Комментарии 12
Кек, сделали язык где на рантайме проверяется то чего никогда не должно быть и получили неэффективность в заведомо неэффективной вещи, чтож...
Который всё ещё при нормальных подходах упирается в performance syscall'ов, кроме экзотических случаев, которые обычно чинятся банальной профилировкой за время, стремящееся к нулю.
Кроме того, обращаю внимание, что не сработало именно bounds check elimination - отмена проверок, которые никогда не должны случаться, и обычно эти проверки успешно убираются.
Это всего лишь пара ошибок, которые уже исправили. За всё нужно платить, С2 может выдавать код, который эффективнее написанного на Си, и тот факт, что в одном-двух случаях он не справился не повод посыпать голову пеплом :)
по словам какого то чела быстрее написанного на С? А они пробовали хорошо написать на С?) Может быть написать на С++? Какую то поганую очередь невозможно написать быстрее чем на С++, если она написана оптимально
Если посмотрите указанный доклад целиком, то поймёте, что этот "какой-то чел" весьма и весьма компетентен.
А они пробовали хорошо написать на С?
Тут неявно предполагается, что текущая версия на С написана плохо. Это далеко не факт. ЕМНИП, Паньгин в одном из своих докладов тоже говорил, что скомпиилрованный С2 код может работать быстрее сишного (понятно, что далеко не везде и не всегда).
Какую то поганую очередь невозможно написать быстрее чем на С++, если она написана оптимально
Это нужно доказывать. Вдруг написанная на ассемблере очередь окажется быстрее?
на ассемблере за приемлемое время написать ничего невозможно, на С++ можно писать быстрее чем на джаве. В середине доклада он ещё и про "кодогенерацию" говорит, если бы он увидел шаблоны С++, то думаю понял бы насколько глупо было использовать для этого джаву.
Компилируемое в рантайме незнамо что, сгенерированное генератором кода, который сам написан одним человеком, просто не может быть быстрее скомпилированного по нормальному из инстанцированного шаблона С++. Ручное управление объектами, чтобы мусоросборщик лишний раз не рыпнулся это просто абсурд, как и их переиспользование, очевидно тоже с выделением памяти. Свой собственный стринг билдер, который в сырой памяти что то дёргает и О БОЖЕ имеет операцию сдвига влево/вправо... Эффективно))) Алгоритмически неэффективная операция каким то чудом у него сделана эффективно. Бред бред и ещё раз бред, полностью согласен с человеком который задал вопрос про С, кроме того что использовать нужно С++, т.к. он эффективнее и удобнее
на С++ можно писать быстрее чем на джаве
На чём основано это утверждение? Вот здесь, например, утверждается прямо противоположное.
полностью согласен с человеком который задал вопрос про С
Вы сейчас смешиваете изначальный вопрос о том "быстрее ли явы плюсы" и "нужно ли в яве использовать разную низкоуровневщину", это две совершенно отдельные темы.
В отличие от С++, скомпилированного раз и навсегда, ВМ умеет перекомпилировать код на лету, умеет в спекулятивные оптимизации, оптимизации основанные на профиле и т.п.
Ну и вдогонку: "Исследование также показало, что представление о существенной разнице в скорости программ на этих языках не всегда верно: в двух из трёх тестов скорость работы приложений на Java и C++ оказалась сравнима. В то же время Java лаконичнее - разница в объёме кода составила порядка 10-15%."
Прямо по пунктам статейки:
Безопасность: отсутствие поддержки указателей и адресной арифметики, автоматическое управление памятью со сборкой мусора, встроенные средства, защищающие от распространённых ошибок программ C++, таких как переполнение буфера или выход за границы массива.
В С++ уже лет 20 не существует ошибок переполнения буфера и выходов за границы массива, управление памятью происходит за счёт деструкторов и принципиально лучше чем ГЦ(бесспорно), а отсутствие чего то не делает тебя безопаснымНаличие разработанной системы модулей и раздельной компиляции, значительно более быстрой и менее подверженной ошибкам, чем препроцессор и ручная сборка C++.
Препроцессор не подвержен ошибкам, а средства сборки развиваются, модули тоже уже введены в С++20 (и они не просто называются модулями)Полная стандартизация и исполнение в виртуальной машине, развитое окружение, включающие библиотеки для графики, интерфейса пользователя, доступа к базам данных прочих типовых задач, как следствие — реальная многоплатформенность
У С++ тоже есть стандарт и исполняется С++ в рамках стандарта на абстрактной машине, что даёт таки реальную кроссплатформенность. И гораздо более широкую чем джава, которой требуется ещё и джава машина с прочими прелестями. Библиотек для С++ тоже очевидно многоВстроенная многопоточность.
Не поверите, в С++ тоже есть примитивы многопоточности. Причём они более гибкие чем в джаве, появились корутины, лямбды(часты в асинхронном коде) появились в С++ раньше чем в джаве и т.д.Объектная подсистема Java в значительно более высокой степени, чем C++, отвечает фундаментальному принципу ООП «всё — объект». Интерфейсы позволяют обеспечить большинство преимуществ множественного наследования, не вызывая его негативных эффектов
Привязка языка к устаревшей модели ООП это не плюс, а минус. С++ мультипарадигменный, что позволяет брать лучшее из всех подходов.
Рефлексия значительно более развита, чем в C++ и позволяет реально определять и изменять структуру объектов во время работы программы.
Рефлексия - зло, тем более рантаймовая. Это не плюс, а минус. Если вам делать как говорится нечего, то используете прямо в рантайме в С++ инструменты компилятора clang, собираете динамическую библиотеку и линкуете сами с собой. Но учтите что если вы так сделаете, то я вас не люблю
Какое всё это имеет отношение к обсуждаемому вопросу "плюсы быстрее/медленее явы?" Ссылку я привёл исключительно в контексте двух выших комментариев:
на С++ можно писать быстрее чем на джаве
использовать нужно С++, т.к. он эффективнее и удобнее
Как починить HotSpot с помощью Java