1.9K subscribers
3.43K photos
134 videos
15 files
3.67K links
Блог со звёздочкой.

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

Небольшое прикольное комьюнити: @decltype_chat_ptr_t
Автор: @insert_reference_here
Download Telegram
▪️Несколько багфиксов:

🔸Греческая буква Σ (сигма) имеет две формы нижнего регистра: ς при использовании в конце слова и σ во всех остальных позициях. str::to_lowercase теперь корректно обрабатывает этот граничный случай.
🔸Функции env::set_var и env::remove_var теперь являются unsafe функциями в Edition 2024 (как и должны быть, но эта смена невозможна в более старых редакциях из-за гарантий обратной совместимости).
🔸Компилятор теперь предупреждает, когда во вложенном определении используется конструктор Self, относящийся к определению выше в области видимости. В будущем это сделают ошибкой компиляции.
🔸В паттернах теперь нельзя использовать функциональные указатели и сырые указатели, полученные не путём каста из числового значения.
🔸Теперь нельзя преобразовывать в трейт-объекты трейты, у которых есть ограничения вида Self: Trait на отдельных определениях внутри (не на определении трейта целиком). Ранее это было разрешено и позволяло написать код, который сегфолтился в рантайме при попытке вызвать из vtable функцию, которой там не было :/ Закрывает issue от аж мая 2018 года.
🔸Для ReentrantLockGuard (внутренней реализации StdinLock и StderrLock) исправили реализацию Sync. Как следствие, StdinLock и StderrLock более не реализуют Sync.

▪️Некоторые стабилизированные API:
🔸size_of, size_of_val, align_of и align_of_val. Да, это не новые API, но теперь они включены в прелюдию.
🔸Option::take_if — как Option::take, но с предикатом (который может и модифицировать содержимое).
🔸Множество методов на NonNull, которые были ранее доступны на сырых указателях (слишком много, чтобы перечислять здесь).
🔸Методы split_at{, _mut}_checked на слайсах и на str — как split_at, но возвращает None при выходе за границу. Почему только сейчас?
🔸Методы trim{, _start, _end}_ascii на байтовых слайсах и на str.
🔸Метод into_flattened для преобразования Vec<[T; N]> -> Vec<T> и аналогичные методы as_flattened{, _mut} на слайсах.

▪️check-cfg теперь всегда работает — иными словами, компилятор ловит опечатки в атрибутах #[cfg]
👍4🥰2
Forwarded from Syncrets
👏9💯2🤩1🤣1
Forwarded from sanspie shi:3
codewa rs
😍9🤯2
#prog #article

RocksDB: Not A Good Choice for a High-Performance Streaming Platform

TL;DR:

- Катастрофическое падение производительности при использовании из нескольких потоков;
- Создание и удаление column families является квадратичными от числа column families операциями. В проде это не было проблемой, но в тестах (со значительным использованием property-based testing) новые colum family создавались и удалялись для каждого теста. Общее время прогона тестов из-за этого увеличилось с двух минут до тридцати.
- Невозможность задействовать rkyv. rkyv — библиотека для Rust, которая позволяет переводить типы в их "архивные" версии в виде байтовых слайсов, из которых можно восстановить исходные данные с минимальными вычислительными затратами и без копирования данных. Для корректной работы rkyv накладывает некоторые ограничения на выравнивание "архивных" данных, но эти ограничения невозможно зафорсить в RocksDB — все значения имеют единичное выравнивание.
- Переусложнённая настройка — настолько, что для нахождения оптимальных конфигураций сделали отдельную машобуч-модель — которая всё равно не даёт большой возможности скорректировать настройки в сторону производительности.
🤔5😁1😢1
🤮1
Forwarded from protected @syrkoblog 🙏 (func_dasha)
😁17🤯6🥰2🤮1
Forwarded from someone's shitpost (devilreef)
🌚3😢1
Кстати, а вы упорядочивайте купюры в кошельке по номиналу?
👍24💯12🥴4👎1🤡1🤨1
#prog #rust #article

Лодочник пишет о Pin.

Именно, в первой статье — Pin — автор объясняет, для чего нужен Pin и почему решения, предлагаемые на замену, не подходят и были в конечном счёте отброшены при дизайне async/await. В конце автор расписывает проблемы с Pin — включая эргономические.

В статье Pinned places лодочник рассказывает о возможном обратно совместимом расширении языка, которое интегрирует закрепление мест (places в терминологии Rust reference) в язык глубже. Как показывает автор, это позволяет значительно удобнее писать низкоуровневый (в стиле вызова poll) асинхронный код — без лишнего unsafe и с гораздо более прозрачным pin projection.

Лично я считаю предлагаемое расширение языка с моей дилетантской точки зрения довольно перспективным.
👍91
Forwarded from Install Wizard
😁18🔥6🌚1
😁23🫡21🤡1
#prog #article

A type system for RCL
Implementing a typechecker in Rust

Статья о некоторых деталях реализации тайпчекера разработанного автором языка конфигурации, который является ML-like расширением над JSON.

Это четвёртая статья в серии об этом языке, так что рекомендую также прочитать предыдущие.

В более ранней статье A reasonable configuration language автор рассказывает, что побудило его на разработку нового языка. В качестве неожиданного побочного эффекта он получил более удобную (для него) замену jq.
👍1💩1
😁26👍2🤮2🤣2
В СМЫСЛЕ УЖЕ АВГУСТ
🤷13😭6❤‍🔥5🤯2🤡1
#prog #rust #c #meme про трактор
🔥12😁1