All streams
Search
Write a publication
Pull to refresh
68
0
Владимир @Googolplex

Software engineer

Send message
Автор ZeroMQ сейчас занимается разработкой nanomsg, которая, как я понимаю, есть «ZeroMQ done right». Вот здесь рассказывается об отличиях nanomsg и ZeroMQ.
Ой, сорри) не знаю, как так получилось)
Вот правильная: doc.rust-lang.org/std/finally/
Если это основной таск, то приложение закрывается.


Не основной, а последний. В Rust нет основных тасков как в Go, все треды равноправны.
Общее мнение насчёт abstract return types — они нужны, но пока можно потерпеть. Соответствующий RFC был закрыт с комментарием, что он нуждается в переработке. Скорее всего, после 1.0 к нему вернутся.
Такая возможность существует в виде методов на Result и Option. Кроме того, в коммьюнити языка одна из наиболее желаемых фич — это higher-kinded types, которые открывают дорогу, в том числе, к обобщённым монадам и обобщённым операторам для работы с ними, наподобие do-нотации хаскелля или for comprehensions скалы. К сожалению, в 1.0 этого не будет просто по причине нехватки времени.
Да, безусловно. Выше уже приводили пример. Соответствующий метод называется and_then():
div(932, 442).and_then(|r| scale(r))
Извините, совершенно непонятно, почему подобная новость заслуживает отдельной статьи. В Rust есть исключения в смысле stack unwinding — это макрос panic!(). Да, такие «исключения» нельзя ловить, но это трудно сделать кроссплатформенно и чревато небезопасностью работы с памятью, поэтому в Rust так делать нельзя.

RFC по вашей ссылке — это предложение добавить в язык удобный способ пропагации ошибок, похожий на исключения, но не несущий их проблем, потому что этот способ всегда можно переписать через match/return. Фактически, это синтаксический сахар. Он не подразумевает какое-то разворачивание стека и обработку, ничего того, чего нельзя сделать прямо сейчас.

Ну и если на то пошло, то этот конкретный RFC всего лишь отложили до после 1.0, потому что к 1.0 его просто не успели бы реализовать достаточно качественно. Как тут уже сказали, 1.0 — это не конец развития, а только его начало.
Как ни странно, finally в Rust есть. Только немного громоздкий.
Да ладно, та клавиатура ещё ничего. В X230 такая, и с ней более-менее нормально (хотя тачпад весьма уныл, да). А вот то, что у самых современных моделей вроде нового Carbon…
Обожаю свой X230, и хотелось бы что-то подобное купить и в будущем, когда придёт пора обновляться, но очень спорные решения по дизайну клавиатуры Lenovo уже сейчас заставляют тревожиться :( первый звонок был когда с клавиатур новых моделей вроде X240 пропала кнопка Insert. Но вышеприведённая Pono ссылка — это что-то вообще за гранью добра и зла. У меня по Caps Lock переключение раскладки, и что мне с этим пришлось бы делать на Carbon?
при мерже/ребейзе бекапит состояние и если что — легко откатывает

строго говоря, это стандартный функционал гита. git rebase --abort в середине процесса вернёт репозиторий в состояние до ребейза, например.
Спасибо за статью!

Не совсем корректно, имхо, называть трейты классами типов, потому что они всё-таки немного отличаются от функциональности классов типов из хаскеля. Хотя со временем различия размываются, да — скоро в трейты добавят (если уже не добавили, не помню) множественную диспетчеризацию и ассоциированные типы. В Rust очень сильно не хватает типов высшего порядка, поэтому многие вещи, нормальные для классов типов, через трейты невыразимы.

Трюк с None, к счастью, временный — с добавлением UFCS (хотя я не уверен, что его добавят до 1.0) нужда в нём отпадёт. Кстати, емнип, это
  let n: Option<T> = None;
  Float::mantissa_digits(n)

можно переписать как
  Float::mantissa_digits(None::<T>)
Как ни странно, это
impl<'a> Map<&'a str, Value> for InfoDict {
    fn find<'x>(&'x self, key: &&str) -> Option<&'x Value> {
        self.map.find_equiv(key)
    }
    fn contains_key<'x>(&'x self, key: &&str) -> bool {
        self.find(key).is_some()
    }
}

эквивалентно этому:
impl<'a> Map<&'a str, Value> for InfoDict {
    fn find(&self, key: &&str) -> Option<&Value> {
        self.map.find_equiv(key)
    }
    fn contains_key(&self, key: &&str) -> bool {
        self.find(key).is_some()
    }
}

благодаря lifetime elision :) как видите, от аннотаций почти ничего не осталось. Видимо, автор redis-rs не успел обновить код или проглядел этот кусок.
Билайн, Саратов. С пару часов назад всё работало, теперь гитхаб не открывается. Охренеть.
Обилие to_string() с большой долей вероятности свидетельствует о неидиоматичной для Rust архитектуре.

Обилие as_slice() — это известная проблема, но с недавнего времени вместо x.as_slice() можно писать x[]. А если as_slice() используется для вызова метода: x.as_slice().some_method(), то есть очень хорошие шансы, что в скором времени as_slice() не потребуется ни в каком виде: x.some_method().
K8 и прочее читается как «кей-8», насколько я понимаю.
Да, да да и да. Установите плагин для поддержки Vim, и это всё будет немедленно доступно. Я именно в таком режиме и пишу на скале в идее)
Да и в принципе любой тайловый менеджер подойдёт :) i3 там, или XMonad.
В принципе я с вами согласен, я просто опустил этот переход от интервала к отрезку, полагая его самим собой разумеющемся)
Неа, именно ровно столько же. Возьмите функцию y=arctg x. Это биекция между R и (-pi/2, pi/2), следовательно, отрезок и прямая равномощны, в том числе, в смысле «любой точке отрезка соответствует некоторая точка прямой, и наоборот».

Information

Rating
Does not participate
Location
Santa Clara, California, США
Date of birth
Registered
Activity