20 unstable releases (5 breaking)
new 0.6.0 | Nov 3, 2024 |
---|---|
0.4.1 | Oct 27, 2024 |
0.3.3 | Apr 1, 2022 |
0.3.2 | Mar 24, 2022 |
0.1.7 | Dec 29, 2020 |
#111 in Asynchronous
526 downloads per month
Used in 4 crates
(3 directly)
140KB
2K
SLoC
A safe Rust async runtime.
Features
forbid(unsafe_code)
- Depends only on
std
at runtime - Good test coverage (>85%)
Limitations
- No
fs
module yet. async-fs is a fast async networking library that works well with Safina. It contains some unsafe code. net
module has poor performance. async-net is a fast async networking library that works well with Safina. It contains some unsafe code.- Not optimized
Examples
use std::sync::Arc;
use safina::executor::Executor;
let executor: Arc<Executor> = Arc::default();
let (sender, receiver) = std::sync::mpsc::channel();
executor.spawn(async move {
sender.send(()).unwrap();
});
receiver.recv().unwrap();
let result = safina::executor::block_on(async {
prepare_request().await?;
execute_request().await
})?;
Alternatives
- smol
- Popular
- Contains some
unsafe
code
- async-std
- Very popular
- Contains generous amounts of
unsafe
code
- futures
- Very popular
- Contains generous amounts of
unsafe
code
- tokio
- Very popular
- Fast
- Internally extremely complicated
- Full of
unsafe
code
- bastion
- Generous amounts of
unsafe
code
- Generous amounts of
nostd_async
Cargo Geiger Safety Report
Metric output format: x/y
x = unsafe code used by the build
y = total unsafe code found in the crate
Symbols:
🔒 = No `unsafe` usage found, declares #![forbid(unsafe_code)]
❓ = No `unsafe` usage found, missing #![forbid(unsafe_code)]
☢️ = `unsafe` usage found
Functions Expressions Impls Traits Methods Dependency
0/0 0/0 0/0 0/0 0/0 🔒 safina 0.6.0
0/0 0/0 0/0 0/0 0/0 🔒 └── safina-macros 0.1.3
0/0 0/0 0/0 0/0 0/0 🔒 ├── safe-proc-macro2 1.0.67
0/0 4/4 0/0 0/0 0/0 ☢️ │ └── unicode-ident 1.0.13
0/0 0/0 0/0 0/0 0/0 🔒 └── safe-quote 1.0.15
0/0 0/0 0/0 0/0 0/0 🔒 └── safe-proc-macro2 1.0.67
0/0 4/4 0/0 0/0 0/0
Changelog
Changelog
- v0.6.0 2024-11-02 - Simplify
ExecutorBuilder
. - v0.5.0 2024-10-27 - Add
ExecutorBuilder
and simplifyExecutor
constructors. - v0.4.1 2024-10-27 - Improve
async_test
:- Make
async_test
a default feature so it shows up in docs.rs. - Timeout after 5s.
- Override timeout with
#[async_test(timeout_sec = 1)]
. - Support
#[should_panic]
and other test modifier macros. - Stop adding
_
to the end of the test name.
- Make
- v0.4.0 2024-10-26 - Merge crates into this crate.
- v0.3.3 - Update docs.
- v0.3.2 - Add
threadpool
module. - v0.3.1
- Add
sync_channel
andSyncSender
. - Add
Receiver::async_recv
to let users await without writing ugly(&mut receiver).await
. - Remove
Receiver::blocking
and addtry_recv
,recv
, etc.
- Add
- v0.3.0
- Move structs into sub-modules.
- Replace
Promise
withoneshot
,OneSender
, andReceiver
that supports async and blocking reads. schedule_blocking
to return newsync::Receiver
.
- v0.2.1 - Update docs.
- v0.2.0
Executor::new
andExecutor::with_name
to returnResult
.ThreadPool::new
to returnResult
.ThreadPool::try_schedule
to return an error when it fails to restart panicked threads.ThreadPool::schedule
to handle failure starting replacement threads.
- v0.1.10 -
block_on
functions to take futures that are notSend
. - v0.1.9 - Use
once_cell
by default. - v0.1.8 - Support stable with rust 1.51 and
once_cell
. - v0.1.7 - Add safina-net
- v0.1.6 - Use safina-executor v0.1.3 API
- v0.1.5 - Add
safina::sync::Mutex
- v0.1.4 - Upgrade to new safina-executor version which removes need for
Box::pin
. - v0.1.3 - Update docs
- v0.1.2 - Renamed
safina
crate tosafina-executor
. Added newsafina
crate with re-exports, examples, and integration tests. - v0.1.1 - Add badges to readme
- v0.1.0 - First published version
TO DO
- Add
init
function that makes an executor and starts the timer thread. - Add an
#[async_main]
macro
License: Apache-2.0