arrayfire / arrayfire/arrayfire-rust

Improve generics usability for `Array<T>`

オープン
#264 コメント 7 件 リアクション 0 件 担当者 1 名 @9prady9 が担当を希望しています GitHub で見る
Enhancement
主要言語
Rust
スター
827
フォーク
59
PR マージ指標
30日以内にマージされた PR はありません

説明

I encountered difficulty when writing generic functions using `Array` e.g.
```rust
fn test_basic_op(a: &af::Array)
where
// T: af::Fromf64 + af::HasAfEnum + ???
{
println!("Element-wise arithmetic");
let b = af::add(&af::sin(a), &T::fromf64(1.5f64), false);

let b2 = af::add(&af::sin(a), &af::cos(a), false);

let b3 = !a;
af::af_print!("sin(a) + 1.5 => ", b);
af::af_print!("sin(a) + cos(a) => ", b2);
af::af_print!("!a => ", b3);

let a_plus_b = a.clone() + b.clone();
af::af_print!("a + b", a_plus_b);

let minus_a = -(a.clone());
af::af_print!("-a ", minus_a);
}
```

After long fight with compile error, I found that
```rust
fn test_basic_op(a: &af::Array)
where
T: af::HasAfEnum
+ af::Fromf64
+ af::Convertable
+ af::ImplicitPromote,
af::Array: std::ops::Neg>,
{
...
}
```
compiles and it's OK.

However, I feel that:
- `Convertable` and `ImplicitPromote` seems implementation detail and I don't want to write them every time when using `Array`.
- `T` should be `Convertable` automatically when `T: HasAfEnum` (i.e. `T` is supported in `arrayfire`).

So I want:
1. Alias-like trait (e.g. `AfScalar: HasAfEnum + ...`) which enables us ignoring implementation detail when using `Array` in generic code
1. Generic trait implementation (e.g. `Convertable`), not implementation for `f32`, `f64` and other types individually

What are your thoughts?

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。