All streams
Search
Write a publication
Pull to refresh
57
0
Max Frai @Ockonal

Developer

Send message
Подозреваю, что его связали и заставляют работать, но он обязательно успеет. :)
Они просто в какой-то момент поняли, что это неплохой пиар, который сам расходится по соц сетям. Поэтому продолжают.
Пробовали Rust?
Вы как-то обещали сделать пост и описать базовые вещи, которые должны быть в аптечке и их принципы работы. Уже сколько времени жду :(
Очень надеюсь, что у Мозиллы все будет хорошо, либо же кто-то из гигантов заметит язык и начнет использовать и вкладывать в него.
Через месяц буквально сложности с borrow checker'ом уходят вообще на второй план и даже не задумываешься. Жутко не хватает готовых библиотек, кусков кода. В документации иногда вообще непонятно, что делать с той или иной библиотекой.

После С++ это как глоток свежего воздуха в этой нише.
Спасибо, я уже наловчился со всеми мапперами ошибок. Главное найти грань, чтобы из трех строк кода не полчилось 30 :)
Да, спасибо, стоит уже на хоткее билда :)
В общем случае понятно. Раст заставляет вас пострадать, при написании кода, зато в результате получаем гарантию, что не придется дебажить потом непонятные вылеты и проблемы с памятью.
Формально прав, а практически этот объект не умрет сам по себе, верно?
Получается, без знания сигнатур функций и их возвращаемых значений нереально писать код, который будет компилироваться с первого раза.
По поводу первого вопроса чуть разверну:
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 обертками выглядело бы приятнее, так как все было бы унифицировано.

Information

Rating
Does not participate
Location
Украина
Registered
Activity