LINUX.ORG.RU
ФорумTalks

У нас так много общего

 , ,


0

3

Помнится, давным давно, когда раста еще не было, а на роль «убийцы С++» претендовала жава, на ЛОРе регулярно постили темы вида «жава обогнала си в 100 раз». Однажды убивцы С++ погорячились и выложили новость про очередное улучшение JVM, где в числе прочих достижений было написано нечто в духе «выполнило бесконечный цикл быстрее чем С». За сиё потом жабистов подтраливали: «жаба уже быстрее процессора», «жаба может выполнить бесконечный цикл до конца».

Благодаря усилиям секты свидетелей святого UB, старая шутка стала реальностью:

In brief, infinite loops containing no side effects produce undefined behavior in C++ (and C in some cases), however in other languages, they have fully defined behavior. LLVM's optimizer currently assumes that infinite loops eventually terminate in a few places, and will sometimes delete them in practice. There is currently no clean way to opt out of this behavior from languages where it's not valid.

https://bugs.llvm.org/show_bug.cgi?id=965

Растаманы, не пляшите от радости: вам тоже попало по жопе. А вы что думали, зайки, можно просто так вставить в компилятор какашечку потому что волшебное слово UB позволяет? Теперь это и ваша какашечка. Не срите в колодец, вам же оттуда кушать потом.

Перемещено tailgunner из development

☆☆☆

где в числе прочих достижений было написано нечто в духе «выполнило бесконечный цикл быстрее чем С». За сиё потом жабистов подтраливали: «жаба уже быстрее процессора», «жаба может выполнить бесконечный цикл до конца».

Это было до шуток про «Java не тормозит» в главной роли с Tommy или после?

EXL ★★★★★
()

Какой же все-таки мрак у некоторых в голове.

goingUp ★★★★★
()

Как будто растоманы имеют хоть малейшее отношение к тому что в С++ есть UB. Этот баг который ты привел по ссылке датируется 2008 годом, тогда раста еще не существовало, а LLVM уже умел выкидывать бесконечные циклы.

Ты наооборот должен радоваться тому что благодаря расту в компилятор хотят добавят возможность отключить удаление бесконечных циклов.

pftBest ★★★★
()

Опять скотинка не понимает сути UB...

UB как часть языка и UB как баг компилятора - разные вещи.

PS: новость то старая. Да и это не единственный UB в rust, на данный момент. Но хейтерам думать не нужно.

RazrFalcon ★★★★★
()
Последнее исправление: RazrFalcon (всего исправлений: 1)

Всё правильно делают.

slovazap ★★★★★
()

Т.е. ты утверждаешь, что Rust — говно, потому что в независимом от Rust проекте 10 лет назад нашли баг. Круто, что.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)

UB-ориентированное программирование, текстовый препроцессор, слабая типизация, SFINAE...

Кто-то серьёзно всё ещё топит за плюсы, в 2017-то году?

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

Полно пациентов. Даже конкурсы на самый выразительный C++ проводят: https://www.fluentcpp.com/2017/10/23/results-expressive-cpp17-coding-challenge/

Ну что тут сказать, C++17 хоть немного на современный язык начал походить.

RazrFalcon ★★★★★
()

У нас так много общего

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

anonymous
()
Ответ на: комментарий от Crocodoom

Кто-то серьёзно всё ещё топит за плюсы, в 2017-то году?

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

Не согласен - предложи вариант лучше. Или для тебя C++ - это тема поболтать?

anonymous
()
Ответ на: комментарий от RazrFalcon

C++17 хоть немного на современный язык начал походить.

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

anonymous
()
Ответ на: комментарий от anonymous

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

удобный инструмент

Странное утверждение, мягко говоря. В чём такое удобство плюсов? И по сравнению с чем ты считаешь их удобными?

эффективный инструмент

Слишком размыто. Если про скорость исполняемых файлов — в целом правда, с некоторыми оговорками. А если про бизнес-эффективность — то давно уже нет.

Предложи вариант лучше.

Опять слишком общо. Критерии лучшести какие? Если лучше именно как язык (синтаксис, семантика), то практически любой из современных.

Или для тебя C++ - это тема поболтать?

Ты не заметил, что мы на форуме? Да, именно тема поболтать.

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

Если лучше именно как язык (синтаксис, семантика), то практически любой из современных.

Все современные ЯП примерно такие же современные, как и с++. Ну мб кроме какого-нибудь раста.

anonymous
()
Ответ на: комментарий от Crocodoom

Ты не заметил, что мы на форуме? Да, именно тема поболтать.

Я на форумы хожу для обмена информацией, пустой треп мне не интересен. Так что с тобой явно нет смысла общаться.

anonymous
()
Ответ на: комментарий от next_time

слабая типизация

а что в ней плохого?

Что плохого в неявных преобразованиях?

Stil ★★★★★
()
Ответ на: комментарий от tailgunner

Скорее главная проблема в том, что разработчики не думают это исправлять.

WatchCat ★★★★★
()
Ответ на: комментарий от RazrFalcon

Нет, implicit cast это ненормально. Задним умом надо было сделать std::char наподобие std::byte алиасом в enum class : char и с ним перегружать, я считаю.

d_a ★★★★★
()

«выполнило бесконечный цикл быстрее чем С». За сиё потом жабистов подтраливали: «жаба уже быстрее процессора», «жаба может выполнить бесконечный цикл до конца».

Это про процессоры Intel - «современный процессор Intel способен выполнить бесконечный цикл за секунду».

andreyu ★★★★★
()
Ответ на: комментарий от pftBest

стой, погоди

Этот баг который ты привел по ссылке датируется 2008 годом, тогда раста еще не существовало

Во-первых 2006м годом, во-вторых, там написано Rust, в третьих он modified в 2017м году. Может быть нам врут и раст ни при чём?

Как будто растоманы имеют хоть малейшее отношение к тому что в С++ есть UB.

Никакого отношения не имеют, а UB всё равно догнало их и даёт им подсрачники. Ни за что получают по жопе кирзовым сапогом от LLVM растаманы. Вот такая-вот загогулина.

в компилятор хотят добавят возможность отключить удаление бесконечных циклов

Я так понимаю, рассылку LLVM ты не читаешь. Хотя вроде заявлял что в LLVM копался. Это странно. Ну просто если бы читал, то знал бы что нельзя просто так взять и удалить UB из LLVM.

ckotinko ☆☆☆
() автор топика
Последнее исправление: ckotinko (всего исправлений: 1)
Ответ на: комментарий от ckotinko

Может быть нам врут и раст ни при чём?

Не врут, эта особенность llvm известна давно, https://github.com/rust-lang/rust/issues/28728

Ни за что получают по жопе кирзовым сапогом

А сишники уже десять лет получают и молчат. Пока не пришли люди из раста и не пожаловались, никто и не собирался ничего исправлять.

рассылку LLVM ты не читаешь

У меня на рассылку стоит фильтр чтобы не читать все подряд.

удалить UB из LLVM

Я ничего не говорил про «удалить UB», я имел в виду что clang возможно перестанет удалять бесконечные циклы в твоей любимой сишке, так что ты наверное должен быть рад этому.

pftBest ★★★★
()
Ответ на: комментарий от pftBest

вот опять начинается.

А сишники уже десять лет получают и молчат.

во-первых, кто надо не молчит. этот баг с 2006го года открыт, и полно его копий:

duplicates (9): 3593 5387 5644 10858 12033 14454 14973 16733 31217

во-вторых, говорить что использование UB в компиляторе для изменения CFG в «целях оптимизации», вам, верующим в «швятой штандарт» бесполезно. Сами для себя решили, что UB разрешает компилятору генерить шизокод? вот и кушайте, «это повидло».

а поскольку у тебя «фильтр стоит», то мы тут читаем рассуждения про то, что будет некий патч, который придёт и порядок наведет. а посоны-то не знают, у них от патча битва между разными UB начинается, ололо.

ckotinko ☆☆☆
() автор топика
Последнее исправление: ckotinko (всего исправлений: 1)
Ответ на: комментарий от ckotinko

алсо, челы в рассылке уже думают, что наверно надо менять семантику IR. и це дело! главное не останавливаться, больше жертвоприношений идолу UB

ckotinko ☆☆☆
() автор топика
Ответ на: комментарий от ckotinko

Понятия не имею о чем ты. На патче же написано LGTM, разве нет? Если ты говоришь про какой-то конкретный срач в рассылке, то дай ссылку на него, почитаю.

pftBest ★★★★
()
Ответ на: комментарий от ckotinko

Ничего эпичного не вижу, люди просто обсуждали что правильнее написать в документации к этому интринсику. Никто даже не высказался против, обычный code review.

Для сравнения, вот это эпичный тред в рассылке.

pftBest ★★★★
()
Ответ на: комментарий от pftBest

вообще-то люди просто обсуждают именно то, как работает этот интринсик. и проблема тут поинтереснее чем банальное UB.

ведь что такое infinite loop без внешних эффектов?

1: hlt
   jmp 1b
похоже? вот честно, а разве нельзя было сразу ввести интринсик «вечный луп» и менять такие циклы на этот интринсик? это что, настолько неимоверно сложно?

сперва сделали через жёппу, затем героически побеждают.

ckotinko ☆☆☆
() автор топика
Последнее исправление: ckotinko (всего исправлений: 1)
Ответ на: комментарий от ckotinko

Не все так просто, в общем случае компилятор не может доказать будет цикл бесконечным или нет. Просто заменить явные бесконечные циклы можно, но это не решит все проблемы.

Например код:

int main() {
    unsigned number = 0;
    for (;;) {
        if (is_magic(number))
            break;
        number++;
    }
#ifdef SOME_SHIT
    printf("%u\n", number);
#endif
    return 0;
}

Можешь вместо ifdef представить что там if(0) который получился после других оптимизаций.

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

pftBest ★★★★
()
Последнее исправление: pftBest (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.