Rust 1.18
https://habrahabr.ru/post/330778/
- Новая книга open source (GH), написано 19 из 20 глав
- изменение ключевого слова pub для создания публичной области видимости объекта
- Переупорядочивание объектов в структуре (для занимания меньшего места)
- Начало перехода на новую систему документирования кода CommonMark (опция для rustdoc)
- Компилятор на 15-20% быстрее
System Programming in Rust: beyond safety (разбор paper от Adryan Colyer)
https://blog.acolyer.org/2017/06/14/system-programming-in-rust-beyond-safety/
- Авторы хотят переключить всё системное программирование на Rust
- Почему используем С?
- Безопасные языки добавляют оверхед
- Это известный язык (от самого Adrian Colyer)
- Большая кодовая база
- Дилемма «безопасно vs производительно» - ошибочна
- Rust предлагает и безопасность и производительность с помощью:
- linear types (ensures that object is used exactly once, allow references but not aliases)
- = ownership, that can be transfered or borrowed.
- есть «unsafe» области, где нет ограничений
- safe read-only aliases (Rc or Arc)
- Mutex type for write aliasing
- Многие проекты показали, что Rust хорош для производительных систем, но авторы идут дальше, показывая, что Rust хорош еще и
- Software Fault Isolation (SFI)
- Program Analysis, особенно Static Information Flow Control (IFC)
- безопасное перемещение структур данных с ссылками внутри, что позволяет автоматизировать разные задачи, вроде Checkpointing.
- SFI (Software Fault Isolation)
- идея границ модулей програм, без подключения защит на уровне железа (плагины браузеров, драйвера устройств)
- с требованием производительности
- Копирование данных - всегда замедление, а Rust может помочь с концепцией ownership
- Zero-copy SFI: компилятор гарантирует, что если указатель проходит через эти границы независимости - значит он теперь принадлежит нам
- Авторы показали, как строить SFI библиотеки на Rust,
- Библиотека экспортирует 2 типа данных: Protection Domains (PDs) и Remote References (rrefs). Borrowed References - доступны в домене на все время вызова. Все остальные ссылки - навсегда берут владение. И только для Remote References - владение остается в своем домене.

Если паника происходит в домене- вся таблица ссылок очищается.
Оценка оверхеда делалась применением пустых фильтров на списке пакетов.
TODO: Оценка Оверхеда
- Information Flow Control (IFC) (Analysis)
- Отслеживать проход важной информации через программу.
- Когда есть много алиасов (копий ссылок) - очень сложно делать хороший анализ. Поэтому Rust очень хорош.
- Авторы сделали proof-of-concept реализацию IFC для Rust. Rust макросы трансформируют программу в абстрактную репрезентацию, в которой значение каждой переменной представляется ее секьюрной меткой.
- Входные переменные инициализированы с помощью пользовательских меток, арифметические операции над secure values вычисляют верхнюю границу их аргументов.
- Результирующая абстрактная программа проверяется верификатором, реализованным как расширение к SMACK. Он способен детектировать проблемы в простейших программах.
- Automation. Safe Traversals. (Checkpointing, transactions, replication, mvcc) - включают в себя снэпшоттинг состояния. А это - перемещение данных в памяти. Aliasing - усложняет автоматизацию
- В Rust все проще. Любая ссылка - уникальна, ее можно перемещать без дополнительных проверок. Aliasin делается эксплицитно, с помощью Rc, Arc.
- Авторы построили автоматическую «checkpointing library», используя «Checkpointable» trait (интерфейс?) и частную реализацию для Rc/Arc. При этом, компилятор сам генерирует имплементацию Checkpointable для всех составных типов из скалярных величин.
- Это позволяет делать дешево Checkpoints.
- Авторы делают вывод: Мы показываем, что системное программирование на Rust возможно, и оно предоставляет такие механизмы надежности, как SFI, IFC и автоматических чекпоинтов, намного лучше, чем в других языках. И мы думаем, что это только начало.
Впечатление:
- сама идея статьи очень банальна «на Rust надежнее»
- но 3 идеи с примерами реализации - очень интересные, лично мне они кажутся очень многообещающими, но мне сложно предположить, какие проекты могут появиться на базе этого
Amazon DynamoDB Autoscaling
https://aws.amazon.com/ru/blogs/aws/new-auto-scaling-for-amazon-dynamodb/
https://aws.amazon.com/ru/about-aws/whats-new/2017/06/announcing-amazon-dynamodb-auto-scaling/ 14 Jun
- Устанавливать min;max, и дальше оно скалируется само
- Работает вместе с Amazon CloudWatch чтобы мониторить текущее потребление
- Надо также устанавливать target utilization (в процентах)
Bugs you’ll probably only have in Rust
https://gankro.github.io/blah/only-in-rust/
https://www.ralfj.de/blog/2017/06/09/mutexguard-sync.html
https://news.ycombinator.com/item?id=14553222
- Баг интересный: позволяет писать в Shared переменную.
- Произошел оттого, что не была написана строка, которая запрещает типу MutexGuard быть Sync автоматически. Т.е. проблема не в коде, а в отсутствии дополнительного кода, который будет гарантировать корректность. (автоматическая имплементация некоторых Trait)
- TL;DR: if you write unsafe you must closely audit Send and Sync for your types!
- Несколько примеров на разные ошибки с Unsafe.
- Комменты:
- compiletest - тула, создающая тесты, которые должны упасть. Нужно не только позитивное подтверждение иметь, но и негативное