Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Sorry for hijacking the thread, but: I was having a look at scheme-rs and read in the readme that you support syntax-case. This somewhat surprised me as the lower level macro facilities are the ugly underbelly of otherwise straightforward coding. More than once I have seen people skip syntax-case entirely and just go for er/ir-renaming macros instead.

I found the syntax-rules implementation but didn't really see any part of syntax-case. Did you mean you support syntax-transformers in general (together with what looks like a very nice syntax-rules implementation), and not syntax-case in particular?



Ah, I meant syntax rules, but syntax case is supported - there’s just no way to create syntax objects so it’s practically not useful.

My email is on my website, if you have any other questions feel free to shoot me an email.


Wait, never mind, I did implement syntax objects. So yes, there is syntax case. There are couple of limitations but it mostly works


I could't see any datum->syntax or syntax->datum anywhere.

If you have it, you know you can just implement syntax-rules in syntax-case? I do believe that is how chez, guile and racket does it.


Those two functions are indeed missing. However, you can create syntax objects with `syntax-quote`. Again, lots of missing functionality. They shouldn't be hard to implement tho, I just need to add template ids to the transformer.

If you're wondering how the hygiene works, each Identifier besides its name includes a set of "marks" (random unsigned integers). Identifiers are only equal if each name and their marks are equal. There's quite a bit more to this, but I feel you may be aware of how this works.

I do know. I haven't done that yet for no real practical reason besides some vestigial code that I have yet to remove. They are basically implemented the same already, under the hood they are both just transformers, I just haven't removed the AST code for syntax rules.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: