Крутой инструмент, только вот почти все примеры мимо кассы.
Факториал llvm и так с помощью const propagation в константу превращает. Полином - ну допустим.
Примеры про конфигурацию бесполезны, т.к. конфигурация должна применяться во время запуска скомпилированной программы и быть доступной для изменения пользователем.
fn send<T>(channel: &mut Channel<T>, value: T) {
channel.q.push_back(value);
let wakers = mem::take(&mut channel.waiting_for_elements);
// Примечание: здесь мьютексы освобождаются, перед пробуждением задач.
// Если не предусмотреть какой-то способ фильтрации, то придётся пробудить все промисы (futures), так как мы не знаем, какой из них попытается произвести очередной опрос, и есть ли вообще такой.
for waker in wakers {
waker.wake();
}
}
Получается, что в случае примитивной реализации мы будем раз за разом аллоцировать и освобождать память при отправке и получении в стабильном режиме, а это весьма приличный объём.
Это просто не так. Память будет выделяться при росте capacity, экспоненциально, и быстро выйдет на плато. Если известно разумное capacity с которого стоит начать, можно выделить под него сразу.
Более того, память из-под вектора не освобождается никогда, если специально не вызывать shrink_to_fit(), например.
Так что причина для всех остальных приключений выглядит надуманной.
Когда мы что-то перемещаем, то в исходном месте это что-то исчезает, правильно?
Нет, не правильно, конечно. Вы думаете есть какой-то способ "переместить" байты в памяти? :)
Разница именно в интерпретации копирования. "Копирование" - это копирование после которого обеими копиями можно пользоваться как эквивалентными. "Перемещение" - это копирование после которого исходным объектом пользоваться нельзя (при этом занимаемая им память осталась на месте но теперь считается свободной).
Используем casbin — по сути единственный фреймворк, если у вас не actix. Защищаем доступ к GraphQL API на уровне отдельных точек доступа. В качестве веб-фреймворка warp.
Работает, но появились следующие проблемы:
описание политик действительно чудовищно повторяющееся. У нас не супер-большое API, но файл контроля доступа к нему уже требует больших усилий по его поддержке;
как следствие, нужно специально следить, не забыл ли автор точки доступа вставить проверку на авторизацию. По хорошему, тут нужно допиливать интеграцию с warp, чтобы авторизация была частью типа, но этого пока не делали.
В сфере проектирования ЯП тоже есть прогресс и моральное устаревание. И на мой взгляд, это куда более простое объяснение, чем поддержка или написание нового кода.
По современным стандартам безопасности, выразительности и удобства кандидат из списка любимых даст прикурить своей альтернативе из списка нелюбимых.
Да, это реально работает. По крайней мере первый и третий пункт — постановку задач с вечера я не пробовал.
Также хочу отметить, что интервалы для помидоров индивидуальны. Можно начать с классики 25/5 и посмотреть, насколько хочется увеличить. То, что предлагает автор — это ближе к 2 склеенным помидорам.
Главной проблемой, по его мнению, является потенциальная возможность “паники ядра” в некоторых ситуациях. Это может быть нехватка памяти, когда операции динамического распределения памяти могут завершаться ошибкой. Торвальдс заявил, что такой подход в ядре принципиально недопустим.
Он говорит не о панике ядра, а о панике Раста. Это поведение функций, выделяющих память на куче в юзерспейсе, в стандартной библиотеке.
При этом довольно очевидно, что стандартная библиотека Раста в ядре и не нужна. Так было бы и с любым другим языком. В Linux не используется стандартная библиотека Си и в частности тот же самый malloc. Там свои специализированные аллокаторы.
Судя по оглавлению - переупаковка любой книги про базовый раст. Ни одной новинки или best practice из индустрии не написано.
Крутой инструмент, только вот почти все примеры мимо кассы.
Факториал llvm и так с помощью const propagation в константу превращает. Полином - ну допустим.
Примеры про конфигурацию бесполезны, т.к. конфигурация должна применяться во время запуска скомпилированной программы и быть доступной для изменения пользователем.
Отличный проект, спасибо! Желаю успехов
Спасибо, было интересно узнать про отличия Valkey от Redis, и что сам Redis уже умеет в многопоточность.
И что мешает вместо
mem::take
сделатьchannel.waiting_for_elements.pop()
в цикле?Речь про этот код?
Это просто не так. Память будет выделяться при росте
capacity
, экспоненциально, и быстро выйдет на плато. Если известно разумноеcapacity
с которого стоит начать, можно выделить под него сразу.Более того, память из-под вектора не освобождается никогда, если специально не вызывать
shrink_to_fit()
, например.Так что причина для всех остальных приключений выглядит надуманной.
Видимо, в этом дело. Может какая-нибудь вспомогательная система типа климат-контроля.
Вообще соответствующий стандарт существует - ISO 26262.
И есть проект, который ставит целью сертификацию Rust для safety-critical окружений - Ferrocene. Но тогда его ещё не было.
Эхо-сервер gRPC в статье на 6 минут с пометкой "Сложный"?) Я не понимаю эту категоризацию сложностей материалов
Нет, не правильно, конечно. Вы думаете есть какой-то способ "переместить" байты в памяти? :)
Разница именно в интерпретации копирования. "Копирование" - это копирование после которого обеими копиями можно пользоваться как эквивалентными. "Перемещение" - это копирование после которого исходным объектом пользоваться нельзя (при этом занимаемая им память осталась на месте но теперь считается свободной).
->
Как вы советуете решать ту же проблему?
Ну что же, прощай, лицемерный DDG.
Подвижки в сторону "ещё одной корпорации" были давно.
Используем casbin — по сути единственный фреймворк, если у вас не actix. Защищаем доступ к GraphQL API на уровне отдельных точек доступа. В качестве веб-фреймворка warp.
Работает, но появились следующие проблемы:
В сфере проектирования ЯП тоже есть прогресс и моральное устаревание. И на мой взгляд, это куда более простое объяснение, чем поддержка или написание нового кода.
По современным стандартам безопасности, выразительности и удобства кандидат из списка любимых даст прикурить своей альтернативе из списка нелюбимых.
Да, это реально работает. По крайней мере первый и третий пункт — постановку задач с вечера я не пробовал.
Также хочу отметить, что интервалы для помидоров индивидуальны. Можно начать с классики 25/5 и посмотреть, насколько хочется увеличить. То, что предлагает автор — это ближе к 2 склеенным помидорам.
Я думаю, что консервативность кодовой базы линукса недооценена. Сомневаюсь, что в mainline возьмут.
Никто и не предполагал, что в ядре будет "обычный Раст". В Redox тоже "не обычный". И в Fuchsia.
Какой serde в ядре?..
Он говорит не о панике ядра, а о панике Раста. Это поведение функций, выделяющих память на куче в юзерспейсе, в стандартной библиотеке.
При этом довольно очевидно, что стандартная библиотека Раста в ядре и не нужна. Так было бы и с любым другим языком. В Linux не используется стандартная библиотека Си и в частности тот же самый malloc. Там свои специализированные аллокаторы.