es
Feedback
Блог*

Блог*

Ir al canal en Telegram

Блог со звёздочкой. Много репостов, немножко программирования. Небольшое прикольное комьюнити: @decltype_chat_ptr_t Автор: @insert_reference_here

Mostrar más
1 923
Suscriptores
+124 horas
-17 días
-730 días
Archivo de publicaciones
Repost from N/a
photo content

photo content
+1

💅

#meme #politota Но вообще требования Путина этим не ограничивались.

Repost from N/a
photo content

photo content

▪️Стабилизирована пачка штук в std. Некоторые из них: 🔸num::NonZero<T>. Именно, теперь это один тип, а не 12! Старые имена вроде NonZeroU8 всё ещё доступны, но теперь являются просто алиасами на NonZero с соответствующим типовым параметром. Это изменение теперь позволяет с лёгкостью записывать ненулевые варианты чисел, которые сами определённы через алиасы — такие, как, например, множество типов из libc. 🔸<[T]>::split_at{, _mut}_unchecked — unsafe вариант split_at без проверки границ. Честно, я не понимаю, почему это добавили только сейчас. 🔸path::absolute возвращает каноничную версию пути без реального обращения к файловой системе. Как следствие, она не следует по символическим ссылкам и может вернуть несуществующий путь. 🔸<[u8]>::utf8_chunks — итератор, возвращающий валидные в UTF-8 куски набор байт. Конкретно этот итератор возвращает Utf8Chunk, позволяющий извлечь валидную и невалидную части (последняя — длиной не более трёх байт). Это позволяет, помимо всего прочего, сделать аналог String::from_utf8_lossy, который будет иначе обрабатывать невалидные UTF-8 последовательности. 🔸Методы len и is_empty на сырых указателях на слайсы (включая NonNull<[T]>) 🔸Метод is_aligned на сырых указателях (включая NonNull) 🔸Методы unchecked_{add, sub, mul} Также некоторые функции теперь можно вызвать в const-контексте, включая геттеры Location.

#prog #rust #rustreleasenotes Вышла версия Rust 1.79.0! Как обычно, тут только избранные моменты, остальное в полных заметках. ▪️Стабилизированы inline const блоки! Одно из самых непосредственно полезных применений — array repeat expression. Если раньше приходилось писать что-то в духе:
const EMPTY: Option<Vec<u8>> = None;
let foo = [EMPTY; 100];
, то теперь можно писать просто
let foo = [const { None }; 100];
(конечно, при условии, что вывод типов поймёт конкретный тип Option внутри массива). Более того, в обобщённых контекстах это тоже работает:
fn create_none_array<T, const N: usize>() -> [Option<T>; N] {
    [const { None::<T> }; N]
}
Ещё одно полезное применение — статические ассерты. Вместо того, чтобы выписывать _-константы, можно просто окружить ассерт const {}:
fn broken() {
    const { assert!(2 + 2 == 5) } // ошибка компиляции
}
Это тоже работает в обобщённых контекстах, но по очевидным причинам при зависимости от обобщённых параметров может выстрелить только при мономорфизации:
use std::mem::size_of;

const fn foo<T>() -> usize {
    const { assert!(size_of::<T>() > 1) }
    size_of::<T>() - 1
}

