Final SRFI 253: Data (Type-)Checking
Arthur A. Gleckler
(15 Nov 2024 23:12 UTC)
|
Re: Final SRFI 253: Data (Type-)Checking
Jeremy Steward
(16 Nov 2024 23:21 UTC)
|
Re: Final SRFI 253: Data (Type-)Checking
Artyom Bologov
(17 Nov 2024 14:51 UTC)
|
Re: Final SRFI 253: Data (Type-)Checking Jeremy Steward (17 Nov 2024 17:04 UTC)
|
Re: Final SRFI 253: Data (Type-)Checking
Artyom Bologov
(17 Nov 2024 19:20 UTC)
|
Thanks for the response! Inline comments below: On 11/17/24 07:50, Artyom Bologov wrote: > Well, the sample implementation is trying to be as portable as possible, > relying on most portable features. First goes the standard (R7RS), then > SRFIs, then old standards (R6RS) and implementations. So the order more > or less makes sense. > > As for many implementation-specific expectations, cond-expand can safely > be dropped and replaced with raw Chicken-specific code. I'll certainly > do this for (upcoming, I'm okay if someone beats me to it) Kawa and > Guile implementations. > I'll go ahead and do this then. I was leaving it in there for the sake of touching as little as possible but that will never execute on CHICKEN's side. > > I'm okay with using a generic implementation, but I put a lot of thought > into the `the` use, so I'll be grateful if you include it. > I can understand this! I just don't know how to reconcile that implementation so that it informs the compiler and still passes the provided test-suite. In particular: (the TYPE EXPRESSION) is equivalent to EXPRESSION. The only difference is that you're stating (to the compiler) that it is of the given type. If you're running values-checked in the interpreter or without specializations, this may not even get checked at all! The only direct analogue I have for this is casting in C: char *c = "abcdef"; uint8_t bytes = (uint8_t*)c; This more or less is just telling CHICKEN "I know what I'm doing and this is a value of TYPE." You might be able to replace instances of (the TYPE EXPRESSION) with: (let ((v value)) (check-arg pred? v 'values-checked) (the <type> v)) This would produce the correct checking at runtime in the interpreter (and since check-arg uses `assert` that would be compiled out if -O4 or -unsafe are passed), with the (the TYPE EXPRESSION) preserved for future type inference by the compiler down the line. Well, either that or a conforming implementation can also just silently do nothing with different compilation / evaluation modes, which seems tough. >> # Exports / Imports >> >> The correct list of exports for the sample implementation is: >> >> (export check-arg >> values-checked >> check-case >> lambda-checked >> define-checked >> case-lambda-checked >> define-record-type-checked) >> >> However, the sample implementation still tries to export >> opt-lambda-checked and define-optionals-checked, and fails to export >> check-case. You might want to fix this for other Scheme >> implementations. > > Oh, right, I'll open a pull request in the original repo. In the > meanwhile, feel free to proceed with the right exports! > Thanks! I figured someone was probably testing this with just the .scm file rather than by packaging the full thing. I noticed that opt-lambda-checked was removed in an earlier round of feedback which tipped me off. >> Aside from that, good job! Many of the tests "just worked" and diving >> in wasn't too bad for someone who is not a macro expert. I think most >> of these issues come down to familiarity with CHICKEN and a sort of >> chicken-egg problem where packaging the code as an egg helps diagnose >> some of these issues when trying to use CHICKEN overall. > > Thanks a lot! I'm glad there wasn't many problems and I totally share > your opinions on most changes you've made! > >> I don't know if I'll wait for any feedback on this message to merge >> the above MR on GitLab and tell the chicken-users mailing list, but I >> am definitely open to any help that can be provided here to make the >> CHICKEN implementation better. > > I hope I'm not too late with my comments... It's never too late, but I do want to announce this to chicken-users soon and use it in my own projects. Thank you for the quick response here, I think I have a clear idea of how to move forward now. Cheers, -- Jeremy Steward