1.84K subscribers
3.27K photos
130 videos
15 files
3.55K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Телега такая телега
😁5🍌4🤝2👍1
Что такое глубокая связь?

Это трансатлантический оптоволоконный кабель.
🔥9😁1
#prog #rust #rustlib

embedded-cli — CLI in Rust with autocompletion, subcommands, options, help and history for embedded systems (like Arduino or STM32)

По понятным причинам требует предоставления внешних буферов для обработки аргументов.
🔥5
❤‍🔥9🤔2
Блог*
Photo
#prog #rust #rustasync #article

Цитата из статьи лодочника Let futures be futures, в которой он аргументирует против попыток унифицировать синхронный и асинхронный код.
2
Блог*
#prog #rust #rustasync #article Цитата из статьи лодочника Let futures be futures, в которой он аргументирует против попыток унифицировать синхронный и асинхронный код.
#prog #article

В этой статье лодочник ссылается на Futures aren't ersatz threads. Говорящее название.

Futures present a concurrent programming model that is appealing on its own [выделение моё]. They should not be seen as a poor-man’s version of threads.
#prog #rust #article

Rust web frameworks have subpar error reporting

Автор излагает свои требования к репорту и обработке ошибок (TL;DR: ошибки не должны теряться ни для клиента веб-сервера, ни для админа веб-сервера), показывает, как в этом отношении не работают ни axum, ни actix-web (хотя последний близок) и показывает, как эта проблема решается в его новом веб-фреймворке, pavex.
#prog #go

6 февраля вышла версия Go 1.22.

Среди прочего в стандартную библиотеку добавлен пакет math/rand/v2. Примечательно это по двум причинам.

Первая: это первый случай, когда в стандартную библиотеку Go добавляют вторую версию пакета. На мой взгляд, это вполне себе довод в пользу того, чтобы не делать std слишком богатой. (Конечно, тут ещё далеко до безобразия Python с urllib3, но кто знает, может, и до этого дойдёт).

Вторая: в proposal на этот пакет упомянуто следующее:

2. Remove Source.Seed, Rand.Seed, and top-level Seed. Top-level Seed is deprecated as of Go 1.20. Source.Seed and Rand.Seed assume that the underlying source can be seeded by a single int64, which is only true of a limited number of sources. Specific source implementations can provide Seed methods with appropriate signatures, or none at all for generators that cannot be reseeded; the details of seeding do not belong in the general interface. [выделение моё]

В оригинальном дизайне rand получение случайных значений действовало через тип Rand, который оборачивал значение, реализующее интерфейс Source:

type Source interface {
Int63() int64
Seed(seed int64)
}

В v2 метод Seed убрали, а метод Int63 поменяли на Int64 — и совершенно верно, ибо в этом интерфейсе торчали уши конкретной дефолтной реализации Source. Однако заявление "the details of seeding do not belong in the general interface", как мне кажется, вызвано не общими соображениями, а ограничениями Go. Именно, в идеале у каждого источника случайности должен быть свой тип для сида — но в Go нельзя сделать тип, который является частью интерфейса и который может быть определён реализацией.

Для сравнения, в растовом rand инициализация из начального значения вынесена в отдельный трейт SeedableRng, где сид определяется через ассоциированный тип.

===========

Другая вещь, которая куда как более стрёмная — это тот факт, что тип Rand может запрашивать данные из Source только через метод Int64, а потому остальные методы не могут эксплуатировать тот факт, что они работают с конкретным типом источника случайности, и потому не могут использовать специфичные для этих типов оптимизации. В частности, реализация Rand.Int32 попросту зовёт Int64 на внутреннем Source и делает битовый сдвиг, отбрасывая младшие 33 бита. Если Rand.Int32 вызывается в цикле, то выходит, что где-то половина работы источника случайности уходит в никуда.
🤔2
🎉22🌚7😁6
🤡6👍5🤨2🌚1
#prog #rust #amazingopensource

git-absorb

You have a feature branch with a few commits. Your teammate reviewed the branch and pointed out a few bugs. You have fixes for the bugs, but you don't want to shove them all into an opaque commit that says fixes, because you believe in atomic commits. Instead of manually finding commit SHAs for git commit --fixup, or running a manual interactive rebase, do this:

git add $FILES_YOU_FIXED
git absorb --and-rebase


git absorb will automatically identify which commits are safe to modify, and which staged changes belong to each of those commits. It will then write fixup! commits for each of those changes.

With the --and-rebase flag, these fixup commits will be automatically integrated into the corresponding ones. Alternatively, you can check its output manually if you don't trust it, and then fold the fixups into your feature branch with git's built-in autosquash functionality:

git add $FILES_YOU_FIXED
git absorb
git log # check the auto-generated fixup commits
git rebase -i --autosquash master


Является портом аналогичной вещи для Mercurial: hg-absorb
👍6🔥21🤔1
#video #meme про диету
Forwarded from Neural Machine
Я изо всех сил старалась заняться сексом, но безуспешно.
😢9😁4🤡1🌚1
В комментариях под этим постом я распишу все преимущества Go
🤡20👍12😁9🌚8❤‍🔥3😱2💩2😭2👎1🤔1🖕1
Блог*
А это правда, что у меня красивые папищеки?
Папищеки, а как вы выглядите? Покажите себя!
Блог*
Папищеки, а как вы выглядите? Покажите себя!
(мемы — это, конечно, неплохо, но хотелось бы увидеть вашу реальную внешность)
🥴10😁1🤡1