vulkano/TROUBLES.md

25 lines
1.7 KiB
Markdown
Raw Normal View History

2016-02-21 08:09:34 +00:00
# Troubles encountered with Rust during the making of this library
2016-02-22 12:53:31 +00:00
- Lack of plugins means that you have to use a build script to compile your shaders instead of inlining them directly where they are used.
2016-02-21 08:09:34 +00:00
- [No way to create dynamic-sized arrays on the stack](https://github.com/rust-lang/rfcs/issues/618). A lot of Vulkan functions require
passing an array of small elements (small structs or integers). Building such an array with a `Vec` can be expensive, especially
when most of the time the array only contains a single element.
2016-02-23 09:19:57 +00:00
- No way to create a `*mut T` pointer from a `*mut c_void` and a size when `T` is unsized. This had to be implemented in a custom
2016-02-21 08:09:34 +00:00
trait.
- [Can't cast an `ImageResource` into a `Resource` even though the former depends on the latter](https://github.com/rust-lang/rust/issues/5665).
2016-02-21 12:24:12 +00:00
- This library was designed with specialization in mind. There are several `is_compatible` trait methods that perform deep comparisons between
layouts. With specialization available, these methods could be specialized as `true` for layouts that are known to always be compatible.
2016-02-21 08:09:34 +00:00
- https://github.com/rust-lang/rust/issues/29328
2016-02-22 12:53:31 +00:00
- Some trait implementations have an associated type that looks like `type T = (Arc<Foo>, Arc<Bar>);`. HKTs would allow this parameter to take
2016-02-23 09:19:57 +00:00
references to the Arcs instead, and avoid having to clone them. This problem could by bypassed by making the code more ugly, but it's not worth
it just to avoid cloning some Arcs.
- Visibility rules mean that you can't write `struct Error; pub mod foo { pub struct Foo; impl From<Error> for Foo { ... } }`. Rustc complains
that `Error` is private an exported in `Foo`'s signature, even though that's in the author's opinion a totally legitimate usage.