design: type system design #3

Closed
schrottkatze wants to merge 2 commits from (deleted):main into main

View file

@ -3,8 +3,41 @@
doc
)
= meow nya
= Type system
nyanyanya
== Requirements
#lorem(50)
- Color-aware
- It can handle colors and colorspaces for images
- ocio????
- number/number type support
- custom types (structs/enums)
- algebraic enums
- traits (`Numeric`...)
- functions as data
== Ideas
=== Generic-focused
Color-awareness may be handled as seperate types, so one might have `LinearRgb`, `SRgb`, `Xyz` etc. Optimally implemented using our own constructs.

Why not use the palette crate instead?

Why not use the `palette` crate instead?
Review

I meant in-language constructs, but that's probably something to put on the far future todo list...

I'm concerned about lacking support for OCIO, but realistically, throw that on that list too lol

I meant in-language constructs, but that's probably something to put on the far future todo list... I'm concerned about lacking support for [OCIO](https://opencolorio.org/), but realistically, throw that on that list too lol
An image in sRGB might have the following type signature: `Image<SRgb>`. Colors could also have a trait which could implement conversions.
=== Group inference
==== Example: Multiplying an image with 0.5
The syntax should be the same as just multiplying two numbers, just that one of the values is an image.
Type signatures of the values in a generic system:
`Image<SRgb<u8>> * f32`
Desugared that would look like this:
`[[(u8, u8, u8)]] * f32 -> [[(u8, u8, u8)]]`
Since all of the values are numbers (-> implementing `Num`/`Number`), they should be able to implicitely multiplied.

Typo.

-Since all of the values are numbers (-> implementing `Num`/`Number`), they should be able to implicitely multiplied. 
+Since all of the values are numbers (-> implementing `Num`/`Number`), they should be able to implicitly multiplied.
Typo. ```diff -Since all of the values are numbers (-> implementing `Num`/`Number`), they should be able to implicitely multiplied. +Since all of the values are numbers (-> implementing `Num`/`Number`), they should be able to implicitly multiplied. ```
Since an image has additional data, how should that be handled? should the resolution be static array lengths?