分解物質
ещё у clang есть бесплатный но проще
Danila Matveev
че-то верификацию усиленно путают с анализаторами
Berkus
Berkus
ну и чтобы тебе было смешнее - в seL4 все алгоритмы сначала кодируются на хаскеле
Berkus
Vladimir
Например это делается на более низком уровне, уже llvm этим занимается, и мы вообще говорили о либе syn которая содержит только парсер токенов.
LexsZero
> after initialization
分解物質
Berkus
в сорцах
分解物質
the proof currently is about the operation of the kernel after it has been loaded correctly into memory and brought into a consistent, minimal initial state. This leaves out about 1,200 lines of the code base that a kernel programmer would usually consider to be part of the kernel.
分解物質
Berkus
это не про то
分解物質
Berkus
я тебе говорю - чтобы можно было это верифицировать они специально пишут на урезанном подмножестве си, конвертированном из хаскеля
Berkus
мало того, на сегодняшний день верифицирован код даже не под все поддерживаемые архитектуры
Berkus
если тебе лениво искать в сорцах - поройся в мейлинг листе, там Герно отвечает на такие вопросы регулярно
分解物質
ясн
Emerald
А ну-ка вопрос:
Кто-нибудь делал каллбеки на расте, как вы это делали? Как засунуть ссылку на функцию или замыкание в структуру ?
Anonymous
ненад каллбеки делать
Anonymous
есть фючюры
Emerald
Вам не нравится что калбеки подразумевают реверс control flow ?
Emerald
Я пока что сделал без калбека, просто loop { let event = MyAPI.pump_event() ...
Emerald
Можно наверное у всех асинхронных штук сделать такие качалки событий и в своём main loop собирать их и считать какую-то логику. 🤔
Anonymous
или использовать нормальную асинк либу :/
Anonymous
но если очень нужно то есть трейт Fn
Anonymous
fn my_func<F>(f: F)
where F: Fn(i32) -> i32,
{
}
Anonymous
как-то так
Emerald
Это тип функция высшего порядка?
А как в struct засунуть поле-колбек которое можно в любой момент вызвать?
Anonymous
доня.
@luciuslapis почему ты так упорно не хочешь использовать фьючеры?
Anonymous
чтоб засунуть функцию в struct она должна быть в Box
Anonymous
struct MyStruct<F: Fn() -> () + 'static> {
param: Box<F>
}
Anonymous
вроде
Anonymous
Мерль
Мерль
Anonymous
с фючюрами намного приятнее код будет
Мерль
Emerald
Alex
фьючуры требуют реактора
Anonymous
Emerald
Сделал так https://play.rust-lang.org/?gist=98fe260714aca7de1d0acfb99a97b47e&version=stable
Emerald
Вот хороший ответ, продолжу разбираться по нему https://stackoverflow.com/questions/41081240/idiomatic-callbacks-in-rust
Anonymous
хм, а в последней версии раста замыкания же могут коерситься в поинтеры функций
Emerald
Где бы хороший гайд по замыканиям в расте взять
Emerald
Anton
Кстати, мне тоже интересно, как в расте с асинхронностью работают, не добрался ещё до этого
Anton
Когда какой-нибудь простой update loop делаешь
Anton
Там же наверное всё в мьютексы придётся оборачивать?
Emerald
Пока что в своём IRC-боте я просто делаю блокающие read из сокета, и свой main loop со sleep. Самое простое решение.
Anonymous
хм
Anton
Anonymous
я поехал тогда
Мерль
хм
https://play.rust-lang.org/?gist=f75f1e3519c30f11ba343e06ad760f1d&version=nightly
Anonymous
Anonymous
а в стракте этого не надо
Emerald
Не, если через один тред
Я вот и думаю запустить отдельный IO тред, к нему канал mpsc, но как поставить control flow с ног на голову чтобы не я читал из канала а канал вызывал обработчики? Пока что опять вижу только решение с main loop, опросом всех каналов и sleep
Anonymous
нани
Anonymous
я спрашиваю почему в стракте можно без генерика
Мерль
Мерль
Или я не прав?
Anton
Anonymous
так Fn же трейт
Anonymous
🤔🤔🤔
Мерль
так Fn же трейт
Я видимо не выспался
Ты не мог бы объяснить свою мысль для тупых?
Я никак не могу уловить суть твоих сомнений (
Anonymous
ну Fn это не тип, а trait
Мерль
Да
Anonymous
потому в функции он должен быть написан через генерики, так?
Мерль
Аааа
Мерль
Блин
Мерль
Хммм
Anonymous
нет, поэтому я и спрашиваю
Anonymous