1.83K subscribers
3.3K photos
132 videos
15 files
3.58K links
Блог со звёздочкой.

Много репостов, немножко программирования.

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from XYZ
Twitter-аккаунт Crazy Optical Illusions посвящён, как видно по названию, самым невероятным оптическим иллюзиям.

Но все они объединены интересной особенностью, о которой мы предлагаем вам догадаться самостоятельно.
Луковые кольца в Burger King — туфта
#prog #rust #rustlib #amazingopensource

lingua-rs — библиотека для распознавания языка, на котором написан текст.

В отличие от аналогов, она даёт большую точность за счёт:
1) статистических моделей с n-gram-ами при n = 5, что позволяет достаточно надёжно классифицировать даже короткие фразы;
2) набора правил, применяемых до применений статистического анализа, которые могут сократить круг потенциальных языков за счёт, например, обнаружения символов, уникальных для специфических языков.
Полезный совет, внимайте
Кстати, остался последний месяц 2020. Предлагаю собрать аптечки, патроны и броню, потому что боссфайт уже близко

#записки
#prog

А я напоминаю, что в декабре начинается очередной Advent of code. Предлагаю поучаствовать.

Advent of Code is an Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like. People use them as a speed contest, interview prep, company training, university coursework, practice problems, or to challenge each other.

You don't need a computer science background to participate - just a little programming knowledge and some problem solving skills will get you pretty far. Nor do you need a fancy computer; every problem has a solution that completes in at most 15 seconds on ten-year-old hardware.
Блог* pinned «#prog А я напоминаю, что в декабре начинается очередной Advent of code. Предлагаю поучаствовать. Advent of Code is an Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language…»
Ты:
— Я смотрю диффы по merge request, и я бы хотел видеть файлы в порядке важности их изменений. Какой файл должен идти первым?

Gitlab:
— Cargo.lock
#prog #fuzzing (thanks @oleg_log)

Разновидность фаззера, который генерирует валидные JSON-файлы. Правда, как пишет сам автор, "jdam is still a very new tool so it hasn't uncovered any good bugs yet".
> а что произойдет если выстрелить в ногу?
> давай я тебе, а ты мне (два молодых C++ программиста)
Forwarded from мне не нравится реальность (вафель 🧇🍓)
Хочу подчеркнуть пару моментов из последнего TWIR:
allow using generic trait methods in const fn

Этот PR добавляет возможность использовать трейты в const fn!

Это часть реализации (ещё не принятого, ммм) RFC #2632, которое предлагает позволить такое:

impl const Add for MyInt {
fn add(self, other: Self) -> Self {
MyInt(self.0 + other.0)
}
}

и такое:

const fn triple_add<T: Add<Output=T>>(a: T, b: T, c: T) -> T {
a + b + c
}

Мне кажется что const требование на весь трейт слишком ограничивает, но впрочем другие варианты не лучше :(

В любом случае хорошо что работы в этом направлении ведутся.

allow Trait inheritance with cycles on associated types

Фиксит старое странное поведение, которое заставляло писать

trait Sub: Super<<Self as Sub>::Assoc> {
type Assoc;
}

вместо

trait Sub: Super<Self::Assoc> {
type Assoc;
}
#prog #rust #article

Статья о внутреннем устройстве BTreeMap из стандартной библиотеки Rust. Старая, вышла ещё до Rust 1.0, но она даёт хороший обзор принципиального устройства этой структуры данных вкупе с обзором различных трюков для локализации небезопасных операций. Эти трюки применяются и в современной реализации BTreeMap
#prog #rust #amazingopensource #article

Рантайм, позволяющий запускать легковесные процессы на WASM и изолировать их падения, а также ограничивать доступный процесcам API операционной системы. Обзорная статья прилагается.

А вы ещё спрашиваете, зачем WASM нужен.
#prog #rust #rustlib #parsing #amazingopensource

Жора Geoffroy Couprie aka Geal в очередной раз переписал nom. На раст. С раста.

Стоило ли оно того? Определённо.

Во-первых, парсер-комбинаторы теперь вместо impl Fn(...) -> ... возвращают impl FnMut(...) -> .... Функциональность от этого не пострадала, но теперь из них убрано лишнее ограничение. Да, это означает, что теперь можно очень легко написать stateful парсер. Смиритесь с этим.

Во-вторых, парсер теперь — это не что-то, реализующее FnMut(I) -> IResult<O, E>, а что-то реализующее nom::Parser. Помимо того, что это изменение поменяло ограничения на типы аргументов комбинаторов, оно позволяет теперь некоторые комбинаторы использовать не в качестве свободных функций, а в качестве методов этого трейта. Это сильно влияет на эргономику — теперь можно написать .map(...) прямо на парсере, а также набирать альтернативные варианты парсинга цепочкой .or(...) вместо того, чтобы передавать кортеж парсеров в alt. Разумеется, у трейта есть blanket impl для замыканий, так что все старые комбинаторы продолжат работать.

В-третьих, в nom теперь должно быть удобнее пользоваться ошибками. Ошибки из nom теперь реализуют std::error::Error, комбинатор Parser::into позволяет сделать новый парсер, который применяет From к результату и ошибке парсера, а к самим ошибкам можно прицепить контекст — к сожалению, на текущий момент это может быть только &'static str.

Я рассказал лишь о наиболее примечательных, на мой взгляд, изменениях в nom, остальное (вроде улучшенного парсинга на уровне битов и повышения качества документации) вы можете сами прочитать в changelog.
#prog

Кто такой Rockstar programmer? Очевидно, программист, пишущий на Rockstar.