10 ms·
Chicken Scheme 5.0
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
- loosetypes 8y agoWould Chicken Scheme work ootb to code along with SICP?
- sjamaan 8y agoThere 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.
- lerax 8y agoGreat news, Mario.
- stfwn 8y agoFor 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 8y agoTHANK YOU! My Google-Fu was failing on me!
- dkersten 8y agoMore information on wikipedia: https://en.wikipedia.org/wiki/CHICKEN_(Scheme_implementation) https://en.wikipedia.org/wiki/CHICKEN_(Scheme_implementation...
- shakna 8y agoReally exciting! Unfortunately, it looks like some of the page references are broken for eggs. [0] [0] http://wiki.call-cc.org/eggref/5/mpi http://wiki.call-cc.org/eggref/5/mpi
- sjamaan 8y agoI've notified the author of the egg. Should hopefully be fixed soon. Thanks for reporting!
- rvense 8y agoGreat 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.
- i_feel_great 8y agoWhatever happened to the Chicken Gazette?
- sjamaan 8y agoThe Gazette archive is still there at http://gazette.call-cc.org/archive.html 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.
- fithisux 8y agoBravo guys.
- sebcat 8y agoI 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 https://github.com/sebcat/kylling/blob/master/kylling.scm
- bjoli 8y agoThe 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 8y agoI 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.
- Reisen 8y agoOne 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 https://www.more-magic.net/posts/internals-gc.html
- tsukikage 8y agoJOOI, what's your embeddable Scheme of choice?
- bjoli 8y agoGuile or Chibi depending on what I want. Guile is about 2mb and seriously fast. Chibi is tiny and not very fasy.
- zelly 8y agoDo you statically link Guile? Guile is a pleasure to work with, but I was under the impression that you can’t embed Guile because it’s GPL.
- admax88q 8y agoGuile ls LGPL. You can statically link to LGPL libraries so long as you also provide your program in "object form" so that the user can re-link their program with a different version of guile. See: https://www.gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynamic https://www.gnu.org/licenses/gpl-faq.html#LGPLStaticVsDynami...
- nrclark 8y agoSurprised to see Guile weighing in at 2mb - my experience with it on Linux was a much larger install. What makes the Linux packages so much larger out of curiosity? I profiled it at more like 50-80mb when I compiled it a couple of months ago.
- alg0rith 8y agoJust curious. Does anyone use Chicken Scheme in production?
- sjamaan 8y agoThe 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.
- mario-goulart 8y agoAlso the test stuff and the compiler itself. :-) Regarding non-own dog food, http://wiki.call-cc.org/Software http://wiki.call-cc.org/Software lists some projects using CHICKEN.
- gmfawcett 8y agoIt'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.)
- ziotom78 8y agoWow! 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_Frequency_Instrument https://en.wikipedia.org/wiki/Planck_(spacecraft)#Low_Freque...
- Koshkin 8y ago> LISP is perfect for creating HTML programmatically 'printf' has always worked just as fine for this purpose.
- hashkb 8y agoHave you worked with SXML or Reagent or anything like that? You're not wrong, but your comment makes me wonder if maybe you just haven't seen a more elegant solution than string interpolation.
- pumanoir 8y agoChicken 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?
- sjamaan 8y agoWe have a tutorials page at https://wiki.call-cc.org/tutorials https://wiki.call-cc.org/tutorials For graphics, see eggs categorized "graphics" at https://eggs.call-cc.org https://eggs.call-cc.org - The CHICKEN 5 list of graphics eggs is not very long, but for CHICKEN 4 there are quite a few eggs, some of which will probably be ported soonish. Your best bet is probably doodle: https://wiki.call-cc.org/eggref/4/doodle https://wiki.call-cc.org/eggref/4/doodle but feel free to browse the list of other graphics eggs.
- baldfat 8y agoI like Chicken but I still think Racket should be the first one learned, because of the documentation. https://docs.racket-lang.org/quick/ https://docs.racket-lang.org/quick/
- nickpsecurity 8y agoAnd the free, online textbook How to Design Programs. https://htdp.org/2018-01-06/ https://htdp.org/2018-01-06/
- qwerty456127 8y agoIs 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.
- 3rdAccount 8y agoJulia 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.
- e12e 8y agoI'm a great admirer of Julia, but I doubt it would appeal to those seeking a "true" lisp/scheme. Even if it's has a sane macro system, and much of the same power. You can indeed see s-expressions (search for "s-expression") : https://docs.julialang.org/en/v1/manual/metaprogramming/index.html https://docs.julialang.org/en/v1/manual/metaprogramming/inde... This nice talk mentions a bit on how Julia is (not) a lisp (if I recall correctly): "Julia: to Lisp or not to Lisp?": https://m.youtube.com/watch?v=dK3zRXhrFZY https://m.youtube.com/watch?v=dK3zRXhrFZY This might also be of interest: https://tpapp.github.io/post/common-lisp-to-julia/ https://tpapp.github.io/post/common-lisp-to-julia/ As well as (maybe) clasp: https://github.com/clasp-developers/clasp https://github.com/clasp-developers/clasp
- baldfat 8y agoYes 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 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.
- CamTin 8y agoAwful seems to have come a long way since I last looked at it: http://wiki.call-cc.org/eggref/4/awful http://wiki.call-cc.org/eggref/4/awful. Anybody used it in production?
- mario-goulart 8y agoI don't know many uses of awful in production. http://paste.call-cc.org/ http://paste.call-cc.org/ is awful-based. My home page (http://parenteses.org/mario/ http://parenteses.org/mario/) is also in awful, but it's nothing fancy. It's been ported to CHICKEN 5, by the way: http://wiki.call-cc.org/eggref/5/awful http://wiki.call-cc.org/eggref/5/awful
- todd8 8y agoI took a peek at the link to your homepage. I wish I had a cute dog named Ada!
- Iwan-Zotow 8y agoLazy cat named Curry
- RaycatRakittra 8y agoLooked 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 8y agoThis 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.
- RaycatRakittra 8y agoGotcha! Thanks for the update.
- gus_massa 8y agoYou can use two spaces at the beginning of the line to get code mode: ;(use srfi-1) ; <-- old (import (chicken format)) ; <-- new (define (test number1 number2) (printf "Sum: ~s" (+ number1 number2))) (test 1 2)
- peatmoss 8y agoAt 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.
- bcaa7f3a8bbc 8y agoBuilds are fully bit-for-bit reproducible!
- jxy 8y agoI have been playing with gambit and gerbil in my spare time. How is chicken compared with gambit and gerbil?
- sjamaan 8y agoCHICKEN 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.
- eggy 8y agoGreat 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 https://extemporelang.github.io [2] http://shenlanguage.org http://shenlanguage.org
- mattnewport 8y agoNot 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.
- johncowan 8y agoChicken works great on WSL. I used to have it on both WSL and Cygwin.
- eggy 8y agoI am not running Windows 10 on my daily computer. I’ll try this on my other box. Thanks!
- eggy 8y agoStill a bit of a hassle, but I got it working. It's a shame it isn't easier to install like Racket, Shen or CL. I really want this to build as a Windows exe without the need for the Posix stuff, I think?
- hajile 8y agoOne 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 8y agoWorking 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_ 8y agoChicken 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) https://en.wikipedia.org/wiki/CHICKEN_(Scheme_implementation... 2: http://wiki.call-cc.org/maintainers http://wiki.call-cc.org/maintainers 3: http://wiki.c2.com/?CheneyOnTheMta 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-1/ https://spin.atomicobject.com/2013/05/02/chicken-scheme-part... * https://spin.atomicobject.com/2013/06/19/chicken-scheme-spock-part-2/ https://spin.atomicobject.com/2013/06/19/chicken-scheme-spoc...
- codeulike 8y agoI 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!
- kristianp 8y agoThis page might give an idea of what's new in Chicken 5: https://wiki.call-cc.org/chicken-5-roadmap https://wiki.call-cc.org/chicken-5-roadmap
- sjamaan 8y agoThat 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 https://www.more-magic.net/posts/chicken-5.html