Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
1637 вопросов по D на Stackoverflow начиная с 2008 года и 1841 вопрос по Rust
это из-за того, что в Rust'е постоянно менялся API, да и человеческой документации нет
там есть и пример использования enum'а в match.
Насчёт ошибок компилятора — вы извините, но ошибки от компилятора Rust по понятности даже близко не сравнить с ошибками от gcc, например
Как уже много раз говорилось, в стабильных версиях API серьёзно меняться не будет.
видятся разработчики Rust'а, которые будут в свой проект пихать любые возможности, что захотят. Если не ошибаюсь, в след. стабильной версии они хотят к существующему способу обработок ошибок (с try!() и Result<>), добавить еще и исключения. Т.е. сразу они не могли понять что им нужно, поэтому ничто не остановит их в будущем еще что-то поменять и превратить Rust в ту-же «legacy помойку» как и C++, где в оном ничего нельзя изменить из-за совместимости
#![feature(core)]
use std::num::FromPrimitive;
#[repr(u8)]
#[derive(FromPrimitive)]
enum Number {
One, Two, Three
}
fn main() {
match Number::One as u8 {
0 => {}
_ => {}
}
match Number::from_u8(0) {
Some(Number::One) => {},
_ => {}
}
}
Ну если я в C попытаюсь сравнить struct и int, то gcc мне так и напишет, что, мол, разные типы. А rustc мне писал (enum и u8) на пол страницы ошибок и я пол-часа вычитывал что-же он от меня хочет и как это исправить.
struct X;
fn main() {
match X {
10 => {}
}
}
test2.rs:5:9: 5:11 error: mismatched types:
expected `X`,
found `_`
(expected struct `X`,
found integral variable) [E0308]
test2.rs:5 10 => {}
^~
error: aborting due to previous error
Я также не знаю, где вы услышали про исключения — ничего подобного в планах нет и не предвидится.
Да, пока что FromPrimitive — нестабильный трейт (поэтому его нельзя использовать с бетой), ну так и язык пока ещё только в бете.
Можете поподробнее рассказать про match?
ToPrimitive, потому что он целиком и полностью заменяется кастом через as. FromPrimitive — да, его нестабильность пока что проблема.enum {
a = 1 << iota
b
c
}
enum {
a = iota * 3
b
c
}
Весьма распространено заблуждение о том, что Go — это замена C++, в каждом обсуждении Rust кто-нибудь такое говорит. Go — не язык для системного программирования, у них с C/C++ и Rust совершенно разные нишы.
A system programming language usually refers to a programming language used for system programming; such languages are designed for writing system software, which usually requires different development approaches when compared to application software.
System software is computer software designed to operate and control the computer hardware, and to provide a platform for running application software. System software includes software categories such as operating systems, utility software, device drivers, compilers, and linkers.
Собственно, проблема в терминологии здесь в том, что когда говорят «замена C++», подразумевают такой язык, который способен заменить C++ именно в тех областях, где ему пока нет конкурентов — в низкоуровневом программировании
Мой же поинт в том, что «драйвера» и по-настоящему «низкоуровневый код» — это достаточно узкая сфера и сводить к ней «нишу С++» не совсем корректно.
Релиз Rust 1.0 Beta