The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

В ядре Linux выявлена ошибка, приводящая к нарушению работы некоторых программ, использующих AVX

27.11.2019 10:32

В ядре Linux, начиная с выпуска 5.2, проявляется ошибка, которая приводит к нарушению содержимого регистра AVX при возврате из обработчика сигнала, обрабатываемого при генерации исключения (page-fault). Проблема возникает при запуске многопоточных программ ("-pthread"), в которых имеются вычисления с регистром AVX, в случае сборки ядра в GCC 9 (при сборке в более ранних выпусках GCC ошибка не проявляется, так как GCC 9 кэширует адрес переменной thread-local в регистре, а более ранние версии GCC загружают его каждый раз).

Проблема приводит к преждевременному завершению программы с ошибкой повреждения памяти. Наиболее заметным и часто наблюдаемым проявлением ошибки стали крахи приложений, написанных на языке Go. Из-за отмеченной проблемы программы на языке Go преждевременно завершаются, как правило, с ошибками "runtime error: invalid memory address or nil pointer dereference", "runtime: unexpected return pc" и "segmentation violation". Для устранения проблемы в ядре предложен патч. Рассматривается возможность добавления в runtime языка Go изменений для выборочного обхода ошибки на проблемных ядрах Linux, ценой появления дополнительных накладных расходов.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Google исправил ошибку, около 10 лет присутствующую в TCP-стеке ядра Linux
  3. OpenNews: В ядре Linux выявлены ошибки, приводящие к зависанию процессов и повреждению разделов EXT4
  4. OpenNews: Отсоединение USB-устройств после спящего режима оказалось вызвано ошибкой в USB-стеке Linux
  5. OpenNews: В реализации программного RAID для Linux обнаружена ошибка, которая может привести к повреждению мета-данных
  6. OpenNews: Критическая уязвимость в обработчике крахов приложений, применяемом в Ubuntu
Лицензия: CC-BY
Тип: К сведению
Ключевые слова: linux, kernel, golang, avx
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (119) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, Аноним (2), 10:36, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +37 +/
    А сколько Go-погромистов думали, что у них руки кривые...
     
     
  • 2.4, Аноним (4), 10:40, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +16 +/
    Как будто это не так.
     
     
  • 3.16, Аноним (16), 10:56, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Как видите - нет, не так.
    Кривые руки в данном случае, как выяснилось, не у голангеров.
     
     
  • 4.39, Аноним (4), 11:54, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +29 +/
    > Кривые руки в данном случае, как выяснилось, не у голангеров.

    Не _только_ у голангеров.

     
  • 4.109, Аноним (109), 00:49, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Это была "закладка", чтобы человек мучился, искал проблему, читал документацию, тестировал. Своего рода через язык Go хотели сделать сверх-программистов, не знающих боли, сна и всегда идущих к цели. Наверно :)
     

  • 1.3, anonymous (??), 10:38, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Кто кричал, что Go не нужен? Вот и профит! :)
     
     
  • 2.7, Аноним (7), 10:45, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –6 +/
    >Go не нужен

    Без докера и k8s в современном интерпрайзе далеко не уедешь.
    До Сколково, разве что.

     
     
  • 3.21, Аноним (21), 11:09, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Это не в современном энтерпрайзе, это хипстеры кроме модно-современно ни в чем не разбираются.
     
     
  • 4.24, ыы (?), 11:15, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –13 +/
    При этом они создают инновации, зарабатывают деньги... А вы хотите предложить иной путь?
     
     
  • 5.30, neAnonim (?), 11:34, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Клепать шаблонные сайты != инновации.
    mesa(vulkan), вычислительная химия итд на c99.
     
     
  • 6.33, имя_ (?), 11:39, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    и множество скриптов на питоне.

    ой, как же так, ведь все на пюре-си?!

     
     
  • 7.81, Omnomnom (?), 16:51, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Вы же сами написали "множество скриптов". Речь про ядро, а не про скрипты. В общем, ваш парад в другом месте, проходите дальше, не задерживайте.
     
  • 6.36, Аноним (36), 11:42, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Настоящие пограмисты должны писать только на C89, всё, что было создано после, это для тупой хипстоты, которая не осилила ...
     
     
  • 7.50, neAnonim (?), 12:36, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    У тебя память как у рыбки. Тезис был в том, что инновации это только хипсто-тех, я его опровергнул.
    Я не хотел вызвать сомнение в твоей профессиональности. Настоящий ты или нет
     
     
  • 8.53, ыы (?), 12:51, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вы там передернули, приравняв хипсто-тех клепать шаблонные сайты То есть по пре... текст свёрнут, показать
     
  • 8.56, ыы (?), 13:06, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну вот что сейчас модно-современно дата майнинг машинное обучение питон голанг ... большой текст свёрнут, показать
     
     
  • 9.76, Урри (?), 16:33, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    дата майнинг - на С машинное обучение - на С питон - пффффф голанг - пффффф джав... текст свёрнут, показать
     
     
  • 10.99, Аноним (99), 21:52, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Машинное обучение-на python Соседи по этажу гребут бабки на хайпе нейронок и вс... текст свёрнут, показать
     
  • 7.72, Аноним (72), 15:24, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    > Настоящие пограмисты должны писать только на C89, всё, что было создано после, это для тупой хипстоты, которая не осилила ...

    Вся эта молодежная C89 исключительно для тупой хипстоты, что не осилили COBOL и Fortran.

     
     
  • 8.86, Аноним (86), 18:14, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Перфолента вам в зубы ... текст свёрнут, показать
     
  • 7.97, Аноним (99), 21:40, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ты это не скажи толпам C++-ных гуру. У них-то как раз юзающие С89-старпёры-неосиляторы великого и могучего какого-то там по счёту C++.
     
  • 4.34, Аноним (7), 11:40, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +9 +/
    >Это не в современном энтерпрайзе,

    У вас потрясающие знания. Может быть вы и 1с умеете устанавливать?

     
  • 4.60, Вуыкло (?), 13:36, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Эксперты как всегда подъехали, вижу.
     
  • 3.37, Gemorroj (ok), 11:45, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    это троллинг или ты реально такой идиот?
     

  • 1.5, Аноним (5), 10:43, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    так проблема в ядре или в гцц?
     
     
  • 2.8, Аноним (7), 10:45, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +43 +/
    Да.
     
  • 2.9, anonymous (??), 10:46, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В ядре.
     
  • 2.40, Anonymoustus (ok), 12:00, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В ядре и в ЖэЦэЦэ.
     
  • 2.44, anonimous (?), 12:19, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Или в Го
     
     
  • 3.49, leap42 (ok), 12:28, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Go вообще не при делах, прост заметили первыми.
     
     
  • 4.74, Андрей (??), 15:49, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Что говорит о том, что с Go программы по-умолчанию лучше оптимизированы (используется AVX). Значительно чаще чем GCC/Clang.
     
     
  • 5.77, Урри (?), 16:36, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    AVX(MMX, SSE, AVX2..) используется только в векторизации математики и пользу приносит только и исключительно при обработке больших объемов данных. А с автоматической векторизацией уже лет 10 отлично справляются всякие gcc.

    То, что в Го оно везде и всюду - это большой и жирный минус, ибо лишний комбайн в курятнике не нужен.

     
  • 5.96, Forth (ok), 21:29, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Регистры SSE часто используются вовсе не для вычислений, а как дополнительная память для локальных переменных.
    Возможно в данном случае так.
     
     
  • 6.110, Урри (?), 02:18, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Идиот? Регистры SSE не умеют работать кусочками и пересылать/принимать данные в другие регистры общего назначения, а только через память.

    Так объясни, нахера в них держать локальные переменные, если перед их использованием их все равно придется сложить в кучу/стек? Да заодно еще и потерять дополнительные 500 тактов на переключении задач (цпу флажок устанавливает, если юзались ссе и тогда при переключении задач в контекст заодно сбрасывается весь пул ссе регистров)?

     
     
  • 7.122, Аноним (122), 16:44, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ответ на вопрос - да.
    Умеют.

    movq xmm0, rsi
    cvtsi2sd xmm0, rdi

    Описание команд найдёшь сам.

     
  • 2.48, leap42 (ok), 12:27, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    gcc
     
  • 2.61, TormoZilla (?), 13:36, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В ЦП.
     

  • 1.6, Аноним (6), 10:44, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Линус вежливо шаркнув ножкой и с поклоном, умоляет разработчиков не ломать юзерспейс
     
     
  • 2.95, Аноним (95), 21:20, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    по этому нужно оставить все как есть - а то сломается такая фича, как сломанные avx
     

  • 1.10, garrick (?), 10:46, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    А это точно ошибка в ядре Linux?
     
     
  • 2.11, Аноним (11), 10:49, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Если факты не вписываются в картину мира, то тем хуже для фактов!
     
  • 2.14, foo (?), 10:53, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Немного сложнее :) Просто 9-й gcc лучше оптимизирует код и оставляет значение в регистре вместо повторного считывания. Но в конечном счете, имхо, да, это ошибка ядра.
     
     
  • 3.22, Аноним (7), 11:10, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Оптимизация от создателей
    [code]
    int rand()
    {
    return 4 // Гарантированно случайное число. Выбрано подбрасывание кубика.
    }
    [code]
     
     
  • 4.25, foo (?), 11:16, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Нет, просто забыли использовать READ_ONCE() для получения переменной, а GCC 9+ лучше оптимизирует код. При сборке GCC 8 баг не проявляется.
     
  • 2.15, кельвин (?), 10:53, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    чёт тоже кажется что это gcc мутит..
     
  • 2.117, КО (?), 09:32, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Это ошибка _проявляющаяся_ в ядре.
     
  • 2.125, Линус Трольвальдс (?), 18:25, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В Винде
    Билл Гейтс лично это проклятье нассылал
    Но Линукс выстоял - он же непогрешим
     

  • 1.12, анонимно (?), 10:50, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    " Рассматривается возможность добавления в runtime языка Go изменений для выборочного обхода ошибки на проблемных ядрах Linux, ценой появления дополнительных накладных расходов." заодно и Kotlin поправить, там то же *рутины. Ужасный костыль будет.
     
     
  • 2.67, Ты спишь в посадке (?), 14:43, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    pthread используется в over9000 *nix приложений
    И
    pthread != coroutine
     
     
  • 3.101, rshadow (ok), 22:12, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    LOL. поменяйте теплое на мягкое
     
     
  • 4.120, иже еси на асме и си (?), 15:24, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А на что ты поменял свой сканнер, red shadow?
     

  • 1.17, Аноним (16), 10:59, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –9 +/
    Ю Рассматривается возможность добавления в runtime языка Go изменений для выборочного обхода ошибки на проблемных ядрах Linux
    Дети, не водитесь с ядром Linux, а то костылями заразитесь.
     
     
  • 2.18, Andrey Mitrofanov_N0 (??), 11:04, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Ю Рассматривается возможность добавления в runtime языка Go изменений для выборочного обхода
    > ошибки на проблемных ядрах Linux
    > Дети, не водитесь с ядром Linux, а то костылями заразитесь.

    Едро твоей в*нды 9-ым GCC собирается?  И голоангеры - довольны?

    Так держать!

     
     
  • 3.64, Аноним (16), 14:20, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Дай исходники ядра в*нды - попробую и расскажу.
     
     
  • 4.79, Урри (?), 16:39, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    пожалуйста: https://github.com/pustladi/Windows-2000
    ждем рассказа.
     
     
  • 5.87, Аноним (16), 18:18, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    *вкрадчиво* а ещё более древнего от ещё более мутной персоны не нашлось?
     
     
  • 6.123, Аноним (122), 16:48, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Это не тот рассказ, что был обещан.


     
  • 2.19, Аноним (7), 11:06, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это просто Пирамида Маслоу-Костыля
    Software - состоит из костылей на 35%
    OS - состоит из костылей на 50%
    Firmware - состоит из костылей на 90%
     
     
  • 3.26, Аноним (26), 11:23, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Hardware - состоит из костылей на 100%

    Вывод: любые вычислительные машины -- это костыль.

     
     
  • 4.32, Аноним (7), 11:39, 27/11/2019 Скрыто модератором
  • –2 +/
     
     
  • 5.47, Annoynymous (ok), 12:27, 27/11/2019 Скрыто модератором
  • +2 +/
     
  • 5.62, kravich (ok), 13:52, 27/11/2019 Скрыто модератором
  • –1 +/
     
  • 3.52, ыы (?), 12:47, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Иерархия потребностей Маслоу (которую некоторые люди называю "Пирамидой") она про потребности и порядок их удовлетворения сообразно внутренней ценности, а не про состав.
     
  • 2.66, Аноним (66), 14:32, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Без венды и не туды и не сюды.
     
     
  • 3.113, Урри (?), 02:41, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сочувствую
     

  • 1.23, Аноним (23), 11:14, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –8 +/
    >В ядре Linux

    Ну так just for fan же, врочем ничего нового.

     
     
  • 2.27, Аноним (26), 11:24, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ну да, во всеми любимой ОС такого нет. Только антивири всё-равно как-то в ядро умудряются свой код пихать, чтобы незаметно сливать данные пользователей. А это уже не just for fun.
     
     
  • 3.38, пох. (?), 11:46, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    почему "незаметно"? На чорном-пречорном экране синюю табличку с надписью "уверены ли вы, что", ОК нажимал? "Не помнишь"?! Что там было написано - тоже не помнишь, или вообще читать не пытался?

    Ну, вот, для таких - "незаметно".

     
     
  • 4.80, Урри (?), 16:40, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    но ведь на самом деле незаметно. руткиты это спокойно делают уже лет 15.
     
     
  • 5.82, пох. (?), 17:13, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    большая часть - таки с попустительства юзверя, в том числе бодро кликающего OK, или через далеко не 0-year уязвимости. Незаметный 0-day rootkit штука дорогая, ценная, живет очень ограниченное время (и чем чаще применяется, тем это время короче), на вас ее тратить точно никакого резона нет.

    А антивирус просто вежливо спрашивает - хочешь меня?! Ну хочешь же ж?! Чпок... Добрый вечер!

     
  • 2.42, Fyjy (?), 12:10, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +11 +/
    > just for fan

    Это «Для вентилятора» что ли?

     
     
  • 3.43, Andrey Mitrofanov_N0 (??), 12:16, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> just for fan
    > Это «Для вентилятора» что ли?

    "[Остр]по за фантики" !

     
  • 3.58, Аноним (58), 13:26, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    жаст фофан
     
  • 3.59, Аноним (59), 13:29, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Уровень знаний критиканов продемонстрирован.
     
     
  • 4.71, Fyjy (?), 15:04, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Разницу между fun и fan видишь?
     
     
  • 5.88, НяшМяш (ok), 19:04, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Не напрягайся, это же типичный "анонимный эксперт опеннета", для них обычное дело пользоваться лексиконом, который они не понимают.
     
     
  • 6.90, Fyjy (?), 20:14, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Блин, а я уж думал что кто-то делает вещи «just for fan», «чисто для вентилятора». Хотел бы и книгу такую прочитать :-D
     
     
  • 7.98, Ordu (ok), 21:49, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    fan нужен, чтобы на него shit лопатами вкидывать. Не нужно читать специальных книг, чтобы производить дерьмо для вентиляторов. Есть врождённая функция человеческого организма, которая справляется сама.
     
     
  • 8.111, Fyjy (?), 02:36, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Есть такая книга, называется 171 Just for fun 187 , но современные обитатели ... текст свёрнут, показать
     
     
  • 9.119, Ordu (ok), 14:03, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Она получилась довольно забавной отсылкой, намекающей на то, что Торвальдс запил... текст свёрнут, показать
     
  • 8.124, Аноним (122), 16:55, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нужно читать книги, что бы знать историю https english stackexchange com quest... текст свёрнут, показать
     
  • 7.100, Аноним (100), 21:52, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да. Мы, анонимные эксперты опеннета, только для вентилятора и пишем свои комментарии.
     

  • 1.28, Аноним (28), 11:30, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    юзайте rust
     
     
  • 2.35, имя_ (?), 11:41, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +16 +/
    "благодаря раст я понял насколько красив c++" (c)
     
     
  • 3.41, Anonymoustus (ok), 12:08, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    И хрустоедов опустил красиво.
     
     
  • 4.55, Ordu (ok), 13:05, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Я не вижу каким образом он опустил. Я вот тоже оценил C++ только после знакомства с rust'ом. И это не мешает мне быть фаном раста. И я не вижу в чём опускание? В том, что это намёк на тупизну заурядного растофила, который может понять С++, только через призму rust'а, потому что rust освоить проще чем C++? Ну, может быть и так, но я это вижу скорее как камень в огород C++, который настолько беспорядочно развивался, и такое количество идиотов привлёк, что найти стоящую инфу по нему, не будучи специалистом в C++ практически невозможно.
     
     
  • 5.75, Crazy Alex (ok), 16:31, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ты это серьёзно, насчёт инфы? Книги Саттера, C++ Core Guidelines и https://isocpp.org/faq покрывают фактически всё.

    Насчёт "раст освоить проще" я, кстати, категорически не согласен - он хочет, чтобы разработчик как-то очень специфически свернул мозги, в то время как плюсы совершенно спокойно ложатся на существующие привычки почти из любого распространённого языка. Единственное, что надо - понять, что есть данные (и у них есть владелец), а есть указатели и ссылки на них, и что это разные вещи.

     
     
  • 6.91, Аноним (91), 20:19, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Раст как раз помагает это все понять, в самой что интераетивной форме, заодно прикрывая твою задницу каждый раз, когда ты лоханулся. Изворачивать мозги не требуется
     
  • 6.94, Ordu (ok), 21:13, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +7 +/
    > Ты это серьёзно, насчёт инфы?

    Да.

    > Книги Саттера, C++ Core Guidelines и https://isocpp.org/faq
    > покрывают фактически всё.

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

    > Насчёт "раст освоить проще" я, кстати, категорически не согласен - он хочет,
    > чтобы разработчик как-то очень специфически свернул мозги,

    TL;DR Самый простой способ освоить C++, это освоить раст, а потом потратить пару вечеров на то, чтобы пролистать Страуструпа.

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

    А, я чуть не забыл про реддит. Там офигенное сообщество растоманов, туда можно придти с куском кода, на который ругается борроучекер, и тебе объяснят почему он прав, что именно ты сделал не так, уточнят у тебя, что ты хочешь сделать, и предложат способы как это можно сделать. В этих условиях, надо быть либо слабоумным, либо элементарно не хотеть осваивать раст, для того, чтобы не освоить его за 3 месяца, до уровня пониманя того, зачем и когда нужен unsafe и как его использовать, чтобы не обжечься.

    И я отмечу, все эти ресурсы несложно найти, возможно для этого даже гугл не нужен, можно до любого добраться в несколько переходов с rust-lang.org.

    > в то время как
    > плюсы совершенно спокойно ложатся на существующие привычки почти из любого распространённого
    > языка.

    В том-то и проблема. Каждый приходит со своими идиотскими привычками, и начинает рассказывать что его привычки лучше всего, что именно так и надо писать на C++. И среди всех этих рассказов практически невозможно найти те, чьи авторы реально попытались сломать свои старые привычки, заточенные под C/asm/Lisp/..., и выработать новые, которые лучше подходят для С++. То есть, если ты заранее знаешь, какие привычки лучше подходят, то найти изложение этих привычек несложно. Но если ты не знаешь, то ты не можешь отличить хорошие привычки от плохих. Единственный способ -- это несколько лет практики, когда ты перелопатишь всю ту бочку дерьма, которое предлагают доморощенные C++-гуру, и выберешь оттуда искомую каплю мёда.

    Блин, глянь на Common Lisp. Пятая ссылка в ddg по запросу "Common Lisp" -- это "Practical Common Lisp", книга которая разбирает CL на примерах, решая вполне практичные задачи лисповым способом. Достаточно прочитать эту книгу за пару вечеров, и ты уже понимаешь как надо писать на CL. Да, ты не знаешь что такое meta-object protocol, и не можешь ещё запиливать свои ООП системы поверх CLOS. Ну и чё? Это уже технические детали которые ты освоишь тогда, когда тебе приспичит написать бинды к qt, которые позволят жонглировать кутишными классами как first-class объектами языка, не создавая ненужных прослоек между lisp'ом и C++. Это дело техники, а философию программирования на lisp'е ты уже освоил за два дня.

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

    > Единственное, что надо - понять, что есть данные (и у
    > них есть владелец), а есть указатели и ссылки на них, и
    > что это разные вещи.

    Ой, это вообще не проблема. Эти вещи осваиваются максимум за неделю чтения любой книжки по C или C++. Глянь, я C осваивал полгода в школе, у нас парень читал курс сетевых технологий, и полгода он посвятил С. А года через два я купил какую-то книжку по С++, и освоил весь синтаксис и все абстракции C++ за пару недель. Ни в синтаксисе ни в семантике C++ нет ничего сложного, книжки C++ за 21 день для чайников не врут: всё это реально можно освоить за 21 день, даже если две недели прокрастинировать.

    Но здесь обратная ситуация с CL. В CL можно философию lisp'а за два дня усвоить, и потратить потом пару лет на то, чтобы освоить всё остальное, читая документацию. С С++ ты освоишь неважные технические детали за неделю, но философию будешь осваивать потом по кусочкам годами. Я в течение 15 лет знал, что такое наследование в C++, что такое темплит, и как написать иерархию из всяких там Person и Employee да ещё и параметризовать её. И все эти 15 лет я не мог понять, что мне с этим знанием делать и как их применять для решения реальных проблем, все эти возможности были полезны как третья нога, без них на С было проще и понятнее. Попытки писать что-то на C++ упирались в то, что я по тысяче раз менял одни и те же куски кода, потому что так как я задумал их было невозможным дописать. То что-то критичное вдруг отказывалось инлайниться, из-за того что приходилось отказаться от const в заголовке функции, то ещё какая хрень. Попытки задавать вопросы в интернетах разбивались об умников, которые больше стремились объяснить мне, что я ничего не понимаю в C++, чем объяснить мне что мне делать в моей ситуации. А если они и объясняли, то всенепременно скатываясь в какой-нибудь холивар-междусобойчик, типа C с классами -- это сакс, или что Александреску надо распять на одном из крестов С++. И пойди потом разберись, кого из этих отморозков слушать, а кого игнорить.

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

    Когда же я увидел rust, его borrow-checker за три месяца объяснил мне как надо, посредством битья по рукам за каждую попытку сделать так, как не надо. Да, технически это выглядело примерно так же: я писал кусок кода, и потом многократно вносил в него изменения, чтобы посмотреть что получится. Но с borrow-checker'ом каждая итерация занимала существенно меньше времени, потому что borrow-checker, как правило, на ранних этапах сообщает что я спорол чушь. Он не дожидается, когда я напишу полтысячи строк кода, чтобы потом я вдруг выяснил, что какой-то код, на инлайн которого я надеялся, не инлайнится, и задним числом очевидно почему, и очевидно что ничего с этим не сделать, но поскольку я в этот код передаю огромную структуру по значению, то без инлайна тут плохо. И уйти от передачи по значению не удастся, потому что там какие-нибудь требования стандарта к декларации операторов мешают. Через месяц возни с rust'ом я рылся не только в коде std, но и в коде gfx-rs, и это не представляло никаких особенных неудобств, особенно если сравнить с моими давнишними попытками порыться в libstdc++ -- там такой взрыв синтаксиса, размазанный далеко за края экрана, утонувший в темплитах, с минимумом документации, с совершенно идиотским делением на заголовки и сорцы: в заголовках декларации, в сорцах всё остальное, но есть нюанс: однострочники и некоторые другие inline функции/методы живут в заголовках. То есть это даже читать последовательно невозможно, приходится переключатся между файлами туда сюда, и между разными местами одного файла.


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

     
     
  • 7.102, Anonymoustus (ok), 23:14, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > Итого самый простой способ освоить C++, это освоить раст, а потом потратить
    > несколько вечеров на то, чтобы полистать Страуструпа. После этого для того,
    > чтобы кодить на С++ на хорошем профессиональном уровне будет не хватать
    > лишь технических деталей, которые на 95% можно извлечь из документации, а
    > остальное задавая вопросы гуглу.

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

     
  • 7.107, Crazy Alex (ok), 00:28, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ох и простыня :-)

    Не, сейчас правда всё проще. Берёшь guidelines (от Саттера и Страуструпа, которые точно знают, что такое правильный плюсовый код) и молотишь по ним. Для желающих - там же объяснено "почему так".  Всё.

    Ну, или на первый запрос "C++ what to read" получаешь совершенно осмысленный список саттеровских и подобных книг.

    Кстати, стандартный (и почти всегда правильный) ответ на вопрос насчёт инлайнов будет "не морочь голову, оно тебе не надо".

    А мозги свернуть - потому что вся borrow-концепция уникальна для раста и контринтуитивна, да ещё и вусмерть перепутана всё с тем же различием "ссылка/значение". Начиная с первого примера из учебника про строку - как только ты понимаешь, что можно скопировать строку, а взять ссылку/указатель все примеры резко начинают выглядеть бредовыми с плюсовой точки зрения. Так что я сильно сомневаюсь, что взятые из раста привычки приведут к чему-то осмысленному в плюсах.

     
     
  • 8.118, Ordu (ok), 10:45, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Это первые примеры из учебника Их задача не столько передать строку наилучшим о... текст свёрнут, показать
     
  • 7.114, Урри (?), 02:51, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Бро, прими мое искреннюю поддержку; ты не зря такую простыню наваял.

    Я более 20 лет плюсовик, я был плюсовиком еще тогда, когда это не было модным и когда большинство отечественных программеров о нем не слышали. Я прочитал (и понял) александреску от корки до корки.
    Но сейчас я в основном сишник и лиспер. Ибо в гробу я видел эти плюсы с их полным отсутствием философии языка, но кучей никому не нужных, кроме выеживающейся своим знанием 1000+1 пункта стандарта хипстоты, плюшек. Лучший код в продакшене - это либо базовый с++, либо (если структура проекта не сильно сложная) с.

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

     
  • 3.57, Аноним (57), 13:07, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    >"благодаря раст я понял насколько красив c++" (c)

    наоборот

     

  • 1.31, Аноним (31), 11:36, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Сколько нужно ждать, чтобы тест сработал? На Ubuntu 18.04 5.3.0-23-generic не воспроизводится. Написали бы какие дистрибутивы подвержены, то есть собираются GCC 9.
     
     
  • 2.45, iPony129412 (?), 12:20, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну это наверно с Ubuntu 19.10 надо пробовать. Только туда засадили gcc 9
     
  • 2.73, Аноним (73), 15:28, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На Арче срабатывает менее чем за секунду.
     

  • 1.46, Аноним (46), 12:25, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Надо было писать на джава
     
  • 1.63, Аноним (63), 14:19, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –4 +/
    Какой язык, какое ядро, такой и результат.
     
  • 1.65, Аноним (66), 14:28, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    IBM катит бочку на Google?
     
  • 1.68, EuPhobos (ok), 14:52, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Отродясь такого не бывало, и опять то же самое
     
  • 1.69, botman (ok), 14:52, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Где бы ещё найти такой дистрибутив с ядром 5.2 и выше, с gcc9/9.1/9.2, на которой собирают программы Go? Арчеводы только их и собирают? Ну так и пусть пожинают плоды. Стабильные дистрибутивы работают максимум на ядре 4.19 и gcc 8.3. Планируемый стабильный devuan 3 и тот будет не сильно впереди стабильного debian 10. Так чего хотят от ядра и gcc если сами тормозят развитие дистрибутивов? Пляшите, ядро 5.4 и gcc9 вышло, правда сырые, но релизы-то новые, а archlinux не может глючить - он ведь весь такой современный и безглючный, ведь во всём современном всегда числа в версиях больше.
     
     
  • 2.103, Archevod (?), 23:14, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А без упоминания "Арчеводы" никак... 5.3 пока. А ошибок в стабильных ядрах нет, главное верить.
     
  • 2.106, Archevod (?), 23:44, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • –2 +/
    стабильный devuan это сильно, да.
     

  • 1.70, Аноним (70), 14:55, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    обновил вчера ядро до 5.4 и два раза словил зависание графики
    причем баг старый оказался,но проявился почемуто только в новом ядре
    i915 0000:00:02.0: Resetting bcs0 for hang on rcs0, bcs0
     
     
  • 2.85, botman (ok), 18:11, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Ждите 5.4.13, потом обновляйте и тестируйте. У longterm вообще за сотню после второй точки легко переваливает, и ведь не просто так.
     
     
  • 3.93, EnemyOfDemocracy (?), 21:04, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Гендир красной шляпы сидит на ядре 2.6.100500
     
     
  • 4.105, Anonymoustus (ok), 23:17, 27/11/2019 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Гендир красной шляпы сидит на ядре 2.6.100500

    Уверен? Мне сообщали подпольщики, что на ядре 2.6.1488.

     
  • 2.115, Константин (??), 06:02, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    А можно подробнее, как это может быть связано?
    Начал ловить подобное начиная с какого-то 5.3.х на одроиде. Было бы конечно неплохо, если дело в этой ошибке и будет исправлено в следующих выпусках, но уверенности нет.
     
     
  • 3.116, Аноним (70), 08:09, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    видимо косяк в драйверах,но на ветке 5.3.... у меня не было таких подвисаний,хотя ошибка в логах посмотрел старых была и до этого...
    так что пока только откат... на 5.3.13

     
  • 2.121, eganru (?), 16:06, 28/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Я на прошлой неделе поставил 5.3.12 ядро для поддержки rx470 купленной в Китае - с amdgpu.dc=0 через hdmi вроде бы нормально.
    Как раз gcc9.1.0 собирал. Но у меня thuban - там нет AVX.
     

  • 1.89, vitalif (ok), 19:53, 27/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > с регистром AVX

    что такое регистр AVX? он один, что ли?

     
  • 1.108, erthink (ok), 00:43, 28/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Поправили уже несколько часов назад = https://lkml.org/lkml/2019/11/27/304
     
     
  • 2.127, x (?), 09:02, 29/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    а сломали тут
    https://github.com/torvalds/linux/commit/d9c9ce34ed5c892323cbf5b4f9a4c498e0363
     

  • 1.126, fox72 (?), 23:48, 28/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    "Тупыми, оказывается, бывают не только качки!". (Тот, который стрелял из веника) :-)
     
  • 1.129, Аноним (129), 12:20, 29/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Не только регистры AVX: https://github.com/golang/go/issues/35777#issuecomment-559182750

    (Что за bullshit: "Для сообщений данного типа требуется авторизация по картинке (см. ниже)"?)

     
     
  • 2.130, Andrey Mitrofanov_N0 (??), 12:23, 29/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > (Что за bullshit: "Для сообщений данного типа требуется авторизация по картинке (см.
    > ниже)"?)

    Ты не прошёл тест Тьюрнга -- форум всё понял про твой блшит.

     

  • 1.131, Аноним (131), 21:34, 29/11/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У меня Firefox периодически падал в случайных местах. Причину установить не получалось. Типичный ответ "кривые дополнения" - не прокатил, т.к. без дополнений тоже иногда вылетал. После прочтения данной новости решил попробовать откатится на более старое ядро. И знаете, вроде сработало - вылеты прекратились. Но пара дней не показатель, так что посмотрим как дальше будет работать.
     
     
  • 2.132, Аноним (132), 21:38, 30/11/2019 [^] [^^] [^^^] [ответить]  
  • +/
    У меня вылеты были из-за проблем у libvpx, на ютубе и так далее. Причём, не каждый раз. В новости упоминается, что это gcc9 слишком хорошо оптимизирует код, про шланг, которым собирается фф, никто ничего не говорил - может быть совпадение. Тем более, что никаких подробностей ты не предоставил.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру