История изменений
Исправление byko3y, (текущая версия) :
Угадай, для чего этот код.
Плохо знаком с синтаксисом раста и стандартной либой. Это какие-то функции сравнения двух контейнеров и значений в этих двух контейнерах.
Основная беда раста, на мой взгляд - это что разрабы зассали делать полный вывод типов, то есть, на уровне аргументов функций и за ее пределами. Вообще, типы раста, вроде этого «Rc<RefCell<T>>», как бы намекают нам, что разраб должен видеть их только раз в жизни. Как я понимаю, разрабы руководствовались тем, что современные макаки по определению типов в функции судят о назначении этой функции. Хотя я не уверен, что это было серьезным фактором. Я вообще не могу понять, почему в расте не сделали полноценный type inference. Хочешь писать явные типы? Пиши, но меня не заставляй. Согласитесь, ведь выглядит же намного лучше:
fn a_call<T>(lhs: &T, rhs: &T) {
lhs as *const T == rhs as *const T
}
fn b_call(lhs, rhs) {
is_same(&*lhs.borrow(), &*rhs.borrow())
}
Исходная версия byko3y, :
Угадай, для чего этот код.
Плохо знаком с синтаксисом раста и стандартной либой. Это какие-то функции сравнения двух контейнеров и значений в этих двух контейнерах.
Основная беда раста, на мой взгляд - это что разрабы зассали делать полный вывод типов, то есть, на уровне аргументов функций и за ее пределами. Вообще, типы раста, вроде этого «Rc<RefCell<T>>», как бы намекают нам, что разраб должен видеть их только раз в жизни. Как я понимаю, разрабы руководствовались тем, что современные макаки по определению типов в функции судят о назначении этой функции. Хотя я не уверен, что это было серьезным фактором. Я вообще не могу понять, почему в расте не сделали полноценный type inference. Хочешь писать явные типы? Пиши, но меня не заставляй. Согласитесь, ведь выглядит же намного лучше:
fn a_call<T>(lhs: &T, rhs: &T) {
lhs as *const T == rhs as *const T
}
fn b_call<T: SomeTrait>(lhs, rhs) {
is_same(&*lhs.borrow(), &*rhs.borrow())
}