Op 03-12-2023 om 18:26 schreef Nala Ginrut:
(jit-define (square x) (:anno: (int) -> int) (* x x)) (square 5)
Potentially-overflowing arithmetic involving ints (not unsigned ints, but ints)? Best document somewhere to what the jit code '(* x x)' evaluates when (not (<= min-int (* x x) max-int))).
Personally, I'm in favor of explicit long names like*/error-on-overflow (<-- maybe on the C-level the function could return a tagged union representing (failure [no value]) / (success [some value], at a slight performance cost)
*/wrap-around*/undefined-on-overflow (<-- like in C, for maximal performance and dragons).
(Likewise for +, - and unsigned int)Sure, they are a bit verbose, but they are explicit and non-explicitness+undefined behaviour of'*' in C has caused serious issues in the past, so I'd think it's better that the programmer has to choose what, in their situation, are the appropriate semantics.
If/when someone desired shorter names, there could be a (jit-define-alias * */wrap-around) or something like that for that? Best regards, Maxime Devos
OpenPGP_0x49E3EE22191725EE.asc
Description: OpenPGP public key
OpenPGP_signature
Description: OpenPGP digital signature