The OpenNET Project / Index page

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



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

Оглавление

Выпуск языка программирования Rust 1.45, opennews (??), 20-Июл-20, (0) [смотреть все]

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


64. "Выпуск языка программирования Rust 1.45"  –1 +/
Сообщение от Аноним (64), 20-Июл-20, 11:46 
Хахахахахаха, вот умора! Даже си компилятор при преобразовании из float в char выдает предупреждение, а "заточенный под безопасность" хваленый руст это пропускает что выливается в неопределённое поведение.
Ответить | Правка | Наверх | Cообщить модератору

68. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от YetAnotherOnanym (ok), 20-Июл-20, 11:54 
Спасибо хоть теперь поведение определённое (хоть и нелепое) и задокументированное.
Ответить | Правка | Наверх | Cообщить модератору

69. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Сишникemail (?), 20-Июл-20, 11:55 
Да у них там тысячи незакрытых ишью висят, много критикал багов, как они это разгребать будут, я хз.
Ответить | Правка | К родителю #64 | Наверх | Cообщить модератору

78. "Выпуск языка программирования Rust 1.45"  +7 +/
Сообщение от Аноним84701 (ok), 20-Июл-20, 12:04 
> Хахахахахаха, вот умора! Даже си компилятор при преобразовании из float в char выдает предупреждение

Ну давайте посмотрим. И раз:


cat hello2.c && clang -Wall -Wextra hello2.c && ./a.out
#include <stdio.h>
int main(void) {
        char x = (char)1.04E+17;
    printf("%c",x);
    return 0;
}
(%  

и два

% gcc -Wall -Wextra hello2.c&& ./a.out  
%

Ой?

И три

% cat hello.rs && rustc hello.rs                                                  
fn main() {
    let x:u8 = 1.04E+17;
    println!("Hello, world! {}",x);
}
error[E0308]: mismatched types
--> hello.rs:2:16
  |
2 |     let x:u8 = 1.04E+17;
  |           --   ^^^^^^^^ expected `u8`, found floating-point number
  |           |
  |           expected due to this

error: aborting due to previous error

% rustc --version                                                                
rustc 1.43.1


В общем, да, умора-умора. Особенно когда очередные "спецы" не различают между _явным и неявным_ приведением типов 🙄

ЗЫ:
собственно по теме "даже си компилятор":
ISO/IEC 9899:TC3
6.3.1.4
> When a finite value of real floating type is converted to an integer type other than _Bool,
> the fractional part is discarded (i.e., the value is truncated toward zero). If the value of
> the integral part cannot be represented by the integer type, the behavior is undefined.
>

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

112. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Аноним (112), 20-Июл-20, 13:17 
Дурачок, это два разных кода.

Аналог твоего сишного кода на расте выглядит так:
fn main() {
    let x:u8 = 1.04E+17 as u8;
    println!("Hello, world! {}",x);
}

И он выводит:
Hello, world! 255

Аналог твоего растоманского кода на си:
#include <stdio.h>
int main(void) {
        char x = 1.04E+17;
printf("%c",x);
return 0;
}

И он выводит:
<source>:3:18: warning: implicit conversion of out of range value from 'double' to 'char' is undefined [-Wliteral-conversion]

        char x = 1.04E+17;

             ~   ^~~~~~~~

1 warning generated.

Растоманы как всегда манипулируют быдлом, а те и рады.

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

115. "Выпуск языка программирования Rust 1.45"  +3 +/
Сообщение от Аноним84701 (ok), 20-Июл-20, 13:32 
> Дурачок, это два разных кода.

Умничка моя, эти "коды" соответствуют _твоему_ же сравнению "Даже си компилятор при преобразовании из float в char выдает предупреждение" с новостным "операция преобразования 'as' выполняет проверку на переполнение и ...". Конечно же это будут два разных кода :)

> Аналог твоего сишного кода на расте выглядит так:
> fn main() {
>     let x:u8 = 1.04E+17 as u8;
>     println!("Hello, world! {}",x);
> }

"Спец" ты мой анонимный -- это вот как раз и есть _явное преобразование_ "операцией 'as'".
Как в примере новости. Для того и был приведен аналог того ржавого кода (возможно тебя сбила с толку другая циферка? Так я не гордый, возьму ту из новости):

 
% cat hello2.c && gcc -Wall -Wextra hello2.c && ./a.out
#include <stdio.h>
int main(void) {
        char x = (char)300.0;
    printf("%x",x);
    return 0;
}
7f%
% clang -Wall -Wextra hello2.c &&  ./a.out
28%

Причем, результат в каждом компиляторе "свой", потому что тут это изначально UD.
> If the value of the integral part cannot be represented by the integer type, the behavior is undefined.

такие дела.

>>> Хахахахахаха, вот умора! Даже си компилятор при преобразовании из float в char выдает предупреждение
> Аналог твоего растоманского кода на си:

 #include <stdio.h>
int main(void) {
        char x = 1.04E+17;   <--- неявное преобразование

> И он выводит:
> <source>:3:18: warning: implicit conversion of out of range value from 'double' to
> 'char' is undefined [-Wliteral-conversion]
>>> Даже си компилятор при преобразовании из float в char выдает предупреждение

Кажется, до тебя начинает доходить :).
Теперь-то сможешь объяснить, зачем сравнивал попу-палец^W неявные преобразования в си с явными преобразованиями в ржавчине?

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

335. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Аноним (335), 21-Июл-20, 22:36 
Подъехал еще один иксперт. Объясни теперь ты разницу:

1. char x = (char)1.04E+17;
2. let x:u8 = 1.04E+17 as u8;

Скажи что эти два кода принципиально разные. Что си, что раст все сделали как сказал программист и скомпилили как надо. При неявном присвоении оба компилятора руганулись. О чем вы тут спорите?

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

336. "Выпуск языка программирования Rust 1.45"  +1 +/
Сообщение от Аноним84701 (ok), 21-Июл-20, 23:32 
> Подъехал еще один иксперт. Объясни теперь ты разницу:
> 1. char x = (char)1.04E+17;
> 2. let x:u8 = 1.04E+17 as u8;
> Скажи что эти два кода принципиально разные. Что си, что раст все делали как сказал программист и скомпилили как надо. При неявном присвоении оба компилятора руганулись. О чем вы тут спорите?

Ветку не читай, сразу требуй объяснений?

Дано:
>>> (новость) Устранена давняя недоработка при выполнении преобразований между целыми числами и числами с плавающей запятой.
>> (анон) Хахахахахаха, вот умора! Даже си компилятор при преобразовании из float в char выдает предупреждение

Теперь внимательно следи за руками:
char x = 1.04E+17;
> gcc 9  warning: overflow in conversion from 'double' to 'char' changes value

char x = (char)1.04E+17;   // первый пример
> компилится

let x:u8 = 1.04E+17;  //второй пример
rust 1.43.1 ("старая" версия)
  |           --   ^^^^^^^^ expected `u8`, found floating-point number

let x:u8 = 1.04E+17 as u8;
компилится.

Объясняю: " Хахахахахаха, вот умора!  Даже си комплятор при [неявном] преобразовании из float в char выдает предупреждение [а в ржавчине при явном не выдает]"


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

360. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Аноним (360), 26-Июл-20, 01:42 
>Даже си комплятор при [неявном] преобразовании из float в char выдает предупреждение [а в ржавчине при явном не выдает]

Ерунда какая-то. Выдавать предупреждение при неявном преобразовании полезно. При явном бесполезно, тебе ли не знать что делает сишка под капотом.

Вот тут переписывал код с сишки на шарп с преобразованиями uint8, long, unsigned long. Сишка все делала сама и молча, а тут шарп трахает мозг на каждый чих. Так что после шарпа, где все железно надо описывать, сишка уже не кажется такой уж "чистоплотной".

Как пример, unsigned long x = 0UL + LONG_MIN. Должен ли компилятор тут ругаться? Сишка не ругается, шарп ругается.

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

208. "Выпуск языка программирования Rust 1.45"  –3 +/
Сообщение от Аноним (205), 21-Июл-20, 01:07 
классический руст. то, что в с++ неопределённое поведение, в русте просто где-то задокументировано, значит определённое поведение. открою страшную тайну (страшную для фанатиков руста), это не последнее переполнение которое там есть.
Ответить | Правка | К родителю #64 | Наверх | Cообщить модератору

324. "Выпуск языка программирования Rust 1.45"  +1 +/
Сообщение от inferrna (ok), 21-Июл-20, 19:34 
Неопределённое поведение, это не то, что ты, дурак, считаешь неопределённым, из-за недостаточной образованности. Это поведение, выдающее на разных системах/флагах сборки и т.д. различный результат.
>это не последнее переполнение которое там есть

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

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

270. "Выпуск языка программирования Rust 1.45"  –1 +/
Сообщение от Ordu (ok), 21-Июл-20, 13:23 
> Хахахахахаха, вот умора! Даже си компилятор при преобразовании из float в char выдает предупреждение, а "заточенный под безопасность" хваленый руст это пропускает что выливается в неопределённое поведение.

Дитятко, если ты хочешь глумиться над растом, не выглядя идиотом, то тебе следует ржать над тем, что все эти годы преобразование было UB, хоть раст и трубил во все трубы о том, что в расте UB -- нини. Само по себе это не делает C лучше, чем rust -- в C это тоже UB, но C, по-крайней мере, не претендует на отсутствие UB. В некотором смысле rust был лучше, потому как он запрещал неявные преобразования, то есть нельзя было сделать преобразование типа и не заметить этого. Но это слабое утешение.

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

329. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Forth (ok), 21-Июл-20, 19:50 
Утешение воистину слабое.
У меня такое вылезло неожиданно, тесты в релизе обвалились, хотя в дебаге все было ОК.
Приведение f32 в u16 всегда давало 0 в релизе и при этом правильный результат для i16.
Ответить | Правка | Наверх | Cообщить модератору

333. "Выпуск языка программирования Rust 1.45"  +/
Сообщение от Ordu (ok), 21-Июл-20, 20:57 
> Утешение воистину слабое.
> У меня такое вылезло неожиданно, тесты в релизе обвалились, хотя в дебаге
> все было ОК.
> Приведение f32 в u16 всегда давало 0 в релизе и при этом
> правильный результат для i16.

Угу. UB во всей его красе.

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

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

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




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

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