Как стать автором
Обновить

Комментарии 12

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

Который всё ещё при нормальных подходах упирается в performance syscall'ов, кроме экзотических случаев, которые обычно чинятся банальной профилировкой за время, стремящееся к нулю.

Кроме того, обращаю внимание, что не сработало именно bounds check elimination - отмена проверок, которые никогда не должны случаться, и обычно эти проверки успешно убираются.

Посмотрите цитату в конце статьи: после исправления время существенно сократилось, при чём версия с небезопасным чтением (внезапно!) работает медленнее.

Это всего лишь пара ошибок, которые уже исправили. За всё нужно платить, С2 может выдавать код, который эффективнее написанного на Си, и тот факт, что в одном-двух случаях он не справился не повод посыпать голову пеплом :)

по словам какого то чела быстрее написанного на С? А они пробовали хорошо написать на С?) Может быть написать на С++? Какую то поганую очередь невозможно написать быстрее чем на С++, если она написана оптимально

Если посмотрите указанный доклад целиком, то поймёте, что этот "какой-то чел" весьма и весьма компетентен.

А они пробовали хорошо написать на С?

Тут неявно предполагается, что текущая версия на С написана плохо. Это далеко не факт. ЕМНИП, Паньгин в одном из своих докладов тоже говорил, что скомпиилрованный С2 код может работать быстрее сишного (понятно, что далеко не везде и не всегда).

Какую то поганую очередь невозможно написать быстрее чем на С++, если она написана оптимально

Это нужно доказывать. Вдруг написанная на ассемблере очередь окажется быстрее?

на ассемблере за приемлемое время написать ничего невозможно, на С++ можно писать быстрее чем на джаве. В середине доклада он ещё и про "кодогенерацию" говорит, если бы он увидел шаблоны С++, то думаю понял бы насколько глупо было использовать для этого джаву.

Компилируемое в рантайме незнамо что, сгенерированное генератором кода, который сам написан одним человеком, просто не может быть быстрее скомпилированного по нормальному из инстанцированного шаблона С++. Ручное управление объектами, чтобы мусоросборщик лишний раз не рыпнулся это просто абсурд, как и их переиспользование, очевидно тоже с выделением памяти. Свой собственный стринг билдер, который в сырой памяти что то дёргает и О БОЖЕ имеет операцию сдвига влево/вправо... Эффективно))) Алгоритмически неэффективная операция каким то чудом у него сделана эффективно. Бред бред и ещё раз бред, полностью согласен с человеком который задал вопрос про С, кроме того что использовать нужно С++, т.к. он эффективнее и удобнее

на С++ можно писать быстрее чем на джаве

На чём основано это утверждение? Вот здесь, например, утверждается прямо противоположное.

 полностью согласен с человеком который задал вопрос про С

Вы сейчас смешиваете изначальный вопрос о том "быстрее ли явы плюсы" и "нужно ли в яве использовать разную низкоуровневщину", это две совершенно отдельные темы.

В отличие от С++, скомпилированного раз и навсегда, ВМ умеет перекомпилировать код на лету, умеет в спекулятивные оптимизации, оптимизации основанные на профиле и т.п.

Ну и вдогонку: "Исследование также показало, что представление о существенной разнице в скорости программ на этих языках не всегда верно: в двух из трёх тестов скорость работы приложений на Java и C++ оказалась сравнима. В то же время Java лаконичнее - разница в объёме кода составила порядка 10-15%."

Прямо по пунктам статейки:

  • Безопасность: отсутствие поддержки указателей и адресной арифметики, автоматическое управление памятью со сборкой мусора, встроенные средства, защищающие от распространённых ошибок программ C++, таких как переполнение буфера или выход за границы массива.

    В С++ уже лет 20 не существует ошибок переполнения буфера и выходов за границы массива, управление памятью происходит за счёт деструкторов и принципиально лучше чем ГЦ(бесспорно), а отсутствие чего то не делает тебя безопасным

  • Наличие разработанной системы модулей и раздельной компиляции, значительно более быстрой и менее подверженной ошибкам, чем препроцессор и ручная сборка C++.

    Препроцессор не подвержен ошибкам, а средства сборки развиваются, модули тоже уже введены в С++20 (и они не просто называются модулями)

  • Полная стандартизация и исполнение в виртуальной машине, развитое окружение, включающие библиотеки для графики, интерфейса пользователя, доступа к базам данных прочих типовых задач, как следствие — реальная многоплатформенность

    У С++ тоже есть стандарт и исполняется С++ в рамках стандарта на абстрактной машине, что даёт таки реальную кроссплатформенность. И гораздо более широкую чем джава, которой требуется ещё и джава машина с прочими прелестями. Библиотек для С++ тоже очевидно много

  • Встроенная многопоточность.

    Не поверите, в С++ тоже есть примитивы многопоточности. Причём они более гибкие чем в джаве, появились корутины, лямбды(часты в асинхронном коде) появились в С++ раньше чем в джаве и т.д.

  • Объектная подсистема Java в значительно более высокой степени, чем C++, отвечает фундаментальному принципу ООП «всё — объект». Интерфейсы позволяют обеспечить большинство преимуществ множественного наследования, не вызывая его негативных эффектов

    Привязка языка к устаревшей модели ООП это не плюс, а минус. С++ мультипарадигменный, что позволяет брать лучшее из всех подходов.

  • Рефлексия значительно более развита, чем в C++ и позволяет реально определять и изменять структуру объектов во время работы программы.

    Рефлексия - зло, тем более рантаймовая. Это не плюс, а минус. Если вам делать как говорится нечего, то используете прямо в рантайме в С++ инструменты компилятора clang, собираете динамическую библиотеку и линкуете сами с собой. Но учтите что если вы так сделаете, то я вас не люблю

Какое всё это имеет отношение к обсуждаемому вопросу "плюсы быстрее/медленее явы?" Ссылку я привёл исключительно в контексте двух выших комментариев:

  • на С++ можно писать быстрее чем на джаве

  • использовать нужно С++, т.к. он эффективнее и удобнее

Я сказал использовать нужно С++ т.к. он эффективнее и удобнее относительно С, но и с джавой он вполне сравним по скорости и удобству разработки, а для вещей требующих производительности он удобнее джавы в разработке, т.к. ты не борешься с языком

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории