После шести месяцев разработки представлен релиз проекта LLVM 21.1.0, развивающего инструментарий (компиляторы, оптимизаторы и генераторы кода), компилирующий программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован в машинный код для заданной целевой платформы или использован JIT-компилятором для формирования машинных инструкций непосредственно во время выполнения программы. На базе технологий LLVM проектом развивается компилятор Clang, поддерживающий языки программирования C, C++ и Objective-C. Начиная с ветки 18.x проект перешёл на новую схему формирования номеров версий, в соответствии с которой нулевой выпуск ("N.0") используется в процессе разработки, а первая стабильная версия снабжается номером "N.1"...Подробнее: https://www.opennet.me/opennews/art.shtml?num=63783
> (void)(void)1;Кто, где и зачем так пишут?🤔😶🌫️
> Устранено неопределённое поведение при (void)(void)1;Кто и зачем так пишут стандарты, что шаг вправо-влево приводит к UB?
>КтоТебе ФИО нужно?
>зачемНу потому что эти люди живут в реальности, где UB - это проблема программиста. Но с тех пор много воды утекло и мир живет в реальности, где UB - это проблема языка.
> Устранено неопределённое поведение при (void)(void)1;Кто и зачем так пишут стандарты, что шаг вправо-влево приводит к UB?
> (void)(void)1;А что это значит? Я не могу распарсить это выражение.
В новости же сказано, что компилятор тоже не понимает для чего это, поэтому неопределённое поведение.
Это не так работает. UB - это "слишком сложно, непонятно что делать, нужны доп. сведения". А то что в новости - это "хз че это, Васян, фиг разберешься, давай напишем что UB, фиг кто разберется".
А вообще, замечательная новость, мы рады, что C/C++ не стоят на месте. 🥰😘🤗
Чему радоваться? Вот если бы это в нашей стране делали компиляторы и языки, то можно было порадоваться
Так делают, 1С, Глагол, ДРАКОН вот только зачем они нужны остальному миру?
В Clang 8 внедрили часть стандарта C++ касающуюся модулей. С тех пор уже 13 релизов никак не доделали эту поддержку. Зато бегут реализовывать ещё не одобренный C++26.
майки модули высрали - пусть сами и реализуют
У них то в компиляторе как раз таки реализовано на 100%. А фича реально интересная и удобная. Насколько знаю GCC потихоньку идёт чтобы всё доделать, но там очень медленно. Про движение со стороны CLang не в курсе.
А чем интересная и удобная? Наоборот, это противоестесственно для C++, потому что он не является языком модульного программирования. Организация исходного текста в C++ - блочная, и C++ никогда не откажется от этого, а попытка совместить блочную и модульную архитектуру ведёт к усложнению и неразберихе.
Идея в том, чтобы избавиться от сишного наследия, которое уже плохо проявляет себя в крупных проектах. Опять же, время сборки ядра Линукса как пример, и все эти бесконечные header-only библиотеки. Быть может, через двадцать лет люди вовсе не будут знать, что такое хедеры. И это хорошо.
> Опять же, время сборки ядра Линукса как пример, и все эти бесконечные header-only библиотеки.Э... А как же разделы для экспорта. Насколько я понимаю ничто не мешает делать то же самое использую модули. Модули - только сахар не решающие не одну проблему.
Это типа как в Паскале, да? Уже не первый раз встречаю такую штуку, когда кто то что то хейтит, а потом вдруг оказывается, что он не прав.
А разве Паскаль за модули хейтят? В первую очередь, за некраткость begin-end'ов.
> за некраткость begin-end'овИ это проблема у сишников, которые пишут пятикаскадные семиэтажные шаблонные шаблонные идентификаторы длиною длиннее паскалевской программы?
"Разрешено не завершать файл с исходным кодом символом новой строки" -А что, раньше было такое жёсткое требование? Зачем?
Не жесткое требоване, но при опечатках в #inclue файлах можно было долго искать место с ошибкой, причем найти в весьма неожиданном файле.
Было бы лучше если бы компилятор после каждого include-включения сам добавлял перевод строки
Вот flex обычно сегфолтится, если в конце файла нет новой строки.
вся суть сишников в одной фразе :)
Я нуб. Подскажите, куда копать, чтобы сделать код на gcc с extended asm и всякими другими расширениями совместимым с clang? Extended asm поддерживается? Мб есть какой-то заголовочный файл, где расширения gcc типа __attribute__((packed)) объявляются как какие-то константы. Нашел кстати недоработку в extended asm. Было бы прикольно, если бы можно было вставить сегментный регистр переменной в памяти. Полезно, когда у тебя стек не flat и следовательно есть разница, в каком регистре хранится указатель.