1.93K subscribers
3.56K photos
136 videos
15 files
3.78K 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) набора правил, применяемых до применений статистического анализа, которые могут сократить круг потенциальных языков за счёт, например, обнаружения символов, уникальных для специфических языков.
Полезный совет, внимайте
Forwarded from Архонт щітпосту | #укртґ
Кстати, остался последний месяц 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.