14 ms·
My resignation letter as R7RS-large chair
- tptacek 3y agoIt'd be neat if someone familiar with Scheme standardization laid out some of the big disagreements in R7RS-large, or else most of this thread will just be a Scheme vs. Every Other Language discussion.
- bloppe 3y agoI've been trying to get up to speed myself. It seems like the best way is simply reading the mailing list and checking out the codeberg issues. This issue [1] was given as an example of a non-technical problem that's easy to get distracted by when most of the core technical work should be straightforward. It's referenced in this candidacy statement [2] for John's chair position which is a good read to understand what's happening. It's essentially the classic language debate of breaking compatibility with past version versus evolving the language, and seems pretty complicated. I'm sure there are other problems. I'm still reading. [1]: https://codeberg.org/scheme/r7rs/issues/126 https://codeberg.org/scheme/r7rs/issues/126 [2]: https://groups.google.com/g/scheme-reports-wg2/c/TUbmlPY9lR0 https://groups.google.com/g/scheme-reports-wg2/c/TUbmlPY9lR0
- merlincorey 3y agoThe second link provided here has a little overview of Daphne's thoughts on why things are dragging on: > The establishment of the central issue tracker is, I reckon, more to blame for the current disputes. The old model of periodic ballots provided the community with focus; the issue tracker has the problem that, since all currently outstanding problems are listed in one place, any such problem can become a focus of attention at any time, and then arguments about the details of that problem erupt. John has observed in #scheme that the more into detail we get, the more we seem to argue, which seems accurate. It has also, in practice, become a place where issues related to the Foundations only are discussed, and work on the Batteries has mostly stalled. Mea culpa!
- bjoli 3y agor6rs was hugely controversial for many reasons. r7rs-small went back to the r5rs roots, whereas many of us (yes, me included) thought building on r6rs would be the better choice. Much of the process that was started in r6rs led to racket. Kent Dybvig was the head of the standards body and the racket folks were also active in the mailing lists. I think a big part of the disagreement was about correctness. r6rs guarantees some things about a running program that is difficult to do for many small hobby projects. There was also a discussion started about things like immutable data (pairs and strings, mostly) which got people all hot and bothered. The problem with r7rs-large is that it will have to solve many of the problems solved by r6rs (low level macro system, how to handle unicode etc...) which means redoing the r6rs work.
- bachmeier 3y agoAdditional background would be nice. I clicked the link out of curiosity to see what it meant for a piece of furniture to resign from something. After clicking the link, I was no better informed.
- deleted 3y ago[deleted]
- gumby 3y agoCould someone fill in the background? R7RS seems like an unlikely venue for hot conflict, but then again I haven't been a scheme user in decaes.
- tobinfricke 3y agoWhat is R7RS?
- Decabytes 3y agoRevised report version 7. The current scheme standardization. It proceeded R6RS which many felt was too large, and added too many things to the scheme standard (it’s only 90 pages long). R7RS was the compromise
- kkylin 3y agoExactly. R7RS-small was meant to be a minimal core language, in the spirit of RnRS for n <= 5, whereas R7RS-large was meant to be a fairly complete set of standard libraries.
- tmtvl 3y agoIt's the Revised Revised Revised Revised Revised Revised Revised Report on the algorithmic programming language Scheme. That's 7 "Revised"s, hence R7RS. Basically the RxRSes are full specifications of what you need in a Scheme implementation to conform to the Xth iteration of the language.
- tedivm 3y agoDoes anyone actually use Scheme for real projects? The only places I've ever seen it used have been in classrooms.
- duncan-donuts 3y agoLike all lisps it is niche. I don’t use scheme but have used Common Lisp and clojure for a few years. Racket has a thriving community as far as I can tell. You just don’t see lisp much in the wild but it’s there.
- fuzztester 3y agoMy totally uneducated and uninhibitedly snarky guess is that people who use any Lisp family language (except maybe Clojure) don't go around talking much about that fact, or thumping their chests about it, unlike (some) Ruby, Python or JS users. They probably just quietly go about using it and having fun, and talk about it when they meet each other.
- senkora 3y agoGuile Scheme is used extensively in the Guix linux distribution, and works quite nicely there.
- _zoltan_ 3y agoextreme niche on extreme niche.
- Zambyte 3y agoWhich is terribly unfortunate, because it solves very non-niche packaging problems in a very elegant way.
- bjoli 3y agoI had to use Nix in a project of mine and was surprised at how clunky it felt compared to guix. Writing packages meant string concatenations and juggling outputs to the command line. I prefer guix. Every day of the week.
- greggsy 3y agohttps://github.com/johnwcowan/r7rs-work/blob/master/R7RSHomePage.md https://github.com/johnwcowan/r7rs-work/blob/master/R7RSHome... I still have no idea what exactly R7RS is
- deleted 3y ago[deleted]
- cobbal 3y agoIt's a specification of the scheme programming language: https://en.wikipedia.org/wiki/Scheme_(programming_language) https://en.wikipedia.org/wiki/Scheme_(programming_language)
- cosmojg 3y agoIt's the latest version of a language specification for the Scheme family of programming languages.
- arp242 3y agoThe 7th version of the Scheme standard/specification, basically. There's a "small" and "large" version of it, for different use cases/preferences (there's a bit of drama behind this: R6RS introduces a lot of "large" features that many implementers felt were too "bloated", which was eventually resolved by splitting the standard in small/large variants).
- all2 3y agoIt seems like "core language" vs "standard library" almost. The Large spec includes things like lists, vectors, streams, and generators [0]. [0] https://practical-scheme.net/gauche/man/gauche-refe/R7RS-large.html https://practical-scheme.net/gauche/man/gauche-refe/R7RS-lar...
- yieldcrv 3y agoI thought it was a Xaiomi smart chair posting on the internet
- mananaysiempre 3y ago
- deleted 3y ago[deleted]
- ansible 3y agoWhat's the overall Scheme community look like these days? How much are new libraries targeting the specifications (like R6RS) vs. just targeting a specific implementation like Racket, Guile or Chicken Scheme? What forces are keeping the various implementations aligned and moving in the same direction? What is driving them apart? What does the future look like?
- munificent 3y agoI'm just watching this as an observer, but I suspect a lot of it is: People who want to write real-world Scheme code have a strong incentive for a single definition of the language so that their code will reliably run on multiple implementations. They want one language and are probably willing to deal with some breakage in places where implementations are alreaday incompatible in order to get there. People who maintain Scheme implementations want backwards compatibility so that they aren't forced to rewrite a bunch of already working implementation code or try to support multiple different languages at the same time. They don't want to make breaking changes to their implementations and break all of their users in order to converge towards some other implementations' behavior they may not care about. Teachers want a language that is maximally elegant and minimal. They are perfectly happy to make tweaks to the language to make it incrementally cleaner even if it breaks tons of existing code because most of their code is short-lived anyway. Reconciling these very different incentives does not sound fun.
- fuzztester 3y agoLike herding wild, feral and domestic cats - all at the same time. https://en.m.wikipedia.org/wiki/Cat_Herders https://en.m.wikipedia.org/wiki/Cat_Herders
- johncowan 3y agoVery well said. A fourth group is people maintaining existing user code (including libraries), who also want backward compatibility.
- bjoli 3y agoI am usually only targeting guile, mostly because of guix. Guile or chicken seems to be the most popular schemes, but Chez is a compelling choice when there are no external dependencies.
- layer8 3y agoTook me a few moments to realize this isn’t a satirical text about a large seating furniture.
- deleted 3y ago[deleted]
- jp57 3y agoI got involved with scheme back in the days of R{5,6}RS (as a user, not in the standards process). Even then it was an argument for the BDFL model over design by committee.
- patrickmay 3y agoR4RS was a gem. Let's revert.
- bjoli 3y agocall/cc without dynamic-wind is pretty nasty.
- JonChesterfield 3y agoI wonder if the optimum is a benevolent dictator controlling the language and committee controlling the associated library. The community is then a sort of third ring of library evolution. Inconsistency is more expensive the closer to the language definition it arises as the blast radius is wider. Compromises and redundancy are more valuable in the library layer. Lisp blurs the lines somewhat but it's usually possible to subdivide a system into a core and stuff built on that core.
- munificent 3y agoAs someone who works on a combined language/core library team, it's really nice to have them both under the same roof. We can provide a much better overall user experience when we can design features that involve the language and core libraries working in concert with each other. For example, we recently added tuples as a language feature to Dart, and also added a function in the async library that lets you await a tuple of futures in parallel and returns a future of the tuple of the resulting values. When we added extension methods to the language, we also rolled out some extension methods in the core library.
- johncowan 3y agoWe have had four models: Committee consensus took us up through R5RS. There were about 30 members of the committee, though obviously some were more active than others. The problem with that was that we got no change except at the margins. Implementations were extended in random incompatible ways. Then we had consensus of a small committee (5 members, later 4) for R6RS, followed by a community ratification vote. A lot of people thought the resulting standard was over-engineered, and I am quite sure that many people didn't understand all of it (I didn't for sure, especially macros and records.) Some implementers adopted it, others declared they never would. For R7RS-small and the early stages of R7RS-large, we had the open SRFI process (anyone can propose, the community helps refine, the author decides when to freeze the result). Now we have a (de facto) Sitzfleisch process: however stays in their seat and is still arguing the longest, wins. I eventually ran out of energy for this one. Note that in all cases the text controls the meaning, not the author(s), and when the standard and an implementation collide, it is the implementation that is wrong. This is very nearly a sacred principle, as in C/C++ and various other multiple-implementation languages.
- refulgentis 3y agoI almost posted this an hour ago, and feel more comfy now that it’s an hour later: I’m sad how quickly this rocketed to top 3 on front page and how little content there is, it’s just someone resigning from a project virtually none of us know about. The “My resignation letter” was titillating enough to skyrocket upvotes and engagement
- deleted 3y ago[deleted]
- chriswarbo 3y ago> a project virtually none of us know about You may be surprised! For context, R7RS is the latest standard for Scheme. Actually it's two standards: a 'small' one for the core language (similar to R5RS; this was finished a decade ago), whilst this involves the 'large' standard, which is trying to agree on a "standard library". Some reasons people may have upvoted this, or otherwise be interested in Scheme: - R7RS has been dragging on for so long, it may be nice to see some/any sort of status update - Scheme has so many diverse implementations (Racket, Guile, Gambit, Chicken, Chez, Stalin, etc.) that it's really important to have some common standards. - Scheme was a major influence on Javascript (along with Self) - Scheme pioneered many features that are now taken for granted, e.g. first-class functions (it's a "1-lisp"), lexical scope, tail-call elimination, continuation-passing style, call/cc, etc. - Scheme is commonly used as a scripting language by applications written in other languages (similar to Lua). Indeed, Guile is the "official" extension language of the GNU project (e.g. see Guix, Shepherd, etc.). - Scheme was/is taught at many schools and university courses - Well-known textbooks like SICP use Scheme; and indeed guide the reader through writing their own implementation! - Scheme is used for programming language research (e.g. "towers of interpreters", (delimited) continuations, miniKanren, etc.). Indeed Racket used to be called PLT Scheme (PLT = Programming Language Theory)
- zem 3y ago> - R7RS has been dragging on for so long, it may be nice to see some/any sort of status update that's why i upvoted! this is a pretty significant status update if you're interested in r7rs or scheme in general.
- mkl95 3y ago[flagged]
- bhaney 3y ago> all I learnt is that it's somehow related to Scheme It is Scheme
- JonChesterfield 3y agoIt does have slight perl 6 vibes. Scheme was a very small language with high expressive power (compiler under application control and first class continuations). It picked up cleanups and fixes until revision 4 or 5ish, the r6 changed direction and went for relatively big language. More like common lisp. R6 fractured the community, some people stayed on R5 indefinitely. R7 tried to handle this with a small and large revision, shipped the small part a decade ago, and the large one is a work in progress (and seems at risk of getting the same reception r6 did). So whether it is scheme, or whether it's an obscure project using the same name, kind of depends on perspective.
- mkl95 3y agoThanks for the insight! Looks like some people took the time to flag my simple question.
- neilv 3y agoThanks to John Cowan for all his work on a very challenging PL standards efforts. Someday, I'd be interested in what were the process difficulties overcome, and how, and what are the remaining problems or costs. (Disclosure: I was involved in the working groups, briefly and in a much lesser capacity.)
- hinkley 3y agoI hate that the world sometimes requires a human sacrifice in order for change to happen. I can empathize with people that say this is a stupid way to fix a problem, but unfortunately the world is full of stupid things that actually work. On one project, we had a horrible integration test system that required a human to read and interpret the output. The guy who wrote it made his own DSL. As we struggled with it, he noped out and left the project. The next guy had partly the right idea. He figured out how to translate the whole thing into Python with a couple of macros. So at least you could step through it. Then he noped out. Since I do a lot of CI/CD work and my primary goal on the project had already been fulfilled, I took over. What a mess. I made it better but I still couldn't nail down pass/fail statuses reliably. Pointless system. I kept harping on how we needed to throw out the whole thing. It was a false sense of safety at best. When I left to work on something closer to my life goals, at the very last big meeting one of my people I'd been mentoring said, "The last 3 people to leave this team worked on this one project. Maybe we should get rid of it." and everyone started nodding. Son of a bitch. Now, I wouldn't have stayed anyway, but someone else might have. I've seen other situations like this play out, and while there's always gonna be someone who 'takes their ball and goes home', often enough it's someone reasonably determining that they cannot or will not be responsible for the chaos represented by Option A over Option B. This will burn down, fall over, and sink into the swamp.
- deleted 3y ago[deleted]
- johncowan 3y agoIf you mean me, I am definitely not a human sacrifice. I walked away because I had had enough.
- hinkley 3y agoThat's what I mean. For this to be some place people like working, someone has to leave over the status quo. Which means they don't get to benefit from any of the work done so far or subsequently.
- eweise 3y agoDisappointed. Thought I was going to see a resignation letter shaped like a large chair.
- tannhaeuser 3y agoFYI John Cowan is also known as editor of the XML 1.1 spec, as well as other works related to markup languages and Unicode.
- BaculumMeumEst 3y agoi never actually understood how r7rs is supposed to work in practice, because when i learn a scheme i’ve always just learned how to use implementation-specific functionality
- fud101 3y agoJcowan always been a class act.
- zelphirkalt 3y agoWhile reading I had a thought: What if they (whoever it is, who could or should do this) worked on a proposal, that specifies, how language features should be added to the language? I mean, there are things like continuations and macros. Those need to be really solid. But based on them, could one not make everything else an optional addition, implemented on top of them, instead of in a dialect's core? So that Schemes could all go for R7RS small (except those that object to things in it) and then basically have a "folder" in their sources of things that are additionally necessary to have R7RS large things? Those things being implemented in the way that the standard proposes? Then we could get to a R7RS large step by step, feature by feature. I guess this depends on whether things in R7RS large are at their core incompatible with how R7RS small works. Probably it also depends on those dialects implementing the standards correctly for the primitives, that the extension mechanism is supposed to be based on. I also don't know enough to tell what attempts have already been made to resolve things, so perhaps someone already had this idea and it does not work.
- johncowan 3y agoAlas, no. There are quite a few other things that are needed in what is now being called the Foundations in order for adding features to be done through libraries. Scheme, like other Lisps, is almost all "library" and very little "language", once you get past variables, constants, and function/macro calls. The only "language" feature added so far (in R7RS-small) is that previously a vector constant had to be quoted, whereas now it is self-evaluating: you used to have to say (vector-ref '#(a b c) 0), whereas now you can leave out the quote mark.
- bjoli 3y agoWho will convince Kent to come back and make r6.1rs? https://github.com/cisco/ChezScheme/issues/574 https://github.com/cisco/ChezScheme/issues/574 If you want a large language, isn't it a better idea to build it on top of something the makes better guarantees for the user? I prefer my program to not continue executing after reaching an erroneous state.
- johncowan 3y agoNot if it's so constraining to the implementer that you can't get any implementations. Nobody's paying us to do this stuff.
- bjoli 3y agoOf course not, but knowing that the program should never continue executing in an erroneous state is for me a pretty nice-to-have. Scheme enforces correctness and safety in many places and I think that one in particular is important enough to warrant being opt-out rather than opt-in.