История изменений
Исправление
vertexua,
(текущая версия)
:
Я думаю то, что Rust Book, компилятор Раста и Clippy учать программировать на Rust, и даже на С++ нормально. Ошибки компилятора или подсказки Clippy в большинстве случаев говорят «возможно вы имели ввиду…».
Тут конечно нужно уметь перенаправлять фрустрацию от того что «не компилируется».
Еще есть несколько других фич. Доработаность в многих внезапных мелочах, которые делают программирование приятнее.
Cargo очень удобен и прост. Crates - часто простые юникс-вейные библиотеки, которые обычно без проблем собираются.
Локальный вывод типов работает заглядывая в будущее, смотрит ниже по коду в другие строки. Тип переменной должен быть однозначным только в одном месте, и он распространится на другие места.
fn f() -> u32 { ... }
let mut x = None; // Уже тут понятно что это Option<u32>
if ... {
x = Some(f());
}
Еще мне нравится отход от концепции классов и что есть просто структуры и методы отдельно описываются как функции к ним. Например это еще заставляет именовать конструкторы, делать из них фабрики.
let x = Config::from_file("...");
Когда доходит до асинхронного кода, то там очень и очень много цепочек async/await вычислений трансформируется в машины состояний внутри. Futures сделаны совсем не так как везде, очень уникальный и производительный дизайн
Сложно так перечислить, просто по ходу встречаешь разные удобства и каждый раз понимаешь как все продумано
Исправление
vertexua,
:
Я думаю то, что Rust Book, компилятор Раста и Clippy учать программировать на Rust, и даже на С++ нормально. Ошибки компилятора или подсказки Clippy в большинстве случаев говорят «возможно вы имели ввиду…».
Тут конечно нужно уметь перенаправлять фрустрацию от того что «не компилируется».
Еще есть несколько других фич. Доработаность в многих внезапных мелочах, которые делают программирование приятнее.
Cargo очень удобен и прост. Crates - часто простые юникс-вейные библиотеки, которые обычно без проблем собираются.
Локальный вывод типов работает заглядывая в будущее, смотрит ниже по коду в другие строки. Тип переменной должен быть однозначным только в одном месте, и он распространится на другие места.
fn f() -> u32 { ... }
let mut x = None; // Уже тут понятно что это Option<u32>
if ... {
x = Some(f());
}
Еще мне нравится отход от концепции классов и что есть просто структуры и методы отдельно описываются как функции к ним. Например это еще заставляет именовать конструкторы, делать из них фабрики.
let x = Config::from_file("...");
Когда доходит до асинхронного кода, то там очень и очень много цепочек async/await вычислений трансформируется в машины состояний внутри.
Сложно так перечислить, просто по ходу встречаешь разные удобства и каждый раз понимаешь как все продумано
Исправление
vertexua,
:
Я думаю то, что Rust Book, компилятор Раста и Clippy учать программировать на Rust, и даже на С++ нормально. Ошибки компилятора или подсказки Clippy в большинстве случаев говорят «возможно вы имели ввиду…».
Тут конечно нужно уметь перенаправлять фрустрацию от того что «не компилируется».
Еще есть несколько других фич. Доработаность в многих внезапных мелочах, которые делают программирование приятнее.
Cargo очень удобен и прост. Crates - часто простые юникс-вейные библиотеки, которые обычно без проблем собираются.
Локальный вывод типов работает заглядывая в будущее, смотрит ниже по коду в другие строки. Тип переменной должен быть однозначным только в одном месте, и он распространится на другие места.
fn f() -> u32 { ... }
let mut x = None; // Уже тут понятно что это Option<u32>
if ... {
x = Some(f());
}
Еще мне нравится отход от концепции классов и что есть просто структуры и методы отдельно описываются как функции к ним. Например это еще заставляет именовать конструкторы, делать из них фабрики.
let x = Config::from_file("...");
Сложно так перечислить, просто по ходу встречаешь разные удобства и каждый раз понимаешь как все продумано
Исправление
vertexua,
:
Я думаю то, что Rust Book, компилятор Раста и Clippy учать программировать на С++ нормально. Ошибки компилятора или подсказки Clippy в большинстве случаев говорят «возможно вы имели ввиду…».
Тут конечно нужно уметь перенаправлять фрустрацию от того что «не компилируется».
Еще есть несколько других фич. Доработаность в многих внезапных мелочах, которые делают программирование приятнее.
Cargo очень удобен и прост. Crates - часто простые юникс-вейные библиотеки, которые обычно без проблем собираются.
Локальный вывод типов работает заглядывая в будущее, смотрит ниже по коду в другие строки. Тип переменной должен быть однозначным только в одном месте, и он распространится на другие места.
fn f() -> u32 { ... }
let mut x = None; // Уже тут понятно что это Option<u32>
if ... {
x = Some(f());
}
Еще мне нравится отход от концепции классов и что есть просто структуры и методы отдельно описываются как функции к ним. Например это еще заставляет именовать конструкторы, делать из них фабрики.
let x = Config::from_file("...");
Сложно так перечислить, просто по ходу встречаешь разные удобства и каждый раз понимаешь как все продумано
Исходная версия
vertexua,
:
Я думаю то, что Rust Book, компилятор Раста и Clippy учать программировать на С++ нормально. Ошибки компилятора или подсказки Clippy в большинстве случаев говорят «возможно вы имели ввиду…».
Тут конечно нужно уметь перенаправлять фрустрацию от того что «не компилируется».
Еще есть несколько других фич. Доработаность в многих внезапных мелочах, которые делают программирование приятнее.
Cargo очень удобен и прост. Crates - часто простые юникс-вейные библиотеки, которые обычно без проблем собираются.
Локальный вывод типов работает заглядывая в будущее, смотрит ниже по коду в другие строки. Тип переменной должен быть однозначным только в одном месте, и он распространится на другие места.
fn f() -> u32 { ... }
let mut x = None; // Уже тут понятно что это Option<u32>
if ... {
x = Some(f());
}
Еще мне нравится отход от концепции классов и что есть просто структуры и методы отдельно описываются как функции к ним. Например это еще заставляет именовать конструкторы, делать из них фабрики.
let x = Config::from_file("...");