Forwarded from There will be no singularity
MASKING POLICY in PostgreSql:
https://www.postgresql.org/about/news/postgresql-anonymizer-10-privacy-by-design-for-postgres-2452/
https://www.postgresql.org/about/news/postgresql-anonymizer-10-privacy-by-design-for-postgres-2452/
PostgreSQL News
PostgreSQL Anonymizer 1.0: Privacy By Design For Postgres
Limoges, France, May 17th, 2022 `PostgreSQL Anonymizer` is an extension that hides or replaces personally identifiable information (PII) or commercially …
👍1
#prog #rust #rustlib
Impl-tools: beyond derive
Библиотека для уменьшения бойлерплейта при написании реализаций трейтов.
Impl-tools: beyond derive
Библиотека для уменьшения бойлерплейта при написании реализаций трейтов.
#[impl_tools::impl_default(Option::None)]
pub enum Option<T> {
None,
Some(T),
}
#[impl_tools::autoimpl(Deref, DerefMut using self.animal)]
struct Named<A> {
name: String,
animal: A,
}
#[autoimpl(Clone, Debug, Default where T: trait)]
struct Wrapper<T>(T);
👍4💩1
😒🤚 Читать статьи Амоса, чтобы лучше знать Rust
😒🤚 Читать статьи Амоса, чтобы лучше ругать Go
😏👉 Читать статьи Амоса, чтобы расширять словарный запас
😒🤚 Читать статьи Амоса, чтобы лучше ругать Go
😏👉 Читать статьи Амоса, чтобы расширять словарный запас
🥰5👍2🤮1
<илья as Человек>
Я НАШЁЛ Я НАШЁЛ ТУ САМУЮ СТАТЬЮ ГДЕ ПОКАЗЫВАЕТСЯ ПЛОХАЯ СТОРОНАЯ ГО И СРАВНИВАЕТСЯ С РАСТОМ https://fasterthanli.me/articles/i-want-off-mr-golangs-wild-ride
fasterthanli.me
Lies we tell ourselves to keep using Golang
In the two years since I've posted I want off Mr Golang's Wild Ride, it's made the rounds time and time again, on Reddit, on Lobste.rs, on HackerNews, and elsewhere. And every time, it elicits the ...
👍2
Почему программисты, использующие динамически типизированные ЯП, не смотрят в сторону статически типизированных? Потому что статическая типизация нарезает круги вокруг динамической, и у тех, кто пытается следить за первым, начинает кружиться голова
🤔16🤮2👍1
Forwarded from Life of Tau
#prog #rust
Хозяйке на заметку
Иногда таки возникает такая задача: взять мутабельные ссылки на два элемента слайса. В лоб написать
Первый — обойтись исключительно safe-кодом. В этом случае мы разделяем слайс по индексам и вынимаем ссылки на концы сегментов. Вот один из способов, как это можно сделать:
Другой путь — это использовать немного unsafe, чтобы обойти ограничения borrow checker-а:
Во-первых, мы используем обычный функционал индексирования для того, чтобы получить ссылки на элементы, поэтому индексы проверяются и функция паникует, если какой-то из них окажется за пределами слайса.
Во-вторых, мы явно проверяем при помощи
В-третьих, не смотря на то, что мы образуем ссылку из сырого указателя, благодаря lifetime elision время жизни этой ссылки будет такое же, как и у входной ссылки на слайс. Иными словами, мы не делаем ссылки более долгоживущими, чем надо.
Можете использовать этот код без ограничений.
Хозяйке на заметку
Иногда таки возникает такая задача: взять мутабельные ссылки на два элемента слайса. В лоб написать
let (x, y) = (&mut arr[i], &mut arr[j]);
не получится — borrow checker не даст. И тут есть два пути.Первый — обойтись исключительно safe-кодом. В этом случае мы разделяем слайс по индексам и вынимаем ссылки на концы сегментов. Вот один из способов, как это можно сделать:
fn get_two_mut<T>(
arr: &mut [T],
idx1: usize,
idx2: usize,
) -> (&mut T, &mut T) {
let (ifirst, isecond) = (
idx1.min(idx2),
idx1.max(idx2),
);
let (first, last) = match &mut arr[ifirst..=isecond] {
[first, .., last] => (first, last),
_ => panic!("overlapping indices"),
};
if ifirst == idx1 {
(first, last)
} else {
(last, first)
}
}
Это рабочее решение, но тут многовато операций, да и перестановка ссылок в соответствие с индексами выглядит некрасиво.Другой путь — это использовать немного unsafe, чтобы обойти ограничения borrow checker-а:
fn get_two_mut<T>(
arr: &mut [T],
idx1: usize,
idx2: usize)
-> (&mut T, &mut T) {
assert_ne!(idx1, idx2);
let a: *mut T = &mut arr[idx1];
let b: *mut T = &mut arr[idx2];
unsafe { (&mut *a, &mut *b) }
}
Что же делает эту реализацию sound?Во-первых, мы используем обычный функционал индексирования для того, чтобы получить ссылки на элементы, поэтому индексы проверяются и функция паникует, если какой-то из них окажется за пределами слайса.
Во-вторых, мы явно проверяем при помощи
assert_ne!
, что индексы не равны, поэтому возвращаемые ссылки заведомо не указывают на одну и ту же область памяти.В-третьих, не смотря на то, что мы образуем ссылку из сырого указателя, благодаря lifetime elision время жизни этой ссылки будет такое же, как и у входной ссылки на слайс. Иными словами, мы не делаем ссылки более долгоживущими, чем надо.
Можете использовать этот код без ограничений.
Telegram
Блог*
#prog #rust #моё
В Rust в некоторых случаях можно использовать анонимный лайфтайм ('_). Практика показывает, что эта фича некоторым не до конца понятна, поэтому я решил написать об этом подробнее.
Времена жизни — пожалуй, именно та фича, которая больше…
В Rust в некоторых случаях можно использовать анонимный лайфтайм ('_). Практика показывает, что эта фича некоторым не до конца понятна, поэтому я решил написать об этом подробнее.
Времена жизни — пожалуй, именно та фича, которая больше…
👍7
Forwarded from Блог погромиста
В рот мне декоратор! Сегодня мне написали товарищи с Хабра - я, оказывается, победил в технотексте-2021 со своей статьёй про собеседование в Яндекс 🤷♂ И пока я жду грузовики, наполненные доверху бабосами (хотя, кажется, подарят всё-таки просто толстовку), продолжаю писать новую статью. Писать статьи сложно, и, к сожалению, идей у меня значительно больше, чем сил для их написания. Ну штош... Дорогу осилит идущий.
https://habr.com/ru/post/550088/
https://habr.com/ru/post/550088/
👍3