top | item 18402567

Chicken Scheme 5.0

303 points| mario-goulart | 7 years ago |lists.nongnu.org

CHICKEN is a compiler for the Scheme programming language. It produces portable and efficient C and supports the R5RS and R7RS (work in progress) standards, and many extensions. More info at https://www.call-cc.org/

A new major version has just been released. See the announcement message here: http://lists.nongnu.org/archive/html/chicken-users/2018-11/msg00006.html

86 comments

order
[+] ziotom78|7 years ago|reply
Wow! It has been almost 6-7 years since I used Chicken Scheme, but I have fond memories of it. I wrote a program to automatize the creation of scientific reports in the Planck/LFI project [1]. The purpose was to quickly scan a large number of maps and power spectra produced by the data analysis pipeline, detect any weirdness in the data, and create a report in HTML format. The report included several tables and plots.

The ability to natively encode HTML in Scheme syntax was the main reason why I chose Chicken Scheme: LISP is perfect for creating HTML programmatically. However, while using Chicken Scheme, I discovered a few other features that were big timesavers:

(1) The simplicity of its FFI was incredible. It was immediate to link existing C libraries we were using in the Planck project, as Chicken Scheme compiles to C.

(2) Eggs were a joy to use. It was trivial to download and install them, compared to the amount of work needed for the usual C and Fortran libraries needed in our field (Lapack, Blas, HEALPix, etc.)

