🦀 Задача на Rust: распакуй строку, не запутавшись во вложенности
Запись
Напиши функцию:
Она должна проходить эти проверки:
Усложнение: число повторений может быть многозначным, например
Что выберешь для решения: стек или рекурсивный разбор? 👇
Запись
k[текст] означает: повторить содержимое скобок k раз. Но внутри могут быть другие такие же конструкции.Напиши функцию:
fn decode_string(s: String) -> String
Она должна проходить эти проверки:
assert_eq!(decode_string("2[a]".into()), "aa");
assert_eq!(
decode_string("2[2[2[a]]]".into()),
"aaaaaaaa"
);
assert_eq!(
decode_string("2[a]2[b]2[c]".into()),
"aabbcc"
);
assert_eq!(
decode_string("2[abc]3[cd]ef".into()),
"abcabccdcdcdef"
);
Усложнение: число повторений может быть многозначным, например
12[ab]. Вход считаем корректным, цифры используются только для количества повторений.Что выберешь для решения: стек или рекурсивный разбор? 👇
👍8❤5🔥1🥰1😁1💊1
В rust-lang/rust открыт PR #164209 от lcnr, и сам автор называет его крупнейшим одиночным изменением Rust после версии 1.0. Важная оговорка: PR ещё не влит, он находится на стадии предлагаемого final comment period. Над новым солвером работали четыре года несколько человек, опираясь на опыт многолетнего Chalk. Он меняет поведение системы типов в пограничных случаях, скорость и сам способ рассуждения о ней.
Если предложение одобрят, новый солвер уйдёт в beta, а затем в stable, начиная с Rust 1.101. Beta cutoff назначен на 6 ноября, после него старый солвер удаляют, так что стабилизация может сдвинуться максимум на один релиз. Ближайшая выгода это TAIT и RTN, которые ждали переработки opaque types. Основные плюсы придут позже, с возможностями, доступными только новому солверу.
Авторы честно перечисляют недостатки: остались зависания, производительность в среднем хуже, часть диагностик слабая, открыты мелкие баги. Аргументы за выкатку такие: два солвера в компиляторе усложняют код и делят покрытие тестами, работа блокируется ожиданием нового, а новые крейты уже начинают зависеть от некорректного поведения старого. Crater нашёл меньше 500 затронутых крейтов, почти все из-за нескольких корневых, и поломки описаны как ожидаемые. Прогон перформанса на основной метрике числа инструкций заметных изменений не показал.
lcnr отдельно благодарит compiler-errors и adwinwhite, без работы которых такая стабилизация, по его словам, вряд ли была бы возможна.
Источник: http://github.com/rust-lang/rust/pull/164209
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍1🥰1
Rust сократил расходы на CI примерно на 75% - и сознательно оставил лишние сборки компилятора.
В интервью Serokell Марко Иени из Rust Foundation объяснил компромисс.
Основную экономию дал переход с GitHub large runners на стандартные. По Enterprise-плану проекту доступны до 500 стандартных раннеров одновременно, а большие расходуют ограниченные спонсорские кредиты.
Часть тестов разделили между двумя стандартными раннерами. Каждый заново собирает компилятор — вычисления дублируются.
Можно собрать один раз и раздать артефакты. Но команда отказалась: такой обмен сделал бы CI медленнее и хрупче. Доступных раннеров хватает, поэтому простота оказалась ценнее экономии CPU.
Тот же принцип - в мониторинге: с собственного Prometheus и Grafana перешли на Datadog, поскольку старую систему никто не успевал обновлять.
Самый ограниченный ресурс здесь - время инженеров. Небольшая команда, во многом состоящая из волонтёров, не может оптимизировать каждый цент.
Хорошая инфраструктура укладывается в бюджет и остаётся посильной в сопровождении. Иногда ради этого стоит выполнять одну и ту же работу дважды.
https://serokell.io/blog/the-hidden-challenges-of-rust-infrastructure-interview-with-marco-ieni
В интервью Serokell Марко Иени из Rust Foundation объяснил компромисс.
Основную экономию дал переход с GitHub large runners на стандартные. По Enterprise-плану проекту доступны до 500 стандартных раннеров одновременно, а большие расходуют ограниченные спонсорские кредиты.
Часть тестов разделили между двумя стандартными раннерами. Каждый заново собирает компилятор — вычисления дублируются.
Можно собрать один раз и раздать артефакты. Но команда отказалась: такой обмен сделал бы CI медленнее и хрупче. Доступных раннеров хватает, поэтому простота оказалась ценнее экономии CPU.
Тот же принцип - в мониторинге: с собственного Prometheus и Grafana перешли на Datadog, поскольку старую систему никто не успевал обновлять.
Самый ограниченный ресурс здесь - время инженеров. Небольшая команда, во многом состоящая из волонтёров, не может оптимизировать каждый цент.
Хорошая инфраструктура укладывается в бюджет и остаётся посильной в сопровождении. Иногда ради этого стоит выполнять одну и ту же работу дважды.
https://serokell.io/blog/the-hidden-challenges-of-rust-infrastructure-interview-with-marco-ieni
❤12👍7🔥2
Rust выбирают для связи медицинских устройств: Vector заново разработала на нём стек IEEE 11073 SDC.
SDC позволяет приборам разных производителей обнаруживать друг друга, обмениваться измерениями, состояниями и тревожными сигналами. Это основа для совместной работы оборудования в операционных и реанимации.
Почему Rust? По объяснению Vector, безопасность памяти и типов помогает предотвращать распространённые ошибки ещё при разработке, снижая риск части сбоев и уязвимостей.
При этом переписывать всё приложение не требуется: стек подключается к существующему коду на C и C++ через FFI. Его можно встроить в устройство или использовать через шлюз.
Vector также заявляет рост производительности благодаря оптимизации обработки XML и структуры данных, описывающей состояние прибора. Конкретных результатов бенчмарков компания не привела.
Доступность ожидается в первом квартале 2027 года. О сертификации или регуляторном одобрении в анонсе не сообщается.
Заметный пример практического внедрения Rust: производитель инженерного ПО выбирает его для компонента, предназначенного работать внутри медицинского оборудования.
https://www.vector.com/en/company/press/press-releases/vector-announces-new-rust-based-ieee-11073-sdc-stack-for-the-medical-device-industry/
SDC позволяет приборам разных производителей обнаруживать друг друга, обмениваться измерениями, состояниями и тревожными сигналами. Это основа для совместной работы оборудования в операционных и реанимации.
Почему Rust? По объяснению Vector, безопасность памяти и типов помогает предотвращать распространённые ошибки ещё при разработке, снижая риск части сбоев и уязвимостей.
При этом переписывать всё приложение не требуется: стек подключается к существующему коду на C и C++ через FFI. Его можно встроить в устройство или использовать через шлюз.
Vector также заявляет рост производительности благодаря оптимизации обработки XML и структуры данных, описывающей состояние прибора. Конкретных результатов бенчмарков компания не привела.
Доступность ожидается в первом квартале 2027 года. О сертификации или регуляторном одобрении в анонсе не сообщается.
Заметный пример практического внедрения Rust: производитель инженерного ПО выбирает его для компонента, предназначенного работать внутри медицинского оборудования.
https://www.vector.com/en/company/press/press-releases/vector-announces-new-rust-based-ieee-11073-sdc-stack-for-the-medical-device-industry/
🔥23❤4👍3🐳1