19 ms·
Gerbil Scheme – A Lisp for the 21st Century
- tombert 3y agoHas anyone here actually used this for anything real? What's the library ecosystem like?
- cess11 3y agoIf it's actually standard compliant any library written in a RxRS-compliant Scheme dialect would be available. The FFI seems reasonably sane as well. They list a lot of libraries in the reference but some are lacking documentation. At a glance it seems you could do a lot in systems and network programming, but if you want to produce a lot of PDF/A or run a cryptocoin business maybe use something else?
- packetlost 3y agoIt's lineage is in vyzo's personal standard library, so yes. The standard library is pretty good, going for a maximalist approach with even stuff like an S3 client [0] and websocket [1] support out of the box, among others (though these are far from comprehensive libs). The underlying runtime is all in R5RS/R7RS with a good collection of SRFIs in the stdlib. The tooling is ok, we're actively working on an LSP implementation and enhancing the documentation story. Also working on propagating type information at "compile"/expand time to give better performance safety. [0]: https://cons.io/reference/std/net/s3.html https://cons.io/reference/std/net/s3.html [1]: https://cons.io/reference/std/net/websocket.html https://cons.io/reference/std/net/websocket.html
- chmaynard 3y agoGerbil scheme is a variant of Scheme implemented on Gambit-C. It supports current R*RS standards and common SRFIs and has a state of the art macro and module system inspired by Racket. Source: https://en.wikipedia.org/wiki/Gambit_(Scheme_implementation) https://en.wikipedia.org/wiki/Gambit_(Scheme_implementation)
- petre 3y agoIf one is acquainted to Scheme, it's better skimming through the introduction for an overview of all the language features. https://cons.io/guide/intro.html https://cons.io/guide/intro.html Seeing it has objects, methods structs, optional type annotation, couroutines, actor model, I tried to build it but the Gambit Scheme on my system was too old and I gave up. Also an older but still useful overview of all the Schemes when used for scientific computing: http://fmnt.info/blog/20181029_scheme.html http://fmnt.info/blog/20181029_scheme.html
- bitwize 3y ago> Seeing it has objects, methods structs, optional type annotation, couroutines, actor model, I tried to build it but the Gambit Scheme on my system was too old and I gave up. Compiling a newer Gambit from source is really straightforward. I ran compiles of Gambit over and over to stress-test Raspberry Pis to see if they needed active cooling (they did).
- belmarca 3y agoGerbil compiles its own pegged version of Gambit. No need to build it yourself.
- petre 3y agoI tried it two years ago when the github cloned version required a specific version of Gambit that I did not have. If the current distribution comes pegged with its own version of Gambit like Racket does with Chez, that's geat.
- deleted 3y ago[deleted]
- clircle 3y agoLisp, like linux, might actually benefit from fewer choices
- worthless-trash 3y agoHard disagree on all counts.
- Joker_vD 3y agoSeriously, how many Lisps for the 21st century do we really need? Especially considering that we are almost a quarter into that century already.
- GeorgeTirebiter 3y agoThere's newLISP http://www.newlisp.org/ http://www.newlisp.org/ which takes a fresh look at lisp and has plenty of libraries. Lately, I'm going back to what I used years ago: Common Lisp. There are great books describing it, and implementations like SBCL https://www.sbcl.org/ https://www.sbcl.org/ are solid. p.s. Plenty of time to come with the lisp for the 22nd century!
- anonzzzies 3y agoYep, I regularly try new ones but sbcl and emacs/slime are hard to beat.
- tombert 3y agoI know it's a bit of an oddball in these discussions, but I find that I still have the most fun with Clojure. It's fast enough, relatively easy to get anything I want done, with proper functional data structures built in, with the entire JVM ecosystem to play with if I need it. I got pretty into Chicken Scheme a few years ago, and I did a quick breakout clone in Racket as well, and I think they're pretty cool, but Clojure is the only one that has ever evolved past "toy" for me.
- bckr 3y agoI would love to see a list of all programming languages in a table with a list of all programming language features
- Y_Y 3y agoLuckily, as Cantor showed, you'd only need an single infinite array to store the necessary data.
- steego 3y agoThat’s only true if the list of programming languages is infinite or if the list of features is infinite. If you want the list to be expandable without ever reindexing AND you want it to still be relatively compact, you can use Rosenberg-Strong which creates a square shells instead of Cantor’s diagonal shell. https://arxiv.org/abs/1706.04129 https://arxiv.org/abs/1706.04129 Bonus content: Szudzik shows how Rosenberg-Strong lets you create a bijection from positive to binary trees ordered in a way so that larger integers never yield a tree of height N until it’s exhausted all tree instances of height N-1.
- Y_Y 3y agoSo that was the joke, that there are infinitely many languages and features. It's not necessary though, your first statement is plainly false as written. I bet your link has some interesting algorithm in it. Luckily for Cantor he died before every having to participate in a software engineering interview.
- sillysaurusx 3y agoI miss pg. Lisp commentary has never recovered from his departure. Ten hours with no comments about the project or a tangent about Lisp itself is a darn shame. Why not write one myself? Drained. Lisp is near and dear to my heart, but midnight when I have to do our morning time routine with our 7mo at 6am isn’t the time to wax poetic. The most worrisome thing is actually the most ironic: no one is posting any hate comments either. Back a decade ago, you’d get into long battles about whether it was a good or bad idea to choose any Lisp, or at least some jeers from the sidelines. But that, counterintuitively, was one of Lisp’s strengths. When I was younger, that kind of thing originally sparked my curiosity: if most people were jeering, and most people weren’t too smart, then could there be something to this whole Lisp trend (even if it seemed like more of a university project than a trend)? And it turns out there was. Loved or hated, you’re noticed. The pit of indifference is a bad place for an ecosystem to be. It’s long past time someone write about it in… well, in a way that can only be described as pg style. He had a knack for making young devs hungry for more. https://paulgraham.com/avg.html https://paulgraham.com/avg.html The essays still hold up. They’re as true today as they were then. But no one will believe them without an example. I wouldn’t have believed it if pg hadn’t released Arc, and sometimes it feels like I’m the only one in the world that actually uses it to solve problems that I personally have. But the nice thing about Lisp is that it’s always there, waiting to be discovered. It’s arguably one of the few types of programming ecosystems that can be discovered rather than designed. It’s precisely why there are so many choices. And it also doesn’t matter that nobody else uses it, just that you like it, that it solves your problems, and you find it endlessly fascinating. Hopefully our generation won’t be the last, at least for a long while.
- 082349872349872 3y agoOK, I'll jeer: I'm a big fan of [McCarthy60], but everything-is-a-list implicitly introduces order, and the 21st century ought to explicitly accommodate the unordered as well. (there ought not be any is-more-basic-than relation between ordered and unordered)
- sillysaurusx 3y agoI agree! That’s actually not a jeer, it’s one of my main criticisms of lisp. You don’t need lists to have lisp. In many respects it works better without them; https://github.com/sctb/lumen https://github.com/sctb/lumen proves it, since hash tables and arrays are the fundamental data structure. They have to be, because that’s the only way lumen can run in JS or Lua. Every time I can’t delete the first element of a list in lisp (I.e. del x[0] in the python sense) I get annoyed with racket. The reason I look past it is because the benefits are so good that they outweigh the annoyances. I wouldn’t trade it away.
- ogogmad 3y agoDo any lisps support the interactive style of programming CL is famed for, apart from CL itself? I think resumable exceptions are an important part of it.
- paines 3y agoLike most of them ? Chicken Scheme exmaple: https://www.youtube.com/watch?v=eXB3I3S3vJc https://www.youtube.com/watch?v=eXB3I3S3vJc
- cess11 3y agoTo a large extent the famed CL experience comes from working with an image, so you get something similar in Pharo and Factor. Personally, in practice, I rarely feel that resumable exceptions are important. Typically I have a data literal as a kind of mock and push that through the function or function chain I'm tinkering with in the REPL until I'm satisfied with the result. Might be that I spend a lot of time in PHP/Psysh, Elixir, Picolisp and so on rather than good old CL, maybe I'd have another opinion if I had ever been payed for CL work.
- vindarel 3y agoResumable exceptions are really cool though: on error get the interactive debugger, go to the bug, recompile the function, come back to the debugger, resume exception, see execution pass. Another CL thing that speeds up development, is more fun, and is extremely useful when working with long scripts (but for common tasks too, really). (also kuddos to anyone using Factor in production^^)
- packetlost 3y agoI think Gerbil has resumeable exceptions, or at least it was talked about at some point.
- cess11 3y agoSure, and I play around with SBCL sometimes since it's a rather nice REPL experience. It's even nicer to have a GUI though, like Smalltalk:s tend to have. In work settings I've mainly used Factor for data exploration but I can see it fit neatly as a data transformer or combiner in a pipeline from one set of API:s or protocols to some other, since it's relatively easy to express such things and one can get a performant binary to deploy.
- rnts08 3y agoThe biggest gripe I have with every "new" language, be it a lisp, c-derivative or some variant of javascript is that I rarely see a comparison side by side of something useful on any of the first 3 pages of the documentation. I see a hello world. I see some obscure (to me) syntax. I see talk about how this will solve world peace. But never "here is http.c and here is http.$newlange" side by side, this is how they perform, these are libraries and these are language functions.
- rcarmo 3y agoThat is exactly what I do every time I evaluate a new LISP: https://taoofmac.com/space/blog/2019/06/20/2310 https://taoofmac.com/space/blog/2019/06/20/2310 Sadly, most LISP and Scheme implementations spend fourteen pages of README material explaining why they reinvented a particular wheel instead of, you know, putting a simple trolley together. HTTP implementations in most LISP/Schemes are particularly bad/abstruse, to the point where I just give up if I can’t do a simple HTTPS request with bearer auth and a JSON payload inside of 30 minutes. Serving HTTP… oh boy, don’t get me started.
- deleted 3y ago[deleted]
- ragnese 3y agoI think I have a similar reaction to you, but maybe with a bit of a different spin. For me, it's not so much that I want to see a literal side-by-side of something non-trivial (though that would be nice, too). I personally want to see a non-marketing-bullshit statement of why other languages suck and why the author(s) feel that this new language doesn't (at least for some given domain or style). I obviously don't want the statement to be insulting or anything, but give me something real. Every new language claims to be "safe, ergonomic, performant, easy-to-learn, beautiful, scalable, cloud-integrated, AI-powered, "heart" open source, etc." I want a language that says, "Hey, other languages get X wrong and we don't. If you don't like it, that's great- go back to those other languages." where "X" could be error handling, performance, type systems, whatever.
- pjmlp 3y ago> Written in Itself A Lisp implementation as it should be.