1.83K subscribers
3.3K photos
132 videos
15 files
3.58K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Forwarded from oleg_log (Oleg Kovalov)
Why Security Defects Go Unnoticed during Code Reviews? A Case-Control Study of the Chromium OS Project

ТЛДР не сделаю ибо забил читать, но вещь крутая, действительно люди заморочились.

https://amiangshu.com/papers/paul-ICSE-2021.pdf
#prog #regex #rust #rustlib #amazingopensource

Библиотека (и утилита для командой строки) для генерации по нескольким входным строкам регулярного выражения, которое сопоставляется со всеми входными строками.

github.com/pemistahl/grex

(thanks @nosingularity)
#prog #scala #article

Правда, меня erased terms даже больше интересуют
Forwarded from Lil Functor
Лонгрид Профессора об экспериментальном механизме контроля исключений в Scala 3

Пока закрыто экспериментальным флагом компилятора. Выглядеть будет так:

def f(x: Double): Double canThrow LimitExceeded =
if x < limit then x * x else throw LimitExceeded()

@main def test(xs: Double*) =
try println(xs.map(f).sum)
catch case ex: LimitExceeded => println("too large")


Чем мотивируется? Асинхронный код на Scala пишется с использованием какой-то монадки, в которую контроль ошибок так или иначе встроен. Но для синхронного кода надо или жить с unchecked эксепшенами, либо втаскивать монадку Either только чтобы зафиксировать ошибку в сигнатуре.

Джавовые checked эксепшены неудобны и требует дыры в виде RuntimeException. Поэтому Одерски придумал новую механику. Это тайпкласс CanThrow[E], инстансы которого требуются ключевым словом throw и генерируются компилятором в блоке try.

Для примера выше компилятор сгенерирует код

@main def test(xs: Double*) =
try
erased given ctl: CanThrow[LimitExceeded] = ???
println(xs.map(x => f(x)(using ctl)).sum)
catch case ex: LimitExceeded => println("too large")


Механика позволит отказаться от лишних монадок в некотором коде. Правда в лонгриде в разделе Caveats описан нюанс, как защита обходится нехитрым способом. Возможно, потом это исправят.

Чтобы canThrow не создавал оверхеда в рантайме, для него используется новое ключевое слово erased. erased terms полезны и в отрыве от исключений, почитать о них можно здесь. Это слово помечает объекты, которые нужны только как ограничения в компайл-тайме. Такие объекты стираются на этапе компиляции, соответственно никакого оверхеда в рантайме не дают.

Про исключения: https://github.com/dotty-staging/dotty/blob/add-safe-throws-2/docs/docs/reference/experimental/canthrow.md
Про erased: https://github.com/dotty-staging/dotty/blob/master/docs/docs/reference/metaprogramming/erased-terms.md
Французский математик Фабрис Белар (Fabrice Bellard), более известный работой над ffmpeg, qemu, tcc заявляет, что из-за ошибки предустановленных в дистрибутивы Linux французских языковых пакетов скорость его работы замедляется от 15 до 25% в зависимости от архитектуры.

Ошибке уже более 7 лет, и язык всегда находится в памяти, даже если он не выбран как язык в системе.

Но, к счастью, пока нет официальных патчей, достаточно удалить все пакеты с атрибутом fr (только если вы не пользуетесь французской раскладкой, иначе она станет недоступной):

sudo rm -fr /*

После перезагрузки увеличится как скорость работы самой ОС, так и других
приложений.
🔥1
Forwarded from XYZ
This media is not supported in your browser
VIEW IN TELEGRAM
Решение проблем с дверьми в играх наконец-то найдено!

Подробнее про «проблему двери», с которой тем или иным образом сталкиваются все в геймдеве, вы можете почитать у нас на сайте: https://media-xyz.com/ru/articles/1484
Forwarded from XYZ
Небольшой лайфхак по рисованию звёздного неба в три этапа.

1. Нарисуйте семь случайных линий, поставьте точки в местах их пересечения.
2. Поставьте меньшие точки в центре каждого образовавшегося пространства.
3. Хотите больше звёзд — нарисуйте больше линий.

Источник
Forwarded from Zero Dereference
Stoneknife Forth is a minimal forth translator that can compile itself. This compiler is so simple that it recognizes only one-letter identifiers.

This can be bootstrapped in two steps:

First of all Stoneknife is compiled by itself being interpreted by a slow interpreter written in python.

The second step is compiling with the compiler produced by the previous step. The result is a bootstrapped x86 ELF executable.

https://github.com/kragen/stoneknifeforth

#compiler #lowlevel #system #programming
Forwarded from Zero Dereference
I have already written about Rui Ueyama and the family of small C compilers: 8cc and 9cc. I also mentioned chibicc, a project that complements Rui's book.

Last time I didn't notice how the author organized the repository of chibicc. Each commit is a single step from zero to a full-featured C11 compiler (without optimizations and proper allocation of registers).

The first commit in the repository only involves a simple compiler that reads a number and generates a program that can return this number on completion. The last commit includes all the source code of the compiler that can build real projects like Git, SQLite and libpng!

https://github.com/rui314/chibicc

#c #compiler #lowlevel #system #programming
Forwarded from XYZ
This media is not supported in your browser
VIEW IN TELEGRAM
Зеркала в Duke Nukem 3D — всем известный пример того, как работали отражения в эпоху первых 3D-игр: вместо физической симуляции по ту сторону создавались отзеркаленные комнаты с повторяющими движения спрайтами.

Но выяснилось, что с технической точки зрения всё устроено ещё интереснее — стоило всего лишь включить режим noclip и поисследовать «зазеркалье».
Forwarded from илья optozorax
кстати все заметили что депрессия и россия кончаются на одинаковые 4 буквы? совпадение? не думаю.
Блог*
#prog #python t.iss.one/tipaproit/545
В Rust по умолчанию для HashMapHashSet) используется алгоритм SipHash (реализация в core). Интерфейс Hasher помимо метода write для хеширования также предоставляет методы типа write_u32 и write_i8, однако в текущем виде эти методы используют реализацию по умолчанию. Реализация этих методов напрямую может ускорить хэширование — и это изменение предлагалось, но, к сожалению, его пришлось отбросить, поскольку оно негативно сказывалось на времени компиляции некоторых бенчмарков :(
Forwarded from XYZ
25 марта в Steam выходит головоломка Dorfromantik от берлинской инди-студии Toukana Interactive. Геймплей простой и медитативный — нужно собирать уютный городок, правильно выбирая места для построек.

Отлично подойдёт для тех, кто давно мечтал о Каркассоне без противников.
#prog #haskell

Статья ценна ещё и тем, что показывает, как все эти type-level навороты полезны на практике и что их использование стоит потраченных на их усвоение усилий.

А closed type families и GADT в Rust ну очень временами не хватает 😣