1.84K subscribers
3.41K photos
134 videos
15 files
3.66K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
#prog #article

Beating the L1 cache with value speculation

Редкий пример того, как использование кеша процессора вкупе с предсказателем переходов может замедлить программу.
😢16🔥5🤔2
#prog #c #rust #article

"Just Use Rust": A Best-Case Historical Study of Open Source Vulnerabilities in C
(PDF)

We identified 68 prominent open source projects with C code, collected their vulnerability history data, and used their CWE designations to explore a best-case speculation on how many vulnerabilities might have been prevented with Rust. We estimate that 58.2% of historical vulnerabilities in our selection of open source C projects would have been virtually impossible in Rust.
😢17😁13🤡7👍5🔥1🤔1
#prog #article

Syntax highlighting is a waste of an information channel

Color carries a huge amount of information. Color draws our attention. Color distinguishes things. And we just use it to distinguish syntax.

Nothing wrong with distinguishing syntax. It's the "just" that bothers me.

<...>

I've listed some examples of what we could do with this. If this is something that already exists I included a link.


We can use different colors to mark how nested a set of parenthesis are.
<...>
Highlight different levels of nesting.
<...>
Highlight identifiers imported from a different file.
<...>
Highlight functions that raise errors not caught in their body.
<...>
Highlight functions that were directly called in the bodies of tests that failed in the last test run.
😢20👍10🤔2
24😢18👍6💯3🤔1
#prog #article

Why SSA?

If you’ve read anything about compilers in the last two decades or so, you have almost certainly heard of SSA compilers, a popular architecture featured in many optimizing compilers<...>

SSA is actually very simple once you forget everything you think your programs are actually doing. We will develop the concept of SSA form, a simple SSA IR, prove facts about it, and design some optimizations on it.

Содержит кусочки теории графов.
😢19👍4
#prog #rust #rustreleasenotes

Вышла версия Rust 1.91.0! Как всегда, тут только избранные части, всё остальное — в детальных заметках о релизе.

Если бы этот релиз можно было описать одним словом, то это было бы слово "полировка": релиз скорее про улучшение уже существующих фич и стабилизацию старых, давно бывших в nightly, чем про добавление чего-то действительно нового.

▪️Компилятор теперь не даёт компилировать код с суффиксами на индексах для кортежей и кортежных структур. Это было разрешено ранее по недосмотру.

▪️Добавили предупреждение на создание повисших указателей на локальные переменные. Сама по себе эта операция не является небезопасной, но на таком указателе определено очень мало осмысленных операций. Пример (из PR):

fn f() -> *const u8 {
let x = 0;
&x // returns a dangling ptr to `x`
}

⬇️

