#prog #article
Beating the L1 cache with value speculation
Редкий пример того, как использование кеша процессора вкупе с предсказателем переходов может замедлить программу.
Beating the L1 cache with value speculation
Редкий пример того, как использование кеша процессора вкупе с предсказателем переходов может замедлить программу.
mazzo.li
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)
"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 #ml
Про проблемы с воспроизводимостью в ML с неожиданными источниками.
t.iss.one/partially_unsupervised/273
Про проблемы с воспроизводимостью в ML с неожиданными источниками.
t.iss.one/partially_unsupervised/273
Telegram
partially unsupervised
Когда-то я думал, что ML метрика - это довольно простая функция от двух параметров: обученной модели и тестового датасета. Но это абстракция, конечно, не выдерживает столкновения с реальным миром, а параметров значительно больше.
С локальными факторами справиться…
С локальными факторами справиться…
😢16🤔3👍2
#prog #article
Syntax highlighting is a waste of an information channel
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
Linker Unsafe
Тут народ подсказывает, что в Котлине есть нехилая такая дыра в типобезопасности: https://twitter.com/kotlin/status/1276083456854941697
#prog #kotlin
Говорят, что в Kotlin таки будет деструктуризация по именам. Даже какое-то шевеление в трекере есть.
Всё ещё не отвечает на вопрос, почему только сейчас.
Говорят, что в Kotlin таки будет деструктуризация по именам. Даже какое-то шевеление в трекере есть.
Всё ещё не отвечает на вопрос, почему только сейчас.
Medium
Kotlin 2.4 Introduces Name-based Destructuring: Stop Guessing Which Variable Goes Where
Good news, Kotlin fans! The upcoming name-based destructuring feature is coming to Kotlin 2.4, and it’s going to save us from that…
😢11🤣4❤2🤔1
#prog #article
Why SSA?
Содержит кусочки теории графов.
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):
⬇️
Анализ достаточно умный, чтобы понимать поток управления и цепочки кастов (примеры в тестах в PR).
▪️Компилятор теперь не выдаёт предупреждение о мёртвом коде на
▪️Уровень поддержки для Windows с нативным ABI на ARM (aarch64-pc-windows-msvc) подняли до Tier 1.
▪️Парочка дополнений насчёт потоков: попытка установки минимального размера стека теперь возвращает ошибку при невозможности это сделать вместо паники. Сообщение о панике теперь включает в себя ID потока, в котором её начали.
▪️Задокументировали разумное предположение о Clone и PartialEq/Eq, на которое опирается стандартная библиотека (главным образом коллекции): копия значения, полученная путём вызова .clone(), должна быть равна исходному значению (при условии, что исходное значение равно самому себе).
▪️Ещё одно дополнение к документации (и соответствующий фикс): функции
▪️Стабилизировали громадное количество функций:
🔸 Path::file_prefix для извлечения порции имени файла до расширения. В отличие от существующей Path::file_stem, отрезает все расширения, а не только последнее:
🔸Несколько методов для модификации
🔸
🔸uN::checked_signed_diff для вычисления знаковой разницы беззнаковых чисел.
🔸array::repeat (в отличие от встроенного синтаксиса, работает не только с
🔸Duration::from_mins и Duration::from_hours.
🔸BTreeMap::extract_if и BTreeSet::extract_if для ленивого вытаскивания из коллекций значений, удовлетворяющих предикату.
🔸str::ceil_char_boundary и str::floor_char_boundary.
▪️
▪️У cargo теперь есть настройка для указывания того, куда складывать промежуточные артефакты компиляции.
▪️Для ключа
Вышла версия 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 для платформы, на которой проходит компиляция.blog.rust-lang.org
Announcing Rust 1.91.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
😢16👍5❤4🎉3
#prog #js #typescript #article
The Code Review That Changed Everything
TL;DR: в отличие от прочих абстракций,
(thanks @al_tch)
The Code Review That Changed Everything
TL;DR: в отличие от прочих абстракций,
enum в Typescript приводит к генерации нетрививального рантайм-кода, который не вычищается tree shaker-ами, а в случае численных enum ещё и не даёт type safety.(thanks @al_tch)
DEV Community
The Code Review That Changed Everything
Three months ago, I submitted what I thought was a perfectly reasonable pull request. I had created a...
😢16🤣2🤔1
#prog #csharp #article
Performance Improvements in .NET 10
Сентябрьская статья об оптимизациях в .NET. Как пишет автор, ускорение кода, как правило, достигается не за счёт одного большого изменения, а за счёт множества маленьких — и весь текст статьи это прекрасно иллюстрирует.
В статье множество примеров того, как одно изменение в JIT позволяет применить другие, уже имеющиеся оптимизации, чтобы достичь улучшения, недоступного при применении оптимизаций по отдельности.
Вместе с тем статья несколько расстраивает тем, что ясно показывает, какие усилия приходится тратить разработчикам JIT, чтобы ускорить C#. Многие эти оптимизации были бы избыточны, если бы язык был бы более выразительным или если бы использовались более высокоуровневые (и удобные!) API. Думаю, напишу как-то об этом.
Performance Improvements in .NET 10
Сентябрьская статья об оптимизациях в .NET. Как пишет автор, ускорение кода, как правило, достигается не за счёт одного большого изменения, а за счёт множества маленьких — и весь текст статьи это прекрасно иллюстрирует.
В статье множество примеров того, как одно изменение в JIT позволяет применить другие, уже имеющиеся оптимизации, чтобы достичь улучшения, недоступного при применении оптимизаций по отдельности.
Вместе с тем статья несколько расстраивает тем, что ясно показывает, какие усилия приходится тратить разработчикам JIT, чтобы ускорить C#. Многие эти оптимизации были бы избыточны, если бы язык был бы более выразительным или если бы использовались более высокоуровневые (и удобные!) API. Думаю, напишу как-то об этом.
Microsoft News
Performance Improvements in .NET 10
Take a tour through hundreds of performance improvements in .NET 10.
😢17👍3😁1🤔1
#prog #article (и #rust, но многое в статье от Rust не зависит)
SocketAddrV6 is not roundtrip serializable
SocketAddrV6 is not roundtrip serializable
😱5💩1
#prog #rust #article
Rust in Android: move fast and fix things
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-тестирования был
Ваши тесты упали по причине JavaScript
TL;DR: в коде для UI-тестирования был
if по версии VS Code, который сравнивал версию (заданную строкой) с литералом "1.44.0", и лексикографическое сравнение строк перестало быть корректным в данном случае, когда минорная версия VS Code перевалила за сотню и стала умещаться в три символа, а не два.🤩12❤2
#prog #go #article
The Green Tea Garbage Collector
Статья о дизайне нового сборщика мусора для Go, который идейно является всё тем же mark and sweep, но сканирует память страницами вместо того, чтобы отслеживать в очереди каждую индивидуальную аллокацию.
Разумеется, выигрыш по производительности сильно зависит от формы графа объектов (и в некоторых случаях может быть хуже предыдущего), но на практике даже сканирование страниц памяти по 2 процента за раз уже даёт выигрыш.
The Green Tea Garbage Collector
Статья о дизайне нового сборщика мусора для Go, который идейно является всё тем же mark and sweep, но сканирует память страницами вместо того, чтобы отслеживать в очереди каждую индивидуальную аллокацию.
Разумеется, выигрыш по производительности сильно зависит от формы графа объектов (и в некоторых случаях может быть хуже предыдущего), но на практике даже сканирование страниц памяти по 2 процента за раз уже даёт выигрыш.
go.dev
The Green Tea Garbage Collector - The Go Programming Language
Go 1.25 includes a new experimental garbage collector, Green Tea.
👍7🤡3