fn main() {
    _ = foo::<i32>();
    _ = foo::<u8>(); // ошибка компиляции
}
К сожалению, сейчас у этой фичи есть ограничения. Именно, const-блоки можно использовать только в выражениях, но нельзя, в отличие от обычных констант, использовать их в паттернах (на это сейчас есть отдельная фича). Так что следующий код, к сожалению, пока что требует nightly (и #![feature(inline_const_pat)]):
enum Enum {
    Foo,
    Bar,
    Baz,
}

impl Enum {
    fn from_usize(n: usize) -> Result<Self, usize> {
        use Enum::{Foo, Bar, Baz};

        Ok(match n {
            const { Foo as _ } => Foo,
            const { Bar as _ } => Bar,
            const { Baz as _ } => Baz,
            _ => return Err(n),
        })
    }
}
Ещё одна особенность — если const-блок находится в статически недостижимом коде, то он может быть не вычислен и, соответственно, не вызвать ошибку компиляции на ошибочной константе. ▪️Теперь можно писать ограничения на ассоциированный тип прямо в баундах: T: Trait<Assoc: Bounds...>. В stabilization report рассказывается более подробно, чем это полезно. Одно из применений — возможность указывать ограничения на ассоциированных типах на неназываемых impl Trait типах. ▪️Продление времени жизни ссылок на временные значения теперь работает и при возврате из if и match. Этот код компилируется сейчас и не компилировался раньше:
let a = String::from("a");
let _ = if true { &a } else { &String::from("b") };
let _ = match () {
    () => &String::from("c"),
};
▪️main теперь может быть реэкспортом, а не определена непосредственно в корне иерархии:
mod foo {
    pub(crate) fn bar() {}
}
use foo::bar as main;
Так можно использовать и функцию из другого крейта. ▪️Команды cargo теперь по умолчанию учитывают MSRV (minimal supported Rust version) при выборе версий зависимостей. ▪️rustdoc теперь показывает имена в результатах поиска один раз, даже если они доступны по нескольким путям из-за реэкспортов. ▪️У трейта Clone есть метод clone_from с сигнатурой fn(&mut self, source: &Self), который позволяет перезаписать содержимое self напрямую вместо того, чтобы замещать self полностью свежей копией. Однако это только возможность, и большинство типов используют реализацию по умолчанию: *self = source.clone(). Более того, для некоторых типов переопределение этого метода может иметь наблюдаемое изменение поведения по сравнению с реализацией по умолчанию, даже если clone_from не имеет намеренно отличную семантику. По этой причине std теперь документирует переопределённый метод clone_from на коллекциях.

Repost from Horny Mementi
photo content

photo content

😒🤚 Топ 😏👉 Кроп-топ

#prog #article Fun with IP address parsing Адреса IPv4 гораздо более странные, чем многие думают

#prog #rust #csharp Компилятор достиг состояния, когда он в состоянии скомпилировать guessing game. old.reddit.com/r/rust/comments/1db8vmg/media_the_rust_to_net_compiler_backend_can_now/

#prog (#suckassstory?) Костыли Linux из-за "просто текста" в /proc. Link (самая ранняя версия с этой проверкой)
#prog (#suckassstory?) Костыли Linux из-за "просто текста" в /proc. Link (самая ранняя версия с этой проверкой)

Repost from Jem

BTW в аттестате у меня одни пятёрки. Не то чтобы мне это сильно помогло, на самом деле...

А это мои любимые шутки про отличную учёбу. Вот я совершил такую ошибку: беспроблемно учился на "пятёрки" по шестой класс. А
+1
А это мои любимые шутки про отличную учёбу. Вот я совершил такую ошибку: беспроблемно учился на "пятёрки" по шестой класс. А потом стало сложно, да и надоело. Но имидж уже устаканился - как в школе, так и в семье. В итоге снижение успеваемости было воспринято как катастрофа. В том числе и с моей стороны: с одной стороны, я был рад перестать гоняться за оценками, с другой - мне долго за это было стыдно. Интересно, насколько человек реально способен учиться в старших классах на настоящие, не "натянутые" отлично? Ну типа одинаково хорошо шарить в алгебре, истории, иностранном, химии, экономике да ещё и отжиматься на физре как боженька? Это уже что-то за пределами нормальности, нет? Кстати, вы помните, где лежит ваш аттестат?

Игра слов в названиях 20 аниме — от Psycho-Pass до Kill la Kill Игра слов — действенный способ привлечь внимание зрителей. Сериал сразу же запоминается необычным каламбуром или забавным сочетанием фраз в заголовке. В статье я перечисляю 20 аниме-сериалов, в названиях которых применяется японская игра слов. Список поделён на три группы: Каламбуры, Словослияние и Особенности японского языка. (15 000 символов / 12 мин. чтения): Telegraph #текст

Repost from Programmer memes
Редактор: «Нам надо изменить слово Тинькофф на Т-банк на всем сайте». Программист: «Ни слова больше» 8️⃣ Programmer memes
Редактор: «Нам надо изменить слово Тинькофф на Т-банк на всем сайте». Программист: «Ни слова больше» 8️⃣ Programmer memes

А вам когда-нибудь дарили джинсы?