1.83K subscribers
3.29K photos
130 videos
15 files
3.57K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
Число подписчиков Блог*а превысило красивое число 1800... Опять

Что ж... Спасибо, что продолжаете читать
17🤡7👍5🫡2
😁54🌚2😭1
#prog #rust #rustreleasenotes

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

В этот раз релиз, по большому счёту, состоит из одной фичи (двух, если вы пишете код с SIMD).

▪️Как я уже писал, стабилизировали апкаст трейтов:

trait Super1 {}
trait Super2 {}

trait Combined: Super1 + Super2 {}

fn foo(x: &dyn Combined) {
let _: &dyn Super1 = x;
let _: &dyn Super2 = x;
}

Этот апкаст также работает и через сырые указатели, поэтому пока что — до тех пор, пока не определились с точными гарантиями — создавать сырые указатели на dyn Trait с невалидной vtable-частью запрещено и считается UB. В miri на этот счёт уже есть соответствующие проверки.

▪️По умолчанию компилятор Rust генерирует исполняемые файлы, которые могут работать на всех процессорах целевой платформы. Это означает, помимо всего прочего, невозможность использования процессорно-специфичных наборов инструкций (на практике важнее всего расширения для SIMD). Для того, чтобы обойти эти ограничения и заставить компилятор генерировать код с использованием дополнительного конкретного набора инструкций, в языке есть атрибут #[target_feature(enable = "...")]. Он позволяет компилятору генерировать код с использованием расширенного набора инструкций.

Так как использование на процессоре инструкций, которые он не распознаёт — неопределённое поведение, вызов подобных функций должен быть только в unsafe блоке. Программист при вызове обещает, что этот код недостижим на платформах, на которых указанный набор инструкций не поддерживается.

Это логичное поведение, но у начальной реализации был заметный эргономический недостаток: вызов функции с, скажем, #[target_feature(enable = "avx")] из другой функции с #[target_feature(enable = "avx")] также требовал unsafe-блока, даже не смотря на то, что требование на корректный вызов в этом случается удовлетворяется автоматически и это можно проверить статически. Начиная с этой версии подобные функции можно вызывать друг из друга без unsafe-блока при условии, что наборы включённых фич совпадают.

▪️Продолжая тему, начатую в Rust 1.70.0, компилятор теперь при компиляции в отладочном профиле (и с флагом -C debug-assertions) вставляет паникующие проверки на null при разыменовывании сырых указателей. К сожалению, так как std поставляется только в release-сборке, на коде из std это не сказывается. (Это можно обойти, но требует nightly).

Эта проверка уже нашла ошибки в реальных проектах, как во время crater run, так и после мерджа.

▪️Ошибка FromBytesWithNulError, которая может быть возвращена из CStr::from_bytes_with_nul, теперь является enum и позволяет в случае nul внутри данных получить его позицию.

▪️Теперь можно получить мутабельные ссылки по нескольким индексам/ключам из слайса и хэшмапы одновременно с новыми методами <[_]>::get_disjoint_mut и HashMap::get_disjoint_mut, вместе с unsafe *_unchecked вариантами, дающими UB при пересечении. Версия для слайсов при этом также позволяет индексировать диапазонами, а не только единичными индексами.

Что мне не очень нравится в этих методах — неконсистентность. Именно, версия для слайсов возвращает массив ссылок или ошибку, причём как в случае пересекающихся индексов, так и в случае индексов, выходящих за длину слайса. Версия же для мапы возвращает массив опциональных ссылок (с None для ключей без значений) и паникует на пересекающихся ключах.

▪️Once и OnceLock обзавелись методами для блокировки в ожидании инициализации.

▪️В const-контексте теперь можно, помимо всего прочего, разбивать строку по индексу (включая мутабельно и с опциональным возвратом) и проверять, что индекс лежит между отдельными char-ами.

▪️Компилятор для Linux на ARM теперь компилируется с ThinLTO и PGO, что ускоряет его на бенчмарках на 10-20%, в некоторых случаях — даже на 30%!.
👍93🔥1
Кстати, это теперь канал биржевых новостей, отписывайтесь
#vercheniye_news
😁28🔥2🌚1
Forwarded from Добрый вечер, я диспетчер
Tcp пакет
👍47❤‍🔥8🤣32🔥2🌚2😐2🤯1🍌1
Сейчас я вам расскажу, как разыгрывать «русскую карту». Начнем с примера. Ща одна женщина мне говорит, типа, как тебе не холодно в одной футболке, а я говорю сурово по-немецки: «Я в России родился». Я всегда разыгрываю карту русского, когда не знаю че ответить.

Думаю, принцип ясен. Давайте еще примеров.

— Почему со мной не разговариваешь?
— Я из России. В России говорит только один человек.
— Почему посуда грязная?
— Я из России. В России посуду моют медведи. Люди отмывают только деньги.
— Почему домашка не сделана?
— Я из России, в России домашка — это строить коммунизм.
— Послушайте, Дмитрий…
— Я из России, я Лжедмитрий.
— Сколько времени?
— Я из России, так что время для революции.
— Ты почему оказался в дурдоме?
— Я из России.
😁26🤡4
🙏32🌚19😁8🤡4💩32🔥2😢1😐1
Обожаю запрещенку в Армении!

Подруга приехала в гости и купила 😁 Приедет в Россию с контрабандой...
🥰20🤡7🤣6🤷1
25🌚2😁1🤔1
#prog

Из комментария на LWN от Neil Brown:

One of the big weaknesses of the "do one job and do it well" approach is that those individual tools didn't really combine very well. sort, join, cut, paste, cat, grep, comm etc make a nice set of tools for simple text-database work, but they all have slightly different ways of identifying and selecting fields and sort orders etc. You can sort-of stick them together with pipes and shell scripts, but it is rather messy and always error prone.

I remember being severly disillusioned by this in my early days. I read some article that explained how a "spell" program can be written to report the spelling errors in a file. It uses 'tr' to split into words, then "sort" and "uniq" to get a word list, then "comm" to find the differences. "cool" I thought. Then I looked at the actual "spell" program on my university's Unix installation. It used a special 'dcomm' (or something like that) which knew about "dictionary ordering" (Which ignores case - sometimes). Suddenly the whole illusion came shattering down. Lots of separate tools only do 90% of the work. To do really complete work, you need real purpose-built tools. "do one thing and do it well" is good for prototypes, not for final products.

One thing Unix never gave us was a clear big picture. It was always lots of bits that could mostly be stuck together to mostly work. I spent a good many years as a Unix sysadmin at a University and I got to see a lot of the rough edges and paper over some of them.
👍194🤡3💯2👏1
😢13🫡92🤡2🤔1
Перевод из String в &str
Anonymous Poll
29%
&string
2%
&*string
2%
&string[..]
66%
string.as_str()
🤡3
😁383🤡1💯1
А чем женские и мужские носки отличаются?
🤔8😁4
Forwarded from Cosy Code
🤣25😁8🤔3🤡1😭1
Когда я сделал недавно серию постов про "железо", которое не ваше я же не шутил, а обозначил вполне конкретную проблему и будущее в которое не хотелось бы двигаться, но мы в него движемся

https://t.iss.one/tech_b0lt_Genona/5163
https://t.iss.one/tech_b0lt_Genona/5166
https://t.iss.one/tech_b0lt_Genona/5195 (почему-то многие подумали, что про "облачные" кондиционеры я придумал, нет это реальный производитель с реальными кондиционерами)

Оцените ход Nintendo

Теперь вы покупаете приставку и контроллер, в который по умолчанию встроена кнопка для рекламы. С выходом Nintendo Switch 2 компания решила внедрить кое-что новое — кнопку C, которая активирует встроенный голосовой чат, показ экрана и даже возможность стримить с веб-камерой прямо с консоли. Прорыв? Почти, только в другой части.

Как выяснилось, использовать эти функции бесплатно можно будет только до 31 марта 2026 года. После этого доступ к C-кнопке потребует подписки на Nintendo Switch Online — минимум $20 в год (на текущий момент). Без нее кнопка на корпусе консоли превращается в ссылку на рекламу платного сервиса.
. . .
Представитель Nintendo Билл Тринен в интервью Polygon подтвердил: «Если вы нажмете кнопку без подписки, вы узнаете о преимуществах NSO». То есть, чтобы воспользоваться функцией на консоли за $450, вы должны доплатить, чтобы она вообще работала.

Кнопка для рекламы. Nintendo объяснила работу кнопки «С» в контроллере Switch 2 без активной подписки
https://gameguru.ru/publication/knopka-dlya-reklamy-nintendo-obyasnila-rabotu-knopki-s-v-kontrollere-switch-2-bez-aktivnoj-podpiski/

Оригинал
Nintendo confirms you'll have to pay a monthly or yearly fee to use the Switch 2's C button once the free trial period is up
https://www.gamesradar.com/platforms/nintendo-switch-2/nintendo-confirms-youll-have-to-pay-a-monthly-or-yearly-fee-to-use-the-switch-2s-c-button-once-the-free-trial-period-is-up/
🤡17😁3
😁21🤡2