On 2011-12-07, at 12:05 AM, Attila Lendvai wrote:
i couldn't stop yesterday, and used it as a first scheme hacking session opportunity to fix it myself... looks like i joined wasting effort on scheme swank. how will i be able to complain about it now...? :)
my plan is to first coordinate the swank effort, because swank-chicken seems to be more functional and also kept updated. my plan for now is to set up a swank-scheme repo that brings these efforts together (official slime has some r6rs code, swank-gambit, and swank-chicken at least, maybe others not on my radar yet).
I think coordinating development efforts of various swank implementations for Scheme is a good idea. It will help motivate the people interested in using SLIME with Scheme.
However I'm not sure it will reduce the total man-hours needed to develop the swank implementations. That's because a lot of the code is system dependent, and the hard part is finding out how to implement a particular SLIME feature for a particular Scheme system. For example, how to access threads (get list of threads, interrupt a thread, create a new REPL, etc), or get debugging information (source location of error, backtrace, content of frame, etc), or select a coding system for I/O. All of these things and more are possible with Gambit, but other systems don't implement these features, or implement them differently.
so, my first question: what's the situation with r6rs? my impression is that the scheme crowd is not too keen on jumping the bandwagon...
is the situation something like this: having a portable swank-scheme *based* on r6rs is a good thing to pursue on the long term (with backend specific extensions ala official slime on various CL's), but I should expect bugs and headaches along the way due to r6rs immaturities of various scheme VM's?
if the above holds, then i'd go that way and hunt down and/or workaround the bugs i meet along the way.
Support for R6RS is not widespread among the main implementations of Scheme. You are better off targeting R4RS/R5RS with an eye on R7RS-small which has a better chance of widespread acceptance (especially if Alex Shinn completes his Snow revival...). In your code, you could use the cond-expand form to conditionalize your code on the Scheme system. For those systems without cond-expand, a file specific to that Scheme system can define it as a macro. Alternatively (but harder I think), abstract the operations you need from the Scheme system, and have the common swank code call into the system specific implementation of the interface.
Marc