3 releases

0.1.2 Mar 20, 2023
0.1.1 Mar 20, 2023
0.1.0 Mar 20, 2023

#6 in #metaprogramming

Download history 4120/week @ 2024-06-13 5964/week @ 2024-06-20 5903/week @ 2024-06-27 4804/week @ 2024-07-04 3920/week @ 2024-07-11 4595/week @ 2024-07-18 5727/week @ 2024-07-25 4401/week @ 2024-08-01 4385/week @ 2024-08-08 5201/week @ 2024-08-15 4975/week @ 2024-08-22 5790/week @ 2024-08-29 6975/week @ 2024-09-05 4730/week @ 2024-09-12 5178/week @ 2024-09-19 3158/week @ 2024-09-26

20,991 downloads per month
Used in 47 crates (11 directly)

MIT license

6KB
84 lines

Documentation Crate

coe-rs is a Rust library for coercing a value of a given type into the same type, in cases where the compiler can't prove the two types are equal.
This can be used to emulate specialization in to a limited extent.

Example

use coe::{Coerce, is_same};
use core::ops::Add;
fn foo<T: 'static + Copy + Add<Output = T>>(slice: &mut [T]) {
    if is_same::<f64, T>() {
        // use some optimized SIMD implementation
        // ...
        println!("using SIMD operations");
        let slice: &mut [f64] = slice.coerce();
    } else {
        for value in slice {
            println!("using fallback implementation");
            *value = *value + *value;
        }
    }
}
foo(&mut [1, 2, 3u64]); // calls fallback implementation
foo(&mut [1.0, 2.0, 3.0f64]); // calls SIMD implementation

lib.rs:

coe-rs is a Rust library for coercing a value of a given type into the same type, in cases where the compiler can't prove the two types are equal.
This can be used to emulate specialization in to a limited extent.

No runtime deps