en
Feedback
Блог*

Блог*

Open in Telegram

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

Show more
1 922
Subscribers
-124 hours
-37 days
-930 days
Posts Archive
Ты исправляешь предупреждения компилятора, чтобы сделать свой код лучше. Я исправляю предупреждения компилятора, чтобы избавиться от назойливых подчёркиваний в IDE. Мы не одинаковы.

Кек.
Кек.

#prog #article How single-iteration InstCombine improves LLVM compile time Проход оптимизации InstCombine в LLVM является сборником peephole оптимизаций — то есть оптимизаций, которые ищут короткие конкретные паттерны в исходном коде и заменяют на эквивалентные более, но более эффективные. Например, замена x / 2 на x >> 1, или замена x + y == y на x == 0. Исторически InstCombine работал до достижения неподвижной точки — то есть прогонял всю пачку трансформаций снова и снова, пока трансформации не переставали вносить изменения в код. Однако InstCombine — довольно дорогой проход оптимизации, и на практике на этот цикл уходило довольно много времени компиляции. Более того, практика показала, что этот цикл избыточен: в подавляющем большинстве случаев (>99,9%) одной итерации было достаточно. Статья рассказывает о том, как InstCombine перевели на одну итерацию — вместе с информацией о технических деталях, которые пришлось поменять попутно. Это изменение в итоге привело к снижению времени компиляции на 4%. Как отмечает автор, это — исключительный случай, ибо обычно в компиляторах нет очевидных медленных мест и ускорение одного прохода оптимизации обычно слабо сказывается на скорости работы компилятора в целом. (thanks @itpgchannel)

#prog #quotes
#prog #quotes

Repost from Neural Machine
Боюсь, я из тех, кого нужно пинать несколько раз в день.

Друзья, серьёзная просьба к вам. Посоветуйте, пожалуйста, психолога или психотерапевта в Петербурге, который работает с мужчи
Друзья, серьёзная просьба к вам. Посоветуйте, пожалуйста, психолога или психотерапевта в Петербурге, который работает с мужчинами со следующими проблемами: * Эмоциональная закрытость; * Недоверие к людям и их отторжение; * Тревожность; * Стремление угодить другим, и при этом неспособность радовать себя; * Низкая самооценка; * Нарциссические черты характера; * Вспыльчивость. На этот раз я твёрдо намерен себе помочь. Писать сюда: @dakmmail Заранее большое спасибо.

Друг ищет специалиста, папищеки, помогите, пожалуйста.

#ситуация #horny #ебаноеайти
#ситуация #horny #ебаноеайти

#prog #rust У Linux есть чудесная технология eBPF. Если коротко, то это виртуальная машина с JIT-компиляцией, которая работает в контексте ядра и потому имеет доступ к его структурам и может вызываться на входе и выходе конкретных функций ядра, а также верификатор, который проверяет, что программы, исполняемые на этой виртуальной машине, всегда завершаются. К сожалению, непосредственное взаимодействие со всем API, которое ядро для этого предоставляет, осуществляется через системный вызов bpf:
int bpf(int cmd, union bpf_attr *attr, unsigned int size);
Работать с этим интерфейсом не очень удобно, поэтому разработчики ядра также предоставляют библиотеку libbpf, которая даёт более внятный интерфейс — с отдельными функциями и внятными аргументами для того, что в системном вызове делается через комбинацию аргументов и заполнение bpf_attr. Ожидаемо, для этой библиотеки есть обёртка для использования из Rust: libbpf-rs. Она предоставляет более дружелюбный к Rust API и использует его систему типов для того, чтобы соблюдать инварианты, которые в сишном коде записаны лишь в документации. В силу крайне высоких ограничений на размеры BPF-программ сколько-нибудь насыщенную логику непосредственно в них писать нереально — на практике в них, как правило, только собирают информацию и передают их в юзерспейс. Для (в том числе) поддержки этой задачи специально для BPF-кода есть мапы (maps). К ним можно осуществлять доступ как и из BPF-кода, так и из юзерспейса. Разновидностей мап несколько, с разными возможностями. Один из типов — кольцевой буфер (ringbuf), для асинхронной передачи произвольных данных, поддерживающий многопоточный доступ. В юзерспейс-составляющей API этого кольцевого буфера есть несколько функций. Одна из них опрашивает кольцевой буфер на предмет наличия новых данных и вызывает на них пользовательские коллбеки. Эти коллбеки предварительно регистрируются функцией ring_buffer__add:
int ring_buffer__add(
    struct ring_buffer *rb,
    int map_fd,
    ring_buffer_sample_fn sample_cb,
    void *ctx
)
, где ring_buffer_sample_fn является typedef-ом на тип коллбека:
typedef int (*ring_buffer_sample_fn)(void *ctx, void *data, size_t size);
Как видите, разработчики libbpf избежали позорной ошибки дизайна qsort и предоставили возможность привязать к ringbuf произвольный контекст, который передаётся аргументом в коллбек. Библиотека libbpf-rs, хоть и не полностью покрывает API libbpf, всё же даёт возможность регистрировать пользовательские коллбеки со стороны Rust:
impl<'slf, 'cb> struct RingBufferBuilder<'slf, 'cb> {
    pub fn add<NewF>(
        &mut self,
        map: &'slf MapHandle,
        callback: NewF
    ) -> Result<&mut Self>
    where
        NewF: FnMut(&[u8]) -> i32 + 'cb;
}
(API, впрочем, не вполне верный в том плане, что предполагает, что весь переданный кусок данных инициализирован целиком, что не обязательно правда) Как видите, libbpf-rs даёт возможность прикреплять растовые замыкания. Но погодите-ка, как это работает, если сишное API работает только с указателями на функции, а растовые замыкания нельзя (по крайней мере, на стабильной версии) распилить на код и захваченные данные? libbpf-rs использует этот контекстный параметр! Именно, метод RingBufferBuilder::add боксит замыкание и сохраняет его в векторе в виде Box<dyn FnMut(&[u8]) -> i32 + 'a>, а в методе RingBufferBuilder::build итерируется по сохранённым коллбекам, переводит их в тонкие сырые указатели через Box::into_raw(Box::new(callback)) и передаёт его как параметр ctx в ring_buffer__new или ring_buffer__add. В обоих случаях в качестве сишного коллбека передаётся эта функция, которая просто распаковывает настоящий коллбек из контекста и вызывает его:
unsafe extern "C" fn call_sample_cb(
    ctx: *mut c_void,
    data: *mut c_void,
    size: c_ulong
) -> i32 {
    let callback_struct = ctx as *mut RingBufferCallback<'_>;
    let callback = unsafe { (*callback_struct).cb.as_mut() };
    let slice = unsafe {
        slice::from_raw_parts(
            data as *const u8,
            size as usize,
        )
    };

    callback(slice)
}

Помнится, в первые дни после переезда я задавался вопросом, как армяне — местные — переносят жару: по идее, более привычные. Оказалось, никак не переносят — точно так же сидят по домам с кондиционерами

#prog #rust #rustlib #menacingopensource Quickly prototype procedural macros using JavaScript or TypeScript! crates.io/crates/js-macros

#этотравля
#этотравля

Мне бабушка говорила, что если я буду сидеть напротив угла стола, то у меня не будет девушки. А про парней она ничего не говорила.

Repost from Install Wizard
photo content

Это, конечно, очень удобно, когда одна и та же библиотека называется по разному в зависимости от дистрибутива. Или когда название пакета вообще не отражает включаемые либы (привет, build-essentials).

#video Существует ли особый "гейский голос"? TL;DR: судя по всему, да, и от языка это не зависит. youtube.com/watch?v=SF7KCsvcw2g

#video Чел режет правду-матку youtu.be/I-GpS5PCcLc

Southwest Airlines, the fourth largest airline in the US, is seemingly unaffected by the problematic CrowdStrike update that
Southwest Airlines, the fourth largest airline in the US, is seemingly unaffected by the problematic CrowdStrike update that caused millions of computers to BSoD (Blue Screen of Death) because it used Windows 3.1. The CrowdStrike issue disrupted operations globally after a faulty update caused newer computers to freeze and stop working, with many prominent institutions, including airports and almost all US airlines, including United, Delta, and American Airlines, needing to stop flights.
Windows 3.1 saves the day during CrowdStrike outage — Southwest Airlines scrapes by with archaic OS https://www.tomshardware.com/software/windows/windows-31-saves-the-day-during-crowdstrike-outage

Repost from AI Media The Best
Советский сериал "Шерлок Холмс" с помощью ИИ Merlin Clone озвучили на разных языках. Оцените интонации и тембры, мало отличимые от оригинальных голосов актеров. Лучшие продукты в мире AI — подписаться

#ml #video Окей, это действительно впечатляет

Блог* - Statistics & analytics of Telegram channel @dereference_pointer_there