(3) Several tools were available: documentation generators (I don't remember the name of the one I used, but I remember the good looks of the documents it produced), seamless integration in Emacs, etc.

(4) Developers were super-friendly. I did not need to ask questions very often, but the few times I had to do so, I found them responsive and happy to help.

(5) The fact that the compiler produces an executable made deployment quite easy: once I verified that the necessary dynamic libraries were available, I compiled the code using Chicken Scheme on my laptop and then copied the executable on the server hosting the data to analyze.

Congratulations to the team for this new release!

[1] https://en.wikipedia.org/wiki/Planck_(spacecraft)#Low_Freque...

[+] brink|7 years ago|reply
If you don't mind me asking, why did you stop using it?
[+] sdegutis|7 years ago|reply
I remember writing bindings for Zephyros in Chicken Scheme, it was an enlightening and fun experience! and I just wanted to echo all your comments about it.
[+] Koshkin|7 years ago|reply
> LISP is perfect for creating HTML programmatically

'printf' has always worked just as fine for this purpose.

[+] rvense|7 years ago|reply
Great news!

When I applied for my present job (at a Golang/JS place), the dumb little coding exercise I was asked to do said it could be done in any language. Before thinking about whether or not it would actually be a good idea, I'd opened a new file and started hacking with this at the top:

;; you said any language

;; this is chicken scheme

And it worked! Thank you, chicken.

[+] Reisen|7 years ago|reply
One of the best intros to generational garbage collection is on chicken internals[1]. If you've ever wondered about GCs I thoroughly recommend giving the article a read, it's full of interesting asides as well.

I think I would use chicken more but usually when reaching for scheme it seems to be because I want something embeddable. Even so, extremely excited about this release!

[1]: https://www.more-magic.net/posts/internals-gc.html

[+] sjamaan|7 years ago|reply
CHICKEN is just as suitable for embedding in C programs as for embedding C code in CHICKEN: https://wiki.call-cc.org/man/5/Embedding

The complete CHICKEN 5 runtime should be a bit smaller already than the CHICKEN 4 runtime, because we dropped some stuff, but if the runtime is still too large for your needs, you can make a custom build that omits certain components. Here's a small tutorial on how to do that: https://wiki.call-cc.org/generating%20the%20smallest%20possi...

[+] tsukikage|7 years ago|reply
JOOI, what's your embeddable Scheme of choice?
[+] hajile|7 years ago|reply
One of the hard problems in CS is naming things. WHY do scheme implementations decide to name stuff by SRFI numbers? Even if you've been using the language a lot, numbers don't make very much sense. I want to import the standard list library -- not library #1. Even (import srfi-1-lists) would be better than (import srfi-1).

In addition, such names make the language more approachable for new users. Not only do they have to know that SRFI exist, but they have to look over all of them to see if one exists for what they need.

[+] johncowan|7 years ago|reply
Working on that. As SRFIs get incorporated into the R7RS-large edition of the standard, they get renamed to (scheme list) and so on. Of course, that hasn't propagated too far yet, but it's coming.
[+] emmanueloga_|7 years ago|reply
Chicken is an instance of "Mysteryware".

* Who created it?

* Why didn't them pick one of the other implementations?

* What's the history / background?

Could not find any of the answers to those questions after a few minutes of Googling around, nor in Wikipedia [1].

Closest I got is this page [2] that list "Felix Winkelmann" as the top core contributor. I'm guessing he is the author since the name rings a bell (after dabbling a bit with scheme and comparing implementations, so maybe I read his name somewhere, probably right here at HN).

Regarding the "why", I also think I read somewhere that the idea was to implement scheme using the ideas on "Cheney on the M.T.A." [3] and later the project took off, but I don't know the details... did I just make this up? :-p... damn, really need to improve my note taking process.

1: https://en.wikipedia.org/wiki/CHICKEN_(Scheme_implementation...

2: http://wiki.call-cc.org/maintainers

3: http://wiki.c2.com/?CheneyOnTheMta

EDIT: Found it! I think most I remember about Chicken history I read from these blog posts:

* https://spin.atomicobject.com/2013/05/02/chicken-scheme-part...

* https://spin.atomicobject.com/2013/06/19/chicken-scheme-spoc...

[+] codeulike|7 years ago|reply
I had a plastic toy of Feathers McGraw on my desk, the evil penguin (disguised as a chicken!) from the Wallace and Gromit movie, “The Wrong Trousers.” Looking for a preliminary working title for the compiler, I used the first thing that came to my mind that day. I’m somewhat superstitious about names for software projects, and things were progressing well, so I didn’t dare to change the name.

Great!

[+] sebcat|7 years ago|reply
I wrote an IRC bot[1] to get a feel for Scheme in general earlier this year. I chose Chicken for it, which got me to look into Cheney on the MTA and other implementation details which were really interesting.

The FFI is really nice, given that Chicken compiles to C.

The Chicken IRC channel was a lot of help early on.

All in all an enjoyable experience!

[1] https://github.com/sebcat/kylling/blob/master/kylling.scm

[+] bjoli|7 years ago|reply
The chicken IRC channel is IMHO one of the kindest and most helpful places on the internet.

I have asked so many stupid questions and they were so helpful. I would go as far as to say that they were an important part of me becoming proficient in scheme. The chicken community is my prime example of welcoming and nice open source communities.

I still use chicken from time to time, but I switched to guile for a project with an embedded scheme. I wrote quite a lot of scheme code and suddenly had a prelude in guile that wasn't so easily ported.

[+] aewens|7 years ago|reply
I actually came across this the other day. I recently got into using IRC and wanted to learn lisp, so I decided to make an IRC bot. I wanted to get an idea of how this would work in Chicken Scheme (since the documentation for the irc egg was not great) and the only one I could find was your kylling.scm bot. So thank you for putting the code for kylling.scm out there because it helped me get started with the IRC bots I am maintaining now.
[+] peatmoss|7 years ago|reply
At my last job (company that builds data portals) I put together a basic site-to-Gopher gateway, so that people could explore data portals in glorious ASCII.

I didn’t get all the functionality I wanted built in the time allotted (some of the time was also spent trying to fix up an old Wyse60 serial console that was on the fritz), but I had a blast writing that in Chicken Scheme. I was surprised and enormously entertained that there’s a pretty well-baked Gopher server for Chicken... it supports IPv6 even!

Kudos to the Chicken team. While I like some of the Racket-isms in Racket, Chicken is a delight and has an awesome deployment story.

[+] eggy|7 years ago|reply
Great to see this. I liked using Chicken on Linux, but unfortunately for me, I am on Windows and do not like using Cygwin or Mingw to compile it for Windows. There is no current MSVS solution as far as I know for now. I use Racket, Extempore [1], and I play with Shen [2] for my lispy appetite. Shen has been ported to Chez Scheme, which is also what Racket is being re-written in (sort of).

[1] https://extemporelang.github.io

[2] http://shenlanguage.org

[+] mattnewport|7 years ago|reply
Not sure if this will work for your use case but have you tried compiling it with WSL? It's much more convenient way to work with Linux software on Windows but may not be what you're looking for if you want to link a library in to a Windows project.
[+] stfwn|7 years ago|reply
For those wondering what this is like I was: Chicken is a compiler for a version of the Scheme language, which is a dialect of LISP. It compiles to portable C.
[+] atticmanatee|7 years ago|reply
THANK YOU! My Google-Fu was failing on me!
[+] qwerty456127|7 years ago|reply
Is there some lisp that has offers nearly as powerful and fast data processing and tensor algebra facilities like Pandas and Numpy of Python? I would love to use a lisp but am not sure how well are they going to manage with huge 2-3D arrays.
[+] baldfat|7 years ago|reply
Yes there is a really great statistics functional programming language that was founded on being a scheme for data science. Unfortunately the data scientist back then were not training in doing code well so the examples of the language got cluttered up but there is a great functional Scheme right in there.

That language is R. http://adv-r.had.co.nz/Functional-programming.html

I learned Racket (Lisp) and then realized I had so many thing inside of R that I was missing. Hadley Wickham's tidyverse and funtional Advance R book changed everything in my code.

[+] markc|7 years ago|reply
There are multiple Clojure options for high-speed matrix processing. E.g.

    https://neanderthal.uncomplicate.org/
    https://kieranbrowne.com/research/clojure-tensorflow-interop/
    https://mxnet.incubator.apache.org/api/clojure/index.html
[+] 3rdAccount|7 years ago|reply
Julia can show s-expressions for an expression I think...sorta what you asked, but not really I know.

If you really want something like pandas + lisp then you probably need Common Lisp and have to dig for some libraries.

[+] rileyphone|7 years ago|reply
You could always just use Hy, which is a clojuresque language that runs on top of python and can use its libraries.
[+] pumanoir|7 years ago|reply
Chicken sounds super interesting but I’ve never used it. Anybody have a tutorial(s) on how to get started using chicken? And specially how do you do to 2D graphics with it?
[+] RaycatRakittra|7 years ago|reply
Looked really cool. Downloaded it via Homebrew but my first test file[1] ran into a myriad of issues like 'unbound variable: use', 'unbound variable: printf', 'import had trouble expanding the macro: srfi-1' (paraphrasing). Not sure if the Homebrew recipe is broken but I would love to use this for some of my side projects.

Congrats on the release!

[1] test.scm

(use srfi-1) (define (test number1 number2) (printf "Sum: ~s" (+ number1 number2))) (test 1 2)

[+] sjamaan|7 years ago|reply
This is an old example. This should now be something like

(import (chicken format)) (define (test number1 number2) (printf "Sum: ~s" (+ number1 number2))) (test 1 2)

If you're trying to actually use srfi-1, that's now imported via (import srfi-1). (use...) no longer exists.

[+] alg0rith|7 years ago|reply
Just curious. Does anyone use Chicken Scheme in production?
[+] sjamaan|7 years ago|reply
The CHICKEN team is a big fan of dog fooding: the wiki, pastebin, egg documentation search (which is yet to be updated to C5) and our infrastructure sysadmin stuff in the background is all written in CHICKEN.
[+] gmfawcett|7 years ago|reply
It's not a high-volume application by any means, but I wrote an online testing program (multiple choice, etc.) in Chicken that's been running at our university for about twelve years. It was meant as a short-term, interim solution until the bugs in our 'enterprise' testing system were fixed... but it still finds some use today. (I just took a peek at the database; we've had about 250,000 test submissions over the years. Not bad for a little Scheme app.)
[+] jxy|7 years ago|reply
I have been playing with gambit and gerbil in my spare time. How is chicken compared with gambit and gerbil?
[+] sjamaan|7 years ago|reply
CHICKEN has a more permissive license, larger community (and therefore more libraries) and a slightly better bus factor than Gambit and Gerbil.

Gambit is faster on many benchmarks and has multiple backends. This makes it easier to run inside a browser, for example, with the JS backend. It also has better introspective capabilities than CHICKEN, if I remember correctly.

I believe Gambit is currently R5RS only with no plans to implement R7RS, and it has no native module system like CHICKEN does. If I understand correctly, Gerbil adds this to Gambit, but there's also the Black Hole module system. I don't know how compatible those are.

Both have full continuations, tail call optimization and take the standard serious. You can compile stand-alone programs with both, and both can link to C libraries quite easily.

Full disclosure: I'm a CHICKEN developer and my knowledge of Gambit is somewhat limited.

[+] shakna|7 years ago|reply
Really exciting!

Unfortunately, it looks like some of the page references are broken for eggs. [0]

[0] http://wiki.call-cc.org/eggref/5/mpi

[+] sjamaan|7 years ago|reply
I've notified the author of the egg. Should hopefully be fixed soon. Thanks for reporting!
[+] kristianp|7 years ago|reply
This page might give an idea of what's new in Chicken 5:

https://wiki.call-cc.org/chicken-5-roadmap

[+] sjamaan|7 years ago|reply
That wiki page was just an informal working page for the core team to keep us focused. That's why it is a bit messy and incomplete, plus it mentions some changes that we decided not to include in CHICKEN 5.0.0.

I wrote a more accessible introduction to CHICKEN 5's new features on my blog, https://www.more-magic.net/posts/chicken-5.html

[+] i_feel_great|7 years ago|reply
Whatever happened to the Chicken Gazette?
[+] sjamaan|7 years ago|reply
The Gazette archive is still there at http://gazette.call-cc.org/archive.html but the Gazette hasn't seen new issues in a long time.

It turned out that keeping a regular writing schedule with a small group of people is quite hard. Gathering the news and coming up with interesting new content is quite a lot of work. Eventually the releases started to drift further apart because people did not find the time to write the articles anymore. Eventually nobody volunteered to put in the time anymore.

It's unfortunate, but people have busy lives and we're happy we find the time to develop the CHICKEN code itself. So, I don't see a way to restore it unless droves of new volunteers step up.

[+] loosetypes|7 years ago|reply
Would Chicken Scheme work ootb to code along with SICP?
[+] sjamaan|7 years ago|reply
There are minor differences, as SICP was written with MIT Scheme in mind, so you'll run into nonstandard procedures like "1+" not existing. In CHICKEN that one is called "add1". But for the most part, things should just work.