URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 137671
[ Назад ]

Исходное сообщение
"Релиз набора компиляторов LLVM 21"

Отправлено opennews , 27-Авг-25 19:06 
После шести месяцев разработки представлен релиз проекта 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


Содержание

Сообщения в этом обсуждении
"Релиз набора компиляторов LLVM 21"
Отправлено Голдер и Рита , 27-Авг-25 19:06 
> (void)(void)1;

Кто, где и зачем так пишут?🤔😶‍🌫️


"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 19:41 
> Устранено неопределённое поведение при (void)(void)1;

Кто и зачем так пишут стандарты, что шаг вправо-влево приводит к UB?


"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 20:16 
>Кто

Тебе ФИО нужно?
>зачем

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


"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 28-Авг-25 08:41 
UB это проблемы созданные компиляторами, т. к. не смотря на явное указание архитектуры и процессора они ведут себя неадекватно, ссылаясь - в стандарте не описано поведение, но в стандарте все не описано т. к. нельзя охватить поведение для всех возможных текущих и будущих архитектур. потому и получается, что сдвиг 64 битного числа вправо на константу 32 на 64 битной машине с 64 битными регистрами приводит в компиляторе к UB, потому этот сдвиг при оптимизации О3 выкидывается.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 28-Авг-25 08:44 
выкинуть меньшее из зол, часть компиляторов просто обнуляют значение, т. к. приводят оба операнда к 32 битам

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 28-Авг-25 08:58 
не знаю выводят ли компиляторы сейчас предупреждение при компиляции с O3, что выкинули или доработали пользуясь UB, раньше таких сообщений не было.

"Релиз набора компиляторов LLVM 21"
Отправлено Anon62513512124 , 28-Авг-25 11:47 
Не очень понял в этом примере логику компилятора, почему он выкидывает эту операцию?
На первый взгляд звучит как очевидный баг оптимизации

"Релиз набора компиляторов LLVM 21"
Отправлено . , 09-Сен-25 09:15 
> потому и получается, что сдвиг 64 битного числа вправо на константу 32 на 64 битной машине с 64 битными регистрами приводит в компиляторе к UB, потому этот сдвиг при оптимизации О3 выкидывается.

я хочу подробности с кодом. или имеется ввиду знаковый сдвиг вправо? он кстати implemented defined (должно быть описано в реализации).


"Релиз набора компиляторов LLVM 21"
Отправлено A.Stahl , 27-Авг-25 20:36 
> (void)(void)1;

А что это значит? Я не могу распарсить это выражение.


"Релиз набора компиляторов LLVM 21"
Отправлено DasKolbass , 27-Авг-25 20:47 
В новости же сказано, что компилятор тоже не понимает для чего это, поэтому неопределённое поведение.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 21:24 
Это не так работает. UB - это "слишком сложно, непонятно что делать, нужны доп. сведения". А то что в новости - это "хз че это, Васян, фиг разберешься, давай напишем что UB, фиг кто разберется".

"Релиз набора компиляторов LLVM 21"
Отправлено neon1ks , 28-Авг-25 03:04 
Это же Си, могу предположить, что каким-то чудом может через макросы получиться такая конструкция.

"Релиз набора компиляторов LLVM 21"
Отправлено Соль земли2 , 28-Авг-25 10:44 
А ты уже погуглил? В github/gitlab поискал примеры? У ИИ спросил?

"Релиз набора компиляторов LLVM 21"
Отправлено Голдер и Рита , 27-Авг-25 19:09 
А вообще, замечательная новость, мы рады, что C/C++ не стоят на месте. 🥰😘🤗

"Релиз набора компиляторов LLVM 21"
Отправлено DasKolbass , 27-Авг-25 20:44 
Чему радоваться? Вот если бы это в нашей стране делали компиляторы и языки, то можно было порадоваться

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 23:52 
Так делают, 1С, Глагол, ДРАКОН вот только зачем они нужны остальному миру?

"Релиз набора компиляторов LLVM 21"
Отправлено Голдер и Рита , 28-Авг-25 07:02 
> ДРАКОН
> зачем они нужны остальному миру?

Медики, экономисты и бизнесу он нужен, они его юзают. Неплохой язык для не программистов.

https://link.springer.com/article/10.1007/s10209-022-00934-3


"Релиз набора компиляторов LLVM 21"
Отправлено Голдер и Рита , 28-Авг-25 07:05 
Так вот же, делают: https://gitflic.ru/project/alekseinedoria/trivil-0 😉

"Релиз набора компиляторов LLVM 21"
Отправлено DasKolbass , 28-Авг-25 23:18 
Да, спасибо, интересный проект. Надо всем поизучать

"Релиз набора компиляторов LLVM 21"
Отправлено Соль земли2 , 28-Авг-25 10:46 
Печально, что до сил пор пишут С и С++ вместе. Это разные языки и сходятся они чисто ситуативно.

"Релиз набора компиляторов LLVM 21"
Отправлено Смузихлеб забывший пароль , 31-Авг-25 10:29 
> auto [x, y, ...rest] = f();

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

Например:
// Объявляем "на коленке" ту самую функцию, что что-то возвращает
let f = () => [ 1, 2, 3, 5, "ololo" ]  

// Собсно, "В x будет записан первый элемент, в y - второй,
// а в rest - третий( весь остаток, но можно и конкретно третий )
// Только в жс это называется "деструктуризация" "

const [x, y, ...rest] = f();

// x = 1, y = 2, rest = [ 3, 5, "ololo" ]


"Релиз набора компиляторов LLVM 21"
Отправлено ista011 , 27-Авг-25 19:42 
В Clang 8 внедрили часть стандарта C++ касающуюся модулей. С тех пор уже 13 релизов никак не доделали эту поддержку. Зато бегут реализовывать ещё не одобренный C++26.

"Релиз набора компиляторов LLVM 21"
Отправлено 12yoexpert , 27-Авг-25 20:35 
майки модули высрали - пусть сами и реализуют

"Релиз набора компиляторов LLVM 21"
Отправлено ista011 , 27-Авг-25 21:17 
У них то в компиляторе как раз таки реализовано на 100%. А фича реально интересная и удобная. Насколько знаю GCC потихоньку идёт чтобы всё доделать, но там очень медленно. Про движение со стороны CLang не в курсе.

"Релиз набора компиляторов LLVM 21"
Отправлено DasKolbass , 27-Авг-25 21:33 
А чем интересная и удобная? Наоборот, это противоестесственно для C++, потому что он не является языком модульного программирования. Организация исходного текста в C++ - блочная, и C++ никогда не откажется от этого, а попытка совместить блочную и модульную архитектуру ведёт к усложнению и неразберихе.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 22:30 
Идея в том, чтобы избавиться от сишного наследия, которое уже плохо проявляет себя в крупных проектах. Опять же, время сборки ядра Линукса как пример, и все эти бесконечные header-only библиотеки. Быть может, через двадцать лет люди вовсе не будут знать, что такое хедеры. И это хорошо.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 22:50 
> Опять же, время сборки ядра Линукса как пример, и все эти бесконечные header-only библиотеки.

Э... А как же разделы для экспорта. Насколько я понимаю ничто не мешает делать то же самое использую модули. Модули - только сахар не решающие не одну проблему.


"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 22:59 
Это типа как в Паскале, да? Уже не первый раз встречаю такую штуку, когда кто то что то хейтит, а потом вдруг оказывается, что он не прав.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 23:40 
А разве Паскаль за модули хейтят? В первую очередь, за некраткость begin-end'ов.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 28-Авг-25 00:29 
> за некраткость begin-end'ов

И это проблема у сишников, которые пишут пятикаскадные семиэтажные шаблонные шаблонные идентификаторы длиною длиннее паскалевской программы?


"Релиз набора компиляторов LLVM 21"
Отправлено penetrator , 28-Авг-25 06:11 
он привел реальный аргумент и перманентную причину

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

разницу чувствуешь?


"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 28-Авг-25 20:50 
Было бы всё нормально с инструментом и руками, люди бы не стали изобретать паскалеподобный раст.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 29-Авг-25 20:28 
> через двадцать лет люди вовсе не будут знать, что такое хедер

Нормальные прогеры уже сегодня пишут на Ди и C# - никаких "хэдеров" ;P


"Релиз набора компиляторов LLVM 21"
Отправлено DasKolbass , 27-Авг-25 20:40 
"Разрешено не завершать файл с исходным кодом символом новой строки" -

А что, раньше было такое жёсткое требование? Зачем?


"Релиз набора компиляторов LLVM 21"
Отправлено _kp , 27-Авг-25 20:54 
Не жесткое требоване, но при опечатках в #inclue файлах можно было долго искать место с ошибкой, причем найти в весьма неожиданном файле.

"Релиз набора компиляторов LLVM 21"
Отправлено DasKolbass , 27-Авг-25 21:23 
Было бы лучше если бы компилятор после каждого include-включения сам добавлял перевод строки

"Релиз набора компиляторов LLVM 21"
Отправлено а , 28-Авг-25 07:09 
дак скорее всего так оно теперь и происходит

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 28-Авг-25 17:57 
а если мне не нужен этот \n, я просто хочу несколькими инклюдами слепить цельный идентификатор из нескольких частей, например?

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 30-Авг-25 21:11 
Ну значит перестанешь хотеть. А то с вашими хотелками мы договоримся до того, что надо детям разрешать поднимать с пола каку и тянуть в рот. Им же хочется! Прям как тебе.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 22:29 
Вот flex обычно сегфолтится, если в конце файла нет новой строки.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 28-Авг-25 00:30 
вся суть сишников в одной фразе :)

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 27-Авг-25 22:41 
Я нуб. Подскажите, куда копать, чтобы сделать код на gcc с extended asm и всякими другими расширениями совместимым с clang? Extended asm поддерживается? Мб есть какой-то заголовочный файл, где расширения gcc типа __attribute__((packed)) объявляются как какие-то константы. Нашел кстати недоработку в extended asm. Было бы прикольно, если бы можно было вставить сегментный регистр переменной в памяти. Полезно, когда у тебя стек не flat и следовательно есть разница, в каком регистре хранится указатель.

"Релиз набора компиляторов LLVM 21"
Отправлено анонимммм , 28-Авг-25 07:06 
Сгементный регистр же можно в памяти сохранить. Вариант mov такой точно есть.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 28-Авг-25 10:18 
> asm((std::string_view("nop")) ::: (std::string_view("memory")));

А что за оператор такой :::
Что-то новенькое?


"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 28-Авг-25 18:01 
Всё ближе к брейнфаку приближается. Без таблицы-дешифратора уже не поймёшь, что за набор символов в коде.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 29-Авг-25 03:56 
старенькое
двоеточиями выражения в ассемблерном блоке разделяются
если часть выражений опускается то можно писать слитно разделители
вне ассемблерных вставок это не используется нигде

"Релиз набора компиляторов LLVM 21"
Отправлено SKZ , 30-Авг-25 12:48 
Да это синтаксис ассемблерных вставок такой дебильный у gcc.

"Код":"выходные параметры":"входные параметры":"то, что этот код портит"


"Релиз набора компиляторов LLVM 21"
Отправлено zionist , 29-Авг-25 19:29 
Хороший проект. Желаю ему и дальше развиваться. Надеюсь, что со временем LLVM и Clang смогут стать основным тулчейном Linux и архаичный GNU toolchain канит в лету.

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 29-Авг-25 20:31 
А ты для LLVM пробовал написать простенький компилер?? Я - да. После этого в LLVM ни ногой!

"Релиз набора компиляторов LLVM 21"
Отправлено zionist , 29-Авг-25 23:32 
Куда же ты теперь ногой? На что переписал свой "простенький компилер"?

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 05-Сен-25 18:31 
"ни ногой" - наверно писал свой супер супер С++ и отстрелил себе одну ногу?

"Релиз набора компиляторов LLVM 21"
Отправлено Аноним , 29-Авг-25 20:32 
Вот Си - вроде бы примитивный язык, "высокоуровневый ассемблер"! Но попробуй научись всем "фичам" его "гнутого" варианта - офигеешь!