Package: racket
Version: 8.7+dfsg1-1
Severity: normal

Dear Maintainer,

Since at least Racket 8.6, the Racket CS implementation runs even on 
architectures for which it cannot generate native code. I suggest that the 
Debian should package Racket CS for all architectures instead of falling back 
to Racket BC for some, e.g. ppc64el.

I don't fully understand the nuances of the bookworm freeze policy. (I'm sorry 
I didn't report this sooner.) It seems at least plausible that this could be a 
"small, targeted fix[]", especially from the perspective that it would amount 
to bringing a few niche architectures to parity with the popular ones, but I 
could also understand an argument to the contrary.

Some background: Racket CS (based on "Chez Scheme") is the current default 
implementation, having replaced Racket BC ("Before Chez" or "ByteCode") with 
the release of Racket 8.0. Racket CS, like Chez Scheme, compiles to machine 
code, whereas Racket BC compiles to platform-independent bytecode. Initially, 
the recommendation from upstream was to fall back to Racket BC on 
architectures which Racket CS didn't support: Debian's packaging did so as of 
8.0+dfsg1-2 and 8.0+dfsg1-3.

However, Racket CS is now able to run even on architectures for which it 
cannot generate machine code. Initially, support for a "portable bytecode" 
backend was added to Racket's variant of Chez Scheme to simplify bootstrapping 
during development. Later, variants specialized to word size and endianness 
were added (e.g. "tpb64l", suitable for any 64-bit little-endian machine), as 
was basic support for chunks of this byte code to C (which was useful for Chez 
"boot files"). These improvements are sometimes referred to as "pbarch" and 
"pbchunk", respectively.

Ultimately, this worked well enough to make Racket CS viable on architectures 
without native compilation support. Performance is reportedly comparable to 
Racket BC on those architectures, which never had JIT support on Racket BC. 
Changing to Racket CS also enables Racket's "futures" and "places" for those 
architectures. Perhaps the most significant benefit, albeit less concrete, is 
getting those niche architectures onto the Racket implementation that is 
actively developed and used.

The new support was announced with the Racket 8.5 release, but a few pieces 
turned out to be missing: there's some discussion at [1]. I maintain the Guix 
package of Racket, and we enabled Racket CS on all architectures starting with 
Racket 8.6, in particular in [2] and [3]. (Our patches were complicated by the 
fact that we expose some of Racket's internals in ways Debian doesn't.)

I'd be glad to help with this as I can, with the caveats that I have very 
little time until next week, don't have any relevant hardware, and have only 
the tiniest amount of experience with Debian packaging (though I'm a long-time 
user of Debian and downstreams).

Thanks for maintaining Racket in Debian!
Philip McGrath

[1]: https://racket.discourse.group/t/950/27
[2]: https://git.savannah.gnu.org/cgit/guix.git/commit/?id=a15d72f
[3]: https://git.savannah.gnu.org/cgit/guix.git/commit/?id=ed24d6b

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to