warning: a dangling pointer will be produced because the local variable x will be dropped
--> src/lib.rs:3:5
|
1 | fn f() -> *const u8 {
| --------- return type of the function is *const u8
2 | let x = 0;
| - x is part the function and will be dropped at the end of the function
3 | &x // returns a dangling ptr to x
| ^^
|
= note: pointers do not have a lifetime; after returning, the u8 will be deallocated at the end of the function because nothing is referencing it as far as the type system is concerned
= note: #[warn(dangling_pointers_from_locals)] on by default

Анализ достаточно умный, чтобы понимать поток управления и цепочки кастов (примеры в тестах в PR).

▪️Компилятор теперь не выдаёт предупреждение о мёртвом коде на as-касты из выражений типа never. Да, это действительно мёртвый код, но в некоторых ситуациях подобные касты были нужны (главным образом для todo!() в функциях, возвращающих impl Trait).

▪️Уровень поддержки для Windows с нативным ABI на ARM (aarch64-pc-windows-msvc) подняли до Tier 1.

▪️Парочка дополнений насчёт потоков: попытка установки минимального размера стека теперь возвращает ошибку при невозможности это сделать вместо паники. Сообщение о панике теперь включает в себя ID потока, в котором её начали.

▪️Задокументировали разумное предположение о Clone и PartialEq/Eq, на которое опирается стандартная библиотека (главным образом коллекции): копия значения, полученная путём вызова .clone(), должна быть равна исходному значению (при условии, что исходное значение равно самому себе).

▪️Ещё одно дополнение к документации (и соответствующий фикс): функции {min, max, minmax}_by из std::cmp передают сравниваемые значения в функцию-компаратор в том же порядке, в котором они передаются в саму функцию.

▪️Стабилизировали громадное количество функций:
🔸 Path::file_prefix для извлечения порции имени файла до расширения. В отличие от существующей Path::file_stem, отрезает все расширения, а не только последнее:

assert_eq!("foo", Path::new("foo.tar.gz").file_prefix().unwrap());
assert_eq!("foo.tar", Path::new("foo.tar.gz").file_stem().unwrap());


🔸Несколько методов для модификации AtomicPtr.
🔸strict_*-методы на примитивных числах, которые паникуют при переполнении вне зависимости от профиля компиляции, включая методы для операций с различной знаковостью.
🔸uN::checked_signed_diff для вычисления знаковой разницы беззнаковых чисел.
🔸array::repeat (в отличие от встроенного синтаксиса, работает не только с Copy-типами).
🔸Duration::from_mins и Duration::from_hours.
🔸BTreeMap::extract_if и BTreeSet::extract_if для ленивого вытаскивания из коллекций значений, удовлетворяющих предикату.
🔸str::ceil_char_boundary и str::floor_char_boundary.

▪️const TypeId::of 🎉🎉🎉

▪️У cargo теперь есть настройка для указывания того, куда складывать промежуточные артефакты компиляции.

▪️Для ключа --target в cargo теперь можно указывать значение host-tuple, которое будет заменено на target tuple для платформы, на которой проходит компиляция.
😢16👍54🎉3
😁34😢11🤯71🔥1
#prog #js #typescript #article

The Code Review That Changed Everything

TL;DR: в отличие от прочих абстракций, enum в Typescript приводит к генерации нетрививального рантайм-кода, который не вычищается tree shaker-ами, а в случае численных enum ещё и не даёт type safety.

(thanks @al_tch)
😢16🤣2🤔1
#prog #csharp #article

Performance Improvements in .NET 10

Сентябрьская статья об оптимизациях в .NET. Как пишет автор, ускорение кода, как правило, достигается не за счёт одного большого изменения, а за счёт множества маленьких — и весь текст статьи это прекрасно иллюстрирует.

В статье множество примеров того, как одно изменение в JIT позволяет применить другие, уже имеющиеся оптимизации, чтобы достичь улучшения, недоступного при применении оптимизаций по отдельности.

Вместе с тем статья несколько расстраивает тем, что ясно показывает, какие усилия приходится тратить разработчикам JIT, чтобы ускорить C#. Многие эти оптимизации были бы избыточны, если бы язык был бы более выразительным или если бы использовались более высокоуровневые (и удобные!) API. Думаю, напишу как-то об этом.
😢17👍3😁1🤔1
#prog #article#rust, но многое в статье от Rust не зависит)

SocketAddrV6 is not roundtrip serializable
😱5💩1
#prog #rust #article

Rust in Android: move fast and fix things

The 2025 data continues to validate the approach, with memory safety vulnerabilities falling below 20% of total vulnerabilities for the first time.

We adopted Rust for its security and are seeing a 1000x reduction in memory safety vulnerability density compared to Android’s C and C++ code. But the biggest surprise was Rust's impact on software delivery. With Rust changes having a 4x lower rollback rate and spending 25% less time in code review, the safer path is now also the faster one.


We'll analyze a near-miss memory safety bug in unsafe Rust: how it happened, how it was mitigated, and steps we're taking to prevent recurrence. It’s also a good chance to answer the question “if Rust can have memory safety issues, why bother at all?”
👍5
Блог*
Как ни странно, больше всего проблем принёс сам факт инкремента версии...
#prog #article

Ваши тесты упали по причине JavaScript

TL;DR: в коде для UI-тестирования был if по версии VS Code, который сравнивал версию (заданную строкой) с литералом "1.44.0", и лексикографическое сравнение строк перестало быть корректным в данном случае, когда минорная версия VS Code перевалила за сотню и стала умещаться в три символа, а не два.
🤩122
#prog #go #article

The Green Tea Garbage Collector

Статья о дизайне нового сборщика мусора для Go, который идейно является всё тем же mark and sweep, но сканирует память страницами вместо того, чтобы отслеживать в очереди каждую индивидуальную аллокацию.

Разумеется, выигрыш по производительности сильно зависит от формы графа объектов (и в некоторых случаях может быть хуже предыдущего), но на практике даже сканирование страниц памяти по 2 процента за раз уже даёт выигрыш.
👍7🤡3