LINUX.ORG.RU

gcc-8 совсем поломанный

 


3

7

Я так понимаю в последних версиях gcc хипстеры вообще всё сишку решили сломать. Хотя пишут статейки что C никогда не был портабельным ассемблером, но ведь использовали его так и куча кода накопилась. Теперь этот весь код сломан. Например сброс знака по (a & 0x7fffffff) не работает и много всего вообще теперь не работает и писать теперь надо как на плюсах. И страшно бояться любого UB так как оно будет страшно падать на ровном месте и 2+2 будет 5. Особенно это опасно, если лет 30 устоявшиеся методы для решения задач были, и эти чувырлы с UB головного мозга это всё радостно ломают. Я так понимаю это делается специально, чтобы кому-то не было скучно на работе, а реального толку 0. Какой сейчас более-менее адекватный gcc, 5.4? Шланг не предлагать, он никогда не был компилятором, вообще. Это они весь сыр-бор и начали. Я так понимаю реально там полезное сейчас только в C++ делают, в C только ломают.

★★★★★

Смотри, что тебе нужно сделать:

  • Ищешь стену
  • Разбегаешься
  • Бьешься об неё головой

Если ты ещё способен соображать после пункта #3 — повторяешь пункты #2 и #3 заново.

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

Кстати, спасибо, вот оно и решение. Почему-то я про это не подумал. Надо больше спать.

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

До такого не дойдет, но понятно, что придется все вычисления всё равно переписывать. Так как CRC не сойдутся. Поэтому этот код под ифдефами, и под каждый новый размер инта свой. Но делать сам код портабельным в этом месте слишком медленно.

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

Не опробованные на себе советы - советы теоретика. Вряд ли следование таким советам приведёт к нужному результату. Порадуйте меня своим примером - покажите как.

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

Зависит от контекста. Здесь лучше так. Ифдефы скорее всего заменю на разные .c файлы.

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

Ну плевать мне в этом месте на целочисленное переполнение

А потом у них браузеры текут и heartbleed ВНЕЗАПНО обнаруживаются.

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

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

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

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

Ну так не пишите с UB, вашу мать.

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

Ну самые базовые принципы простые, прям почти как васик. Это всё всякие стандарты с компиляторами портят, а не делают шоб работало )))00xDD

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

На торрентах или где-нибудь в университетском доступе есть нахаляву.

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

Вложенные функции? Мы точно про си

Точно про С. Я очень часто использую вложенные функции, если нужно что-то сделать с парой изменяющихся параметров при куче постоянных. Оформлять это в полноценную функцию — придется городить структуру и каждый раз передавать ссылку на нее, а потом разбирать по частям, что нафиг не надо!

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

с ростом вычислительных ресурсов, человеку всё сложнее анализировать код так же как это делает компилятор.

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

с ростом вычислительных ресурсов, человеку всё сложнее анализировать код так же как это делает компилятор.

Типа проапргрейдил процессор и стало сложнее читать код? Упоролся что ли?

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

компилятор стал успевать делать выводы (таки да, время компиляции является для них писькомеркой), до которых ты дойдёшь только за несколько тысяч лет медитации над определённым куском кода.

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

компилятор стал успевать делать выводы (таки да, время компиляции является для них писькомеркой), до которых ты дойдёшь только за несколько тысяч лет медитации над определённым куском кода.

Выводы относительно твоих родителей и необходимости постнатальной контрацепции? Да это и я могу. Вот недавно прочитал код коллеги и захотел его пристрелить.

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

бывают настолько гениальные люди, да.

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

ты — знаешь. как и тс, впрочем.

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

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

Авторы GCC и английского-то не знают. А штольман вообще мозоли ест.

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

я одобряю твой выбор, но топик несколько о другом

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

я так до сих пор и не понял, что ты имеешь против js

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

Да-да, в дырах виноваты кто угодно, компилятор, стандарты, лично Линус Торвальдс, но только не мамкин сишкарь-байтоёб, самовыражающийся с UB в коде.

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

ну, лично линус торвальдс в это наступал. и отложил кирпичей на ещё одну китайскую стену. что сказать-то хотел?

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

Это уже в прошлом.

Да, в генте, к сожалению, заблокировали все младше шестой ветки. А зря. Полезных плюшек в новых gcc намного меньше, чем всякого вредительства!

Если бы делали по-человечески, то и код со времен K&R так же спокойно собирался бы. Ан нет, теперь пока руками все не повыправишь, хрен соберешь!!!

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

Непонятно, зачем ты это скинул. Сказано же, что переполнение так и останется UB.

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

Вот, кстати, пример, когда очень удобно использовать вложенные функции:

static int parse_answer(char *buf, int N){
    if(!buf) return 0;
    ++buf;
    // safely read integer from buffer
    int getint(char *buf){
        char *endptr;
        if(!buf || !*buf) return INT_MIN;
        long l = strtol((char*)buf, &endptr, 10);
        if(l < INT_MIN || l > INT_MAX) return INT_MIN;
        if(endptr == buf) return INT_MIN; // NAN
        buf = endptr;
        return (int)l;
    }
    int i = getint(buf);
    if(i != N) return 0;
    if(*buf != '_') return 0; // wrong format
    ++buf;
    int v = getint(buf);
    if(v < 0 || v > 81) return 0;
    i = v/10; v -= i*10;
    if((v & 1) != v) return 0;
    if(*buf != '=' ) return 0;
    ++buf;
    int T = getint(buf);
    if(T < -27300 || T > 30000) return 0;
    t_last[i][v] = ((double)T) / 100.;
    tmeasured[i][v] = time(NULL);
    return 1;
}

anonymous
()

Очередной пример дегенерата, который не разобрался и сразу у него все вокруг хипстеры с гомосексуалистами.

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

очевидно что без симд быстрее работает слева, чем симд справа
ну вообщем съездили с москвы в ебибет через ньюерк с симд

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

Я вот тоже думаю. Вряд ли будет быстрее, но это слишком тривиальный пример. У арма нет этой оптимизации (она кстати с 7) и O3 обещает максимальные оптимизации, они не обязательно будут эффективней.

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

это не филед баг, это попытка порассуждать, там дальше уже нашли в чем и зарепортили, даже регресс нашли после 6.3 гцц

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

очевидно что без симд быстрее работает слева, чем симд справа

Ты, очевидно, не слышал про новое изобретение человечества — иронию.

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

Да и пофиг. Я этим уже лет 12 пользуюсь... И не представляю, как бы без них.

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

под ARM по непонятным для меня причинам сhar - без знаковый

используйте uint8_t и int8_t

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

UB был UB всегда. Просто старые компиляторы были тупыми и не умели в оптимизации, и криворуким быдлокодерам просто везло, а современные наконец научились и код перетряхивать не боятся, ну и всё дерьмо отложенное имбецилами в снег повсплывало на поверхность. От всего сердца желаю им максимум страданий. Нормальные же люди наслаждаются бесплатным ускорением своего (в том числе сишного) кода с каждой новой версией компилятора.

Шланг не предлагать, он никогда не был компилятором

Ха-ха. Так может написать только тот, кто никогда не был программистом.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.