LINUX.ORG.RU

Rust и типобезопасность

 ,


3

7

Решил я тут немного изучить Rust, чтобы не состариться, так и не вкусив плодов современной цивилизации.

Rust рекламируется как типобезопасный ЯП, и я подумал, что нужно это как-то проверить, увидеть, как говорится, своими глазами. На примере всяких диких, но вполне встречающихся конверсий типа из вещественного в целое. Тема важная, из-за подобных штук иногда ракеты падают, так что если ЯП заведомо типобезопасный, он должен такие ситуации корректно обрабатывать или бить по рукам, хотя бы в рантайме.

Почитав документацию:

The as keyword does safe casting

Набросал такой примерчик:

fn main() {
        let a: f64 = std::f64::MAX;  // данное значение просто пример "большого числа"
        let b = a as i64;
        println!("{}", b);
}

Вопросы:

1) С какой стати это вообще компилируется?

2) Да, f64 и i64 нужно одно и то же количество битов для хранения значения, ну и что?

3) Почему результат меняет знак?

Представьте, что какой-то тех. процесс идет, и определенный параметр нельзя изменять скачкообразно, иначе физически система (по крайней мере, один из компонентов) выйдет из строя (встанет в раскоряку, взорвется, выпустит токсичный газ, убивающий 100тыс. населения; нужное подчеркнуть). И вот значение в f64 положительное и увеличивается постепенно, с i64 все вроде в порядке (и тестирование проходит на тестовых значениях), и вдруг хренак! и уже -9223372036854775808

Как так?

★★★★★
Ответ на: комментарий от Kuzy

Почему бы не почитать что-нибудь про раст

Потому что чукча пейсатель, а не читатель :)

htower_ ★★
()
Ответ на: комментарий от seiken

и я таки нашел в Rust багу за полчаса

О которой написано в документации раста по типам? Ваууу..

Скорее похоже что ты

Решил я тут немного изучить Rust

И решил накинуть говница.

shpinog ★★★★
()
Ответ на: комментарий от bonta

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

Не надо называть то, что вы написали «Си-культурой». Это ровно наоборот.

  1. Кодировать типы в именах программных объектов (переменных, функций) - это жуткий моветон, в 90-х этот подход практиковался и даже один из вариантов (венгерская нотация) стал внутренним стандартом кодирования Microsoft причём как для кода на C, так и для кода на C++. Если вы работали в компании, где насаждаются подобные соглашения о монструозном именовании, то вам просто не повезло, а автор гайда по стилю кодирования, видимо, считает WinAPI венцом творения программистов :) Но в целом он осуждается, почитайте, например, Линуса Торвальдса или Джоэла Спольски. На текущий момент модно читать Макконнелла, Мартина, Фаулера и именовать программные объекты просто и разумно. Единственное, в разработке на C чаще тяготеют к змеиному стилю, тогда как в C++ чаще предпочитают верблюжий. Но даже это не догма.

  2. Если функция принимает большое количество параметров, обычно это говорит о плохом дизайне и спагетти-коде (и опять, привет, WinAPI). В хорошо спроектированной программе выполняется закон Деметры, low coupling и high cohesion.

  3. Идеи ООП и даже ФП вполне себе симпатично реализуются на C, хотя, конечно, многословнее на уровне реализации. В C++, конечно, сахарок белее.

northerner ★★★
()
Последнее исправление: northerner (всего исправлений: 1)
Ответ на: комментарий от northerner

Идеи ООП и даже ФП вполне себе симпатично реализуются на C, хотя, конечно, многословнее на уровне реализации.

С удовольствием бы посмотрел на действительно «симпатичные» реализации оного на чистом Си.

Пока же то, что доводилось видеть больше напоминало анекдот:

"Студент художественной академии много хвастался своим однокурсникам какая у него красивая девушка, вот прямо сошедшая с картины. В конце-концов он привел её на какое-то студенческое сборище, где все смогли её увидеть.

После того, как первый шок прошел, однокурсники стали высказывать этому студенту:

– Это на каких картинах ты такую красавицу видел? Рожа кривая, один глаз косой, половины зубов нет, вторая половина гнилая, волосы почти все повыпадали, одна рука короче, а на второй всего три пальца, груди нет, спина сколиозная, ноги колесом…

– Как, вам не нравятся картины Пикассо?!!!"

eao197 ★★★★★
()

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

Про переводе float в int грамотный программист использует функции типа round/trunc/ceil/floor с явно заданным поведением, а не приведение типов при котором можно потерять существенную часть данных.

gorilych ★★
()
Ответ на: комментарий от northerner

Идеи ООП и даже ФП вполне себе симпатично реализуются на C

В Си уже завезли приватные методы и лямбды?

RazrFalcon ★★★★★
()
Ответ на: комментарий от Virtuos86

ну тяжело привести аргументы хейтеру :) Да и вообще, действительно вкусовщина.

abcq ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.