The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Разработчики Chrome экспериментируют с языком Rust, opennews (??), 20-Авг-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


113. "Разработчики Chrome экспериментируют с языком Rust"  –1 +/
Сообщение от Аноним (113), 21-Авг-20, 12:31 
Компиляторы и библиотеки сами генерят UB.
Например UB компиляторов: нельзя сдвигать на число большее разрядности сдвигаемого. Казалось бы просто при компиляции явно указываешь процессор. Процессор поддерживает такой сдвиг. А компилятор для этого процессора генерит UB.
Rust конечно спасает от всего: на краю обрыва ставят табличку unsafe, вместо того чтобы сделать ограждение, но ограждение это дорого, а табличка бесплатно и безопасно.
Ответить | Правка | К родителю #59 | Наверх | Cообщить модератору

118. "Разработчики Chrome экспериментируют с языком Rust"  –1 +/
Сообщение от Ordu (ok), 21-Авг-20, 16:17 
> Казалось бы просто при компиляции явно указываешь процессор.

Не, это лишь "казалось бы". Если хочется кардинально решать ситуацию, надо компилятору давать конфиг, указывая там какие именно flavor'ы операций тебе нужны. Скажем, чтобы сдвиг слишком далеко заполнял бы всё нулями. А чтобы операция + на целых выполнялась бы с насыщением. То есть конфиг, который позволяет все UB превратить в DB (в Defined Behaviour).

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

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

> Rust конечно спасает от всего: на краю обрыва ставят табличку unsafe

Разве? Можно хоть один пример? Все эти неопределённости с арифметическими операциями в rust'е снимаются жёстким определением какого-то определённого поведения, а если тебе нужны альтернативы, то вместо + ты можешь использовать saturating_add, или что-нибудь в этом стиле. Никакой unsafe не нужен. Впрочем, я с удовольствием полюбуюсь на пример, где UB решается unsafe'ом.

Ответить | Правка | Наверх | Cообщить модератору

132. "Разработчики Chrome экспериментируют с языком Rust"  +/
Сообщение от Me (??), 22-Авг-20, 09:50 
Сейчас кросскомпиляторное и кроспроцессорное поведение разруливается через портянки условной компиляции и ассеблерные ставки. Если этого не делать, то в одном из компиляторов или в том же самом компиляторе с другими процессорами словим UB. +3 процента производительности после оптимизации и вероятность 90% словить UB на новой архитектуре.
Ответить | Правка | Наверх | Cообщить модератору

135. "Разработчики Chrome экспериментируют с языком Rust"  +/
Сообщение от Ordu (ok), 22-Авг-20, 10:54 
> Сейчас кросскомпиляторное и кроспроцессорное поведение разруливается через портянки условной компиляции и ассеблерные ставки.

Можно какой-нибудь современный пример? Я знаю, что оно так разруливалось в 80-х, в 90-х. Но как-то в современном коде я не замечал подобного. Ассемблерные вставки используются не для обхода UB, а для производительности (чтобы сделать лучше компилятора) или для доступа к каким-нибудь возможностям процессора, к которым компилятор не даёт доступа (в ядре такое бывает регулярно).

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

> вероятность 90% словить UB на новой архитектуре.

Ты точно не путаешь UB и баги компилятора? Код без UB на любой архитектуре без UB.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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