Очень надеюсь, что у Мозиллы все будет хорошо, либо же кто-то из гигантов заметит язык и начнет использовать и вкладывать в него.
Через месяц буквально сложности с borrow checker'ом уходят вообще на второй план и даже не задумываешься. Жутко не хватает готовых библиотек, кусков кода. В документации иногда вообще непонятно, что делать с той или иной библиотекой.
После С++ это как глоток свежего воздуха в этой нише.
Да, спасибо, стоит уже на хоткее билда :)
В общем случае понятно. Раст заставляет вас пострадать, при написании кода, зато в результате получаем гарантию, что не придется дебажить потом непонятные вылеты и проблемы с памятью.
Формально прав, а практически этот объект не умрет сам по себе, верно?
Получается, без знания сигнатур функций и их возвращаемых значений нереально писать код, который будет компилироваться с первого раза.
let parent = document.select(".bottom_info #pagination p").unwrap().nth(0).unwrap();
let firstBold = parent.as_node().select("b").unwrap().nth(1).unwrap();
let result = firstBold.as_node().as_text().unwrap().borrow().parse::<i32>();
Почему код выше работает, а если объединить в одну строчку:
let firstBold = parent.as_node().select("b").unwrap().nth(1).unwrap().as_node().as_text().unwrap().borrow().parse::<i32>();
Мне скоро нужно будет заняться одним очень масштабным мероприятием, где буду реализовывать систему электронных денег, оплаты, входа и и т.д. Хочу попробовать сделать бекенд на расте. Вот здесь его стабильность и строгая типизация может очень помочь от глупых ошибок. На librocket и смотрел :)
Спасибо, а вопрос по поводу цепочки вызовов?
Вот пока не совсем понимаю где можно использовать clone, где вот эти into. Даже в вашем примере, насколько правильно создавать копию игрока.
А так крутой язык, всем советую попробовать. Сначала казался бесполезным и не стоящим своего изучения.
Но вот если разработчики еще собираются работать над упрощением порога входа, то должно быть вообще круто.
Им бы еще поработать в направлении веба, чтобы было удобно писать бекенд. Понимаю, что это не ниша языка изначально, но сейчас, например, переписываю для своего сайта с аудиокнигами парсеры на Rust, все это мультипоточно в виде демона, было бы удобно использовать одни и те же структуры парсеров и бекенда сайта.
Это поможет, если оборачиваемые методы возвращают одну и ту же сигнатуру Result, оно потом пробрасывается вверх. А в случае как на моем примере, там тип Err отличается.
Пытаюсь сейчас зайти на него после с++. Необычно, но нравится.
Кстати есть вопрос. Допустим у меня происходит парсинг html-кода, который должен вернуть какое-то число.
fn parse_page_count(document : kuchiki::NodeRef) -> i32
{
let parent = document.select(".bottom_info #pagination p").unwrap().nth(0).unwrap();
let firstBold = parent.as_node().select("b").unwrap().nth(1).unwrap();
let result = firstBold.as_node().as_text().unwrap().borrow().parse::<i32>();
match result
{
Err(_) => panic!("Failed to parse page count"),
Ok(pagesCount) => pagesCount
}
}
Как вообще правильно и принято в Rust оборачивать все это в проверкии и возвращение ошибки? Как использовать оператор "?" вместо кучи unwrap? Какой возвращаемый тип должен быть у функции (понимаю, что Result, но как объединить для всего).
Еще местами не понятны, когда в цепочке вызовов как выше компилятор бросается ошибкой, что переменная уже borrowed, поэтому приходится создавать временную переменную и использовать ее дальше в цепочке. Неясно почему компилятор сам не может этого сделать/понять. В общем после обычных языков первое время очень долго думаешь :)
Если решусь, напишу еще пару статеек о том, как написать бота на Java с использованием LongPoll-сервера VK (для личных страниц) и с использованием Callback API и web-сервлетов (для сообществ).
Надеюсь, они умрут скоро. Сидели жирной жопой на стуле, торговали базой, набирали в штат кого попало. Как только пришел убер, хопин, яндекс, сраз начали шевелиться, но поздно уже.
Сразу приходит в голову удивительная возможность перевести все книги в аудиоформат.
В принципе, когда слушаешь книги на протяжении нескольких лет, актерство и качество записи уже уходит на второй план, привыкаешь к этому. Так что безэмоциональность не особо повлияет на восприятие текста.
Есть координаты любых тел. Можно отбросить глубину и взять только x, y (если сверху смотреть). Потом делается масштаб и рисуются обычные спрайты кружочки или чего там еще.
Не знал, что можно отследить phantomjs из сайта, спасибо.
Сам привык пользоваться связкой python + selenium (phantomjs). Все таки на питон много модулей и много готовых кусков кода. Хотя очень часто встречаются конструкции, где просто вызывается execute_script с javascript-кодом, который нужно выполнить на странице. В случае с nodejs обертками выглядело бы приятнее, так как все было бы унифицировано.
Через месяц буквально сложности с borrow checker'ом уходят вообще на второй план и даже не задумываешься. Жутко не хватает готовых библиотек, кусков кода. В документации иногда вообще непонятно, что делать с той или иной библиотекой.
После С++ это как глоток свежего воздуха в этой нише.
В общем случае понятно. Раст заставляет вас пострадать, при написании кода, зато в результате получаем гарантию, что не придется дебажить потом непонятные вылеты и проблемы с памятью.
Получается, без знания сигнатур функций и их возвращаемых значений нереально писать код, который будет компилироваться с первого раза.
Почему код выше работает, а если объединить в одну строчку:
То матерится вот так
Вот пока не совсем понимаю где можно использовать clone, где вот эти into. Даже в вашем примере, насколько правильно создавать копию игрока.
А так крутой язык, всем советую попробовать. Сначала казался бесполезным и не стоящим своего изучения.
Но вот если разработчики еще собираются работать над упрощением порога входа, то должно быть вообще круто.
Им бы еще поработать в направлении веба, чтобы было удобно писать бекенд. Понимаю, что это не ниша языка изначально, но сейчас, например, переписываю для своего сайта с аудиокнигами парсеры на Rust, все это мультипоточно в виде демона, было бы удобно использовать одни и те же структуры парсеров и бекенда сайта.
Кстати есть вопрос. Допустим у меня происходит парсинг html-кода, который должен вернуть какое-то число.
Как вообще правильно и принято в Rust оборачивать все это в проверкии и возвращение ошибки? Как использовать оператор "?" вместо кучи unwrap? Какой возвращаемый тип должен быть у функции (понимаю, что Result, но как объединить для всего).
Еще местами не понятны, когда в цепочке вызовов как выше компилятор бросается ошибкой, что переменная уже borrowed, поэтому приходится создавать временную переменную и использовать ее дальше в цепочке. Неясно почему компилятор сам не может этого сделать/понять. В общем после обычных языков первое время очень долго думаешь :)
Для каких целей это может быть полезно?
В принципе, когда слушаешь книги на протяжении нескольких лет, актерство и качество записи уже уходит на второй план, привыкаешь к этому. Так что безэмоциональность не особо повлияет на восприятие текста.
Сам привык пользоваться связкой python + selenium (phantomjs). Все таки на питон много модулей и много готовых кусков кода. Хотя очень часто встречаются конструкции, где просто вызывается execute_script с javascript-кодом, который нужно выполнить на странице. В случае с nodejs обертками выглядело бы приятнее, так как все было бы унифицировано.