8 ms·
There is definitely room for a scheme compiler. But the scheme ecosystem felt extremely fractured the last time I took a look. Chicken had a decent but aging re
by scriptdevil 7y ago
There is definitely room for a scheme compiler. But the scheme ecosystem felt extremely fractured the last time I took a look. Chicken had a decent but aging repo. Chez had a great compiler (I prefer not compiling to C) but it's package ecosystem was not something well advertised if it did have one. Racket has too many dialects which might appeal to some but found the number of sub languages overwhelming for a casual schemer.
- alfiedotwtf 7y agoI am just getting into Scheme, and have heard good things about Chez. Any pointers to what is standard out in the wild? What are the de-facto Scheme tools are people using these days?
- thosakwe 7y agoI just got into Scheme this past month, but I started with GNU Guile, and really like it.
- RhysU 7y agohttps://akkuscm.org/ https://akkuscm.org/ is a seemingly vibrant package manager for Chez and others. It is also by the author of the article.
- pnako 7y agoThe story of Scheme is that it was so easy to implement (relatively) that they ended up with dozens of implementations, so they decided to write a standard... and then started doing the same thing with the standard(s). It's a language family, or even philosophy, rather than a single language.
- pjmlp 7y agoThe standard was quite ok, until the version 7 disagreement of what should be actually in.
- dTal 7y agoThere's always been disagreement. R7RS (small|large) is an effort to resolve that disagreement.
- pjmlp 7y agoI thought that R7RS was the one that sparked it.
- jgon 7y agoR6RS was the one that really sparked the divide, and for a long time only had a limited number of implementations due to this controversy. The big thing that R6RS brought, in my opinion, was a syntax for creating modules and sharing them. R7RS was an attempt to create an R5RS-like minimal standard that still had a library/module syntax so that you could get a bunch of implementations and share code between them. R7RS-small did this, and then R7RS-large attempts to use the module syntax to create a big body of "industrial strength" code that you can use to get "real things" done with scheme. The R7RS-large process seems to be using the SRFIs as a staging ground for the new modules, standardizing on chunks of them as they go in different "editions". So the theory now is that you can write a smaller R7RS-small compliant scheme, and do all your language experimentation in that, and someone else could come along and bootstrap that into a fairly useful large implementation without a ton of effort, and modules you write on that scheme could then be reused on other implementations.
- pjmlp 7y agoLikewise, thanks for clarifying it as well.
- samth 7y agoThere are three ways to think about this. 1. R7RS explicitly decided to repudiate R6RS, leading to the disagreement. 2. R6RS made changes that did not have consensus and the resulting vote didn't have a big enough super majority requirement, leading to a controversial standard. 3. There was always major disagreement about all the relevant points, and R5RS itself was only created by not introducing anything new post 1992, and by not taking a position on the controversial topics. So any standard effort was bound to be controversial.
- noelwelsh 7y agoMaking languages is the thing that Racket does better than any other language, so they do tend proliferate. However, for getting stuff done the majority of work is done in just Racket. You don't need to know the other languages unless you're interested in some specialist task they target. Back when I was a regular Scheme user Racket had by far the biggest ecosystem and community, so it would be my suggestion if you're interested in exploring Scheme.
- mapcars 7y ago>Making languages is the thing that Racket does better than any other language Have you tried Rebol/Red?
- noelwelsh 7y agoI have not.
- mapcars 7y agoThey basically have PEG-kind of parser built into the language allowing you to execute arbitrary code up to modifying the parsing rules themselves. Here's small shell dialect I made while learning it: https://gitlab.com/maxvel/red-shell-dialect/blob/master/shell.red#L60 https://gitlab.com/maxvel/red-shell-dialect/blob/master/shel... So you can do things like shell/run [cat %/etc/passwd | grep {root} > myvar] where both `cat` and `grep` can be either shell commands or Red functions and you can redirect input/output from/to variables as well as files. Also you can mixin Red data types, like in example here `%/etc/passwd` is a file instance, not a string. Also the language itself heavily utilizes this (called Parse dialog) for example they don't have regular expressions at all, JSON is parsed using it as well, GUI system is a fully separate dialog and so on.
- 9214 7y agos/dialog/dialect/ Concept of a dialect (aka 'embedded DSL') is not tied to Parse - you can implement one with it for sure, but it's not a strict requirement.
- craigsmansion 7y agoI always thought that was the best feature of scheme. Nobody agrees on anything, except mainly R5RS, keeping it from going down the path of "one implementation for everything, always" that most languages suffer from once they become a little popular. Scheme is one of the very few languages that has resisted accruing a lot of bloat throughout its existence (R6RS never was very popular because of that) People underestimate the upside of being able to paste any example snippet into your repl and have it work transparently in almost every scheme, without having to worry about libraries or eco-systems. For anything more exotic, you grab the nearest SRFI and squeeze it around until it works in the scheme you're working with. Scheme: it's so simple, any subgenius could use it!
- ephaeton 7y agoRacket 7.4 now comes running on chez if you so wish. Check out [1]. In there there's also the links to the whys, hows and whats of the whole effort. I've been using racket quite a lot lately, really like it. The thing I do not like about racket is the whole "racket 2" effort. Abandon S-exps? Really? To leave behind the 'popularity boundaries' of lisps? d'oh How about you drop your common USP that you share with the other lisps to become .. what, exactly.. irrelevant? Cf. your 'dialect' point: In reality, the languages are just (supposed to be) DSLs for specific (sub-)problems of your problem-space. I don't mind, at all. You just require the libraries written in that other dialect from racket and use the stuff in there, et voila. [1] https://blog.racket-lang.org/2019/08/racket-v7-4.html https://blog.racket-lang.org/2019/08/racket-v7-4.html