[HN Gopher] Fennel: A Practical Lisp
       ___________________________________________________________________
        
       Fennel: A Practical Lisp
        
       Author : mattroelle
       Score  : 95 points
       Date   : 2022-04-14 16:45 UTC (6 hours ago)
        
 (HTM) web link (www.mattroelle.com)
 (TXT) w3m dump (www.mattroelle.com)
        
       | esrh wrote:
       | Calvin rose, the author of fennel is a really great programmer
       | and an even better language designer. Personally, i dont use or
       | like lua, but I'm a big fan of one of his other projects,
       | janet[0]
       | 
       | [0] https://github.com/janet-lang/janet
        
         | pull_my_finger wrote:
         | > i dont use or like lua, but I'm a big fan of one of his other
         | projects, janet
         | 
         | As a big fan of both Lua _and_ Janet, I'll just point out that
         | a lot of what makes Janet nice and interesting are in fact
         | inspired by Lua. Tables, fibers (coroutines), prototypes
         | (metatables/metamethods), custom module loaders, a lot of the
         | API, the peg parser (LPEG), etc etc. I understand no language
         | is for everyone, but the influence can be felt throughout Janet
         | if you're familiar with both.
        
           | mattroelle wrote:
           | I'll also add that Fennel fixes some of things about Lua most
           | people dislike, like the global variables by default thing.
           | IMO it's worth checking out even if you didn't like Lua at
           | first
        
         | andai wrote:
         | I love that it comes with build instructions for Haiku--and
         | that they're listed before Windows!
        
         | kbd wrote:
         | I didn't realize the author of Janet was the author of Fennel,
         | thanks for making the connection.
        
           | mattroelle wrote:
           | Yup, same author! Although to my knowledge Calvin has mostly
           | stepped away from the Fennel project at this point. It is
           | primarily maintained by the same dev that made Clojure's
           | Leiningen, technomancy.
        
       | andai wrote:
       | See also:
       | 
       | Fennel - Lisp in Lua (2020, 112 comments)
       | https://news.ycombinator.com/item?id=24390904
       | 
       | Fennel - Lisp in Lua (2018, 62 comments)
       | https://news.ycombinator.com/item?id=18016168
       | 
       | Neovim Configuration and Plugins in Fennel Lisp (2019, 19
       | comments) https://news.ycombinator.com/item?id=21676606
       | 
       | Raymarching with Fennel and LOVE (2019, 3 comments)
       | https://news.ycombinator.com/item?id=24835766
        
       | ncmncm wrote:
       | Curious how this compares to Guile.
       | 
       | Guile is designed for embedding. But it is vanilla Scheme, which
       | might not be as modern as the Fennel flavor.
       | 
       | Maybe, the Fennel all gets lowered to Lua at build time, so you
       | don't need a (maybe more expensive) Guile runtime? Or, Lua has a
       | more comprehensive library ecosystem?
        
         | harryvederci wrote:
         | If I recall correctly, you can do both. You can compile your
         | fennel code to lua, or you can use fennel as a library in your
         | lua application so it will understand your fennel code.
        
         | hcs wrote:
         | Correct, it's all converted to Lua, Fennel has no runtime.
        
       | jonpalmisc wrote:
       | Fennel is really cool, and the fact that it builds on Lua--an
       | already-popular language--is a huge win; Fennel gets access to
       | the entire Lua ecosystem.
       | 
       | Importantly, Lua is pretty easy to embed in native applications.
       | I haven't found a Lisp or Scheme as easily-embeddable as
       | Lua(+Fennel).
       | 
       | It's also a good drop-in replacement for Lua. I write my
       | Hammerspoon config in Fennel, and hopefully my Neovim config soon
       | as well.
        
         | bjoli wrote:
         | Chibi scheme is easily embeddable. Guile is a different beast
         | to manage, but then you get a lot more power and speed. Not
         | luaJIT speed, of course, but a lot faster than vanilla lua, and
         | with proper threads as a bonus.
         | 
         | The others I haven't tried embedding, but I hear racket is
         | really no fun to embed,but things might have changed with the
         | chez transition.
        
           | petre wrote:
           | Chibi Scheme, interesting. Also beautiful. Thank you.
           | 
           | Racket CS is also quite fast, comparable to Lua or faster
           | (for numeric ops). It also uses rational numbers which makes
           | it useful for exact numeric operations.
        
         | rufugee wrote:
         | As a fellow hammerspoon user who is not smitten with Lua's
         | syntax, I would really appreciate seeing your config :-)
        
           | jonpalmisc wrote:
           | It's pretty minimal right now as I'm in the process of
           | porting over a larger config. Here's what I have, although
           | you might find it might be a bit underwhelming:
           | 
           | https://github.com/jonpalmisc/dotfiles/blob/master/hammerspo.
           | ..
        
         | [deleted]
        
       | keb_ wrote:
       | I love Lua and the Lua community, but as a native Windows user,
       | it's historically been a nightmare to use. To this day, I have
       | never gotten LuaRocks to work reliably on Windows.
       | 
       | This is very different than Node + NPM, which you can get set up
       | and going in <5 minutes.
        
         | ncmncm wrote:
         | So, another advantage, then?
        
           | keb_ wrote:
           | I'm not sure I follow; it's an advantage that it doesn't work
           | well on Windows?
        
             | ncmncm wrote:
             | Might help encourage you to move away from Windows.
        
               | keb_ wrote:
               | I have plenty of reasons to move away from Windows, and
               | also plenty of reasons to stay. :) But I think it's
               | overall a net-negative that there is no simple way to use
               | LuaRocks on Windows. I don't believe in gatekeeping,
               | especially when so many programmers still begin their
               | journey on Windows.
        
       | charbuff wrote:
       | What kind of possibilities are there for Lua on android and ios
       | app development? Any experiences there?
        
       | mattroelle wrote:
       | If you're interested in discussing further, there is a growing
       | community that hangs out on #fennel on the Libera Chat IRC
       | server. You can connect via matrix chat using
       | https://matrix.to/#/!rnpLWzzTijEUDhhtjW:matrix.org I'll be
       | hanging out there all day today and I'd love to talk about
       | Fennel. There is also a Fennel User Group meeting this Saturday
       | at 10am, open to all. More info at https://fennel-lang.org/events
        
       | usgroup wrote:
       | Thanks I will give this a go. I had a long fling with Lua a while
       | back. Wrote everything in Lua -- it is a great language. I would
       | have used it for data science if only it had more well maintained
       | packages. The main API for Torch was in Lua for a while before
       | they abandoned it for Python. Had that carried on we could be
       | using Torch with Fennel right now.
        
         | mattroelle wrote:
         | Not sure when you used Lua but there is a package manager
         | called LuaRocks now which has some pretty nice packages in it
         | for many purposes. I don't think it'd be too hard to get Lua
         | running inside of a Python env either :)
         | 
         | https://luarocks.org/
        
           | giraffe_lady wrote:
           | It's really pretty rough compared to everything else I've
           | used. I really don't feel like luarocks solves very many of
           | my problems. A _lot_ of gaps in there, or libraries that only
           | target 5.1, or only luajit. Or are completely unmaintained,
           | or have poorly documented dependencies on C libraries. etc
           | etc.
           | 
           | I use lua a lot and like it fine but the
           | build/dependency/tooling situation is a fucking mess. It
           | exposes you to a lot of the inconvenience of C in the end.
        
             | mattroelle wrote:
             | Yeah, my experience is limited mostly to web dev, via
             | OpenResty, and game dev, via love2d.
             | 
             | The Lua libraries in these areas are very well maintained.
             | 
             | That said 90% of the time libraries ship as a single lua
             | file and it's often better to copy and paste it into your
             | project. I have a modified version of lume I like to use
             | floating around :)
             | 
             | This spartan approach to libraries is a strength of Lua.
        
       | abrax3141 wrote:
       | So, I don't exactly see how one uses this in an already-embedded
       | Lua. For example, my son knows Lisp, and a bit of Lua because he
       | uses PowderToy, which (to your point) has built-in Lua. So if he
       | wanted to program his Lua extensions to PowerToy in Lisp (Fennel)
       | instead of Lua, how would he go about it, exactly? Compile
       | outside of PT from Lisp to Lua and then load the Lua code into
       | PT, or, run the Fennel Lua code on PT's internal Lua? Either
       | seems clunky. I skimmed the online doc, and there may be
       | someplace that gives guidance on this, but I didn't see it right
       | away. If you can point it out (or, if it doesn't exist, perhaps
       | explain a bit) that would be great. Thanks!
        
         | mattroelle wrote:
         | Hi there! Once you have lua running somewhere you're 90% of the
         | way there. You can do AOT compilation which will output lua
         | code via.
         | 
         | fennel -c my-fennel-code.fnl
         | 
         | Or you can use the lua package api to automatically load .fnl
         | files via require seamlessly:
         | 
         | local fennel = require("fennel") table.insert(package.loaders
         | or package.searchers, fennel.searcher)
         | 
         | Enjoy!
        
         | az_reth wrote:
         | It seems those are indeed the two options. This link gives
         | details on how to perform either or the other.
         | 
         | https://fennel-lang.org/setup#embedding-fennel
        
         | mattroelle wrote:
         | The primary maintainer of Fennel, Phil Hagelberg, has put
         | together some brief instructions on how to get Fennel running
         | inside of Powder Toy for you :) https://p.hagelb.org/hello-
         | powdertoy.fnl.html
        
       | teataster wrote:
       | The thing I hate the most about Fennel is when you go back to
       | Clojure and type `print` rather than `println`.
        
         | cyberbanjo wrote:
         | (ns foo.bar         (:refer-clojure :exclude [print] :rename
         | {print println}))            (print "Should have a newline")
        
           | kgwxd wrote:
           | ;; How to infuriate your co-workers
        
             | kleiba wrote:
             | Workaround:                   print C-x a - println
             | M-x abbrev-mode
        
               | harryvederci wrote:
               | Not all clojurians use emacs ;)
        
             | [deleted]
        
             | [deleted]
        
       | rcarmo wrote:
       | I've been considering rewriting a bunch of my stuff in Fennel
       | since it has two other advantages the article doesn't point out:
       | both Lua and Fennel are _very_ stable and unlikely to go through
       | major changes over, say, the next five years or so.
       | 
       | That kind of thing also has a lot of value when you only want to
       | write something once.
        
       ___________________________________________________________________
       (page generated 2022-04-14 23:01 UTC)