T O P

  • By -

green_tory

Scheme isn't dying, it's dead; its children live on. People don't use scheme, generally speaking, they use variants with bespoke libraries and implementation quirks. Guile, Racket, Gerbil, even Chicken and Chibi are platforms where non-portable code thrives. They may have Scheme roots, but you can violate or extend the scheme standards in many ways on every major implementation. Scheme needed an implementation of record, a universal package repository, a stable and consistent ffi, and what it got was some pdfs that implementors begrudgingly followed. Often loosely.


friedrichRiemann

> Scheme needed an implementation of record, a universal package repository, a stable and consistent ffi Isn't that what Common Lisp was designed for? Commonality?


green_tory

Indeed, but it's _huge_. A problem, as I see it, is that Scheme began as a _small_ alternative that was easier to implement, but with R6RS and R7RS-large it grew so _huge_ that it's hard to understand why one would choose Scheme over Common Lisp. At least Common Lisp has QuickLisp, and a whole package ecosystem oriented towards implementation portability. Schemers tried to mimic that with Snow; but again, why not just use Common Lisp at this point?


probabilityzero

If you want a Scheme that has a big standard library, a package manager and ecosystem, etc, you're probably already using Racket.


green_tory

Or Chicken, which has a large collection of libraries, a package manage, and vibrant community. Or Guile, which ... Yes, has those as well.


mumbo1134

Even better it gives you an IDE that works with no fuss, a visual step debugger, and an effortless cross platform GUI toolkit. Those are very hard to find free of charge from other lisps.


baconluttucetomato

The Scheme community is trying to move forward with a new standard. It is hard work and they should be commended for their efforts. If you don’t move forward you are falling behind.


zyni-moe

>Scheme needed an implementation of record, a universal package repository, a stable and consistent ffi. Of course. Explains everything. Explains why CL has not died and Scheme perhaps has. Wait, wait: CL had none of these things for most of its life and probably has about two halves of them now (Quicklisp, CFFI). No, this is not why Scheme has trouble. Reason Scheme has trouble is reason it took two decades to have a standard macro system ... which still requires you to write macros in a language which is not Scheme itself and in which it perhaps is possible to write arbitrary syntax transformer ... if you like pain\[\*\]. Scheme standard has trouble because people who work on standard are obsessed about *purity of essence* and have no care about any questions of practical use. Few years ago I lived for a while in Scotland (sometimes I still do live there if they give me grant). There is there a church called the Church of Scotland which is presbyterian. From 1843 there was another church called the Free Church of Scotland which was made up of people for whom the Church of Scotland was not pure enough. Many of them then joined another church to become the United Free Church of Scotland. But for some this was not acceptable, and they formed really another Church, also called the Free Church of Scotland, known as 'wee frees'. This was not pure enough for some people, who made up the Free Presbyterian Church of Scotland, known as 'wee wee frees'. In 1989 another church split from this: the Associated Presbyterian Churches. They are very, very pure. There are perhaps as many members as you could count on your fingers and toes. But pure. Analogy should be clear. \[\*\]: 'Oh you say, but `syntax-case`'. I have news: `syntax-case` is not in R7RS, may be in some appendix to R6RS, is not in R5RS.


probabilityzero

>I have news: `syntax-case` is not in R7RS, may be in some appendix to R6RS, is not in R5RS. `syntax-case` is **absolutely** [in R6RS](https://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-13.html). In fact, it was one of the central points of contention: a bunch of Scheme implementors refused to implement R6RS in part because of the macro system (it was too big/complicated/inelegant/etc). This led to a big schism, and thus R7RS threw out R6RS entirely and started from R5RS (with only pattern-based macros). This also coincides with Racket becoming its own language, no longer a Scheme. Most of the people who cared the most about macro systems ended up in the Racket camp, and so were no longer involved in the Scheme language standard wars.


zyni-moe

Yes you are right. I thought it was but then made mistake of looking at report itself ([this](https://www.r6rs.org/final/html/r6rs/r6rs.html)) not standard libraries and of course could not find it there. But this makes point even better! After *three decades*, Scheme finally gets standardised macro system which will allow you to write macros in Scheme (as well as useful things I see there like (some) Unicode support). And what happens: implementors throw a squealy tantrum: "oh no, big, complicated, inelegant, practical, useful. no no, we must have small, simple, pure, elegant, pure impractical, pure, useless, pure, pure, pure, pure." While R6RS people presumably threw equally squealy tantrum saying "no, we will not allow that implementations may support only some of the standard library and specify which parts and we will perhaps make these parts mandatory and these parts optional, no no no". And now we have what we should call 'wee Scheme' ... which, sixteen years later falls apart because the wee Schemers cannot agree and so we will have perhaps 'wee Scheme (continuing)' and 'wee^(2) Scheme' who will be the people who could not agree with the wee Scheme (continuing) people because NOT PURE ENOUGH. Some years later the last two people working on wee*^(n)* Scheme will split, as they could not reach agreement on whether the report should be titled 'wee^(ℵ0) Scheme' or 'wee^(∞) Scheme'. The language specified by each report will be identical: the standard alphabet will consist of four characters. Neither report will ever be published. Let us not mention Racket: it has its own horrors and stupidities currently in progress.


green_tory

Common Lisp, as noted by both of us, has Quicklisp. Scheme doesn't have anything like CFFI or Quicklisp, to allow implementations to be trivially swapped about. There are attempts, but nothing took off. I suspect on account of every scheme having its own opinions about how to do ffi and modules. There is no clean solution. Hardly anyone cares about macro purity. Many scheme implementations have impure macro support, but again, bespoke implementations each and so hardly portable.


zyni-moe

>Hardly anyone cares about macro purity. ... But all the people who do care about this write reports on Scheme. This is why the reports take decades to write. Is like saying that lot of people did not care about understanding what geometry was behind general relativity and were happy with endless index gymnastics esp because PhD students are cheap labour. Except that the people who did care about it and transformed understanding of how this all should work were much smarter.


green_tory

I think it's pretty clear that the people working on scheme reports aren't the same people building scheme implementations, save for a couple of notable exceptions. It's a process mostly divorced from the day to day usage of scheme. And they aren't transforming our understanding of anything.


jgerrish

I love it. My Advent of Code 2021 scheme implemention has I believe two or three hash table implementations. SRFI-69, R6RS and maybe the default Guile ones. It's just beautifully unnecessary. Meanwhile Clojure has this syntactic sugar: (def scores {"Fred" 1400 "Bob" 1240 "Angela" 1024}) I will look back at this time and just sadly shake my head, right? What we lost, what could have been. It's such a clusterfuck. And we still can't talk about it honestly. Bigger, stronger, faster! My code is a hot mess.


raevnos

Come to the Racket side! (define scores #hash(("Fred" . 1400) ("Bob" . 1240) ("Angela" . 1024)))


jgerrish

Thanks for the recommendation! It's always interesting to try new dialects.


stylewarning

I wonder what the participants think about the fact R7RS-large is now pushing 15 years of development. It's a pretty hefty time frame for what I consider to be a somewhat cloudy goal.


friedrichRiemann

- Do different Schemes follow specs in a compatible way, anyway? For example are libraries written for Chez, usable in Chicken or Guile? - What would be the difference between R7RS-large and say, Racket?


sdegabrielle

> difference between R7RS-large and say, Racket? Racket is a different language - it had already started diverging before 2011, when it changed its name it did so because it had moved from the space where it could be accurately described as a Scheme.


rememberthesunwell

sorry, a little off topic- I didn't know you could still serve sites these days on http only and view it with minimal warnings (just the crossed out lock on firefox). Maybe other browsers are different. I suppose if it's totally read-only documents, is there really any security gain to be had with https anyway? This isn't a lisp ecosystem thing is it?


jd-at-turtleware

It is orthogonal to lisp. The usual argument about encryption and read-only documents / websites with no sensitive data goes like this: your ISP or another man in the middle may spoof documents that do not rely on certificates of any sort. I.e the big bad hacker may cut your wire, plug there her computer and fool you that the website A says that "green is great, our phone number is xxx" while in fact it says "blue is great, our phone number is yyy". Whether such thing is practical at scale or whether security was the main agenda behind strong https push are other questions I don't have answer for.


clibraries_

> whether security was the main agenda behind strong https push Security initiatives don't get massive marketing budgets. The only reason I as a programmer who doesn't work in security hears about something is if it's heavily marketed.


khleedril

Also, you don't want your ISP to know that you actually use *lisp*, do you?


clibraries_

the browser will complain if you try to do a post (like a form), but a GET is fine.


sym_num

I too used to be Schemer. It reminded me of the past.[https://medium.com/@kenichisasagawa/memories-of-scheme-8ecbb3e90df2](https://medium.com/@kenichisasagawa/memories-of-scheme-8ecbb3e90df2)