[HN Gopher] Cl-bodge: a cross-platform Common Lisp game and appl...
       ___________________________________________________________________
        
       Cl-bodge: a cross-platform Common Lisp game and application
       framework
        
       Author : bananaoomarang
       Score  : 68 points
       Date   : 2021-06-24 17:30 UTC (5 hours ago)
        
 (HTM) web link (borodust.org)
 (TXT) w3m dump (borodust.org)
        
       | vladharbuz wrote:
       | I think Lisp is wonderful, and I would love to develop games
       | using Lisp. However, I was under the impression that, by all
       | accounts, developing games in Lisp is completely unrealistic due
       | to the garbage collector.
       | 
       | I'm not familiar with Common Lisp, but in Racket, "GC pauses
       | [...] typically run from 50ms to 100ms" [0]. On a 16ms maximum
       | frame budget, that doesn't really work. Am I missing something?
       | 
       | [0]: https://docs.racket-
       | lang.org/portaudio/index.html#%28part._....
       | 
       | EDIT: I'm aware of GOAL at Naughty Dog -- Andy Gavin who wrote it
       | described the GC as being a problem in a HN comment. [1]
       | 
       | [1]: https://news.ycombinator.com/item?id=1998321
        
         | phoe-krk wrote:
         | Kandria is written in Common Lisp and manages to deal with
         | this.
         | 
         | https://kandria.com/
        
         | bananaoomarang wrote:
         | Naughty Dog historically disagreed with this [0], plenty of
         | games these days are developed in languages with GC but it is a
         | performance trade off. For maximum performance any Lisp is
         | probably not the way to go but I don't think it's unfeasable.
         | 
         | I want to say in general e.g. SBCL (a popular common lisp
         | implementation) will perform a lot better than Racket. Racket
         | is a great language but performance is not it's strong suit.
         | 
         | [0]:
         | https://en.m.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp
        
           | reikonomusha wrote:
           | Currently, but hopefully no longer in the near future, SBCL's
           | garbage collector is extremely meh. It's hard to tune, it
           | stops the world, etc.
           | 
           | Otherwise SBCL is a wonderful implementation.
        
         | soegaard wrote:
         | The `portaudio` is a few years old, so I have a hunch that the
         | comment refers to the old backend "Racket BC". The new backend
         | "Racket CS" has a new garbage collection mode "incremental",
         | which I understand is better for this usage scenario. I don't
         | have any numbers though.
        
           | soegaard wrote:
           | I got some more information from Flatt.
           | 
           | The new incremental mode means the 16ms deadline is within
           | reach. In fact if the screen is not involved, then 1-2ms is
           | reachable.
           | 
           | On macOS a screen-refresh can cause a 16ms pause.
        
         | reikonomusha wrote:
         | You can write Lisp in a way that you manage your own
         | allocations, including avoiding the heap. It defeats part of
         | the point of Lisp, but sometimes you can use that coding style
         | for a subset of your program that shouldn't be leaning on the
         | GC too much.
         | 
         | I don't do game development, but in scientific computing, I
         | rely on the GC a lot for workload preparation and other
         | administrivia, then adopt a GC-famished Lisp style for the
         | hardcore numerical computing part.
         | 
         | To be sure though, GC-less Lisp programming takes a great deal
         | of effort and knowledge. It's not exactly an a la carte option.
         | But the fact it's possible means latency-sensitive applications
         | are possible. Fortunately, Lisp's primary benefit isn't the GC.
        
           | User23 wrote:
           | And with DISASSEMBLE[1] you can easily check to be 100% sure.
           | 
           | [1] http://clhs.lisp.se/Body/f_disass.htm
        
         | blacktriangle wrote:
         | I can't speak to the exact numbers, but in comparison to Scheme
         | based lisps, CL has a much wider variety of optional hints you
         | can give to the run time to drastically speed up performance
         | thanks to its more pragmatic industrial heritage.
        
           | reikonomusha wrote:
           | This is correct. You can declare the types of objects
           | (DECLARE TYPE) which has repercussions on size and
           | allocation, you can declare the type of optimizations you
           | want to do (DECLARE OPTIMIZE) be them speed space or safety,
           | and you can declare things to be stack allocated (DECLARE
           | DYNAMIC-EXTENT), avoiding GC of a particular object
           | altogether.
        
             | crispyalmond wrote:
             | This is what makes CL feel so good to use. I can declare
             | optimizations and types and verify it with DISASSEMBLE to
             | see the resulting assembly. (If your CL implementation
             | compiles to assembly, such as SBCL) It's possible to make
             | things go really fast this way, too.
        
       | reikonomusha wrote:
       | There's a small, somewhat quiet, but very welcoming and very
       | vibrant community of Common Lisp games developers. #lispgames on
       | Libera is where many of them hang out.
       | 
       | There are a few people who are trying their darndest to build and
       | support libraries for graphics and other game-necessary things.
       | It's a tall order, since computers and operating systems have
       | become so wildly complex and incompatible. (It's no wonder people
       | go straight for the browser to do little graphics things now.)
       | Often it means finding a way to robustly interop with C++,
       | graphics cards, etc.
       | 
       | Borodust, Baggers, dto, mfiano, and Shinmera are but a few
       | Internet pseudonyms of people working hard along these lines.
       | Shinmera in particular just released a demo of his team's game
       | Kandria [1]. It's a cool and modern game with neat mechanics and
       | effects. It's powered in part by a ton of open source Common Lisp
       | tools he's developed.
       | 
       | [1] https://kandria.com/
        
         | nerdponx wrote:
         | I feel like this is a good time to shoutout to Baggers for the
         | excellent "Little Bits of Lisp" Youtube series:
         | https://www.youtube.com/watch?v=m0TsdytmGhc&list=PL2VAYZE_4w...
        
         | rgrmrts wrote:
         | On a somewhat related aside, the book Land of Lisp [1] is an
         | interesting introduction to both Common Lisp and game
         | programming. If anyone, like me, was interested in learning
         | Common Lisp through a casual and fun mode, I highly recommend
         | the book.
         | 
         | [1] http://landoflisp.com/
        
           | blacktriangle wrote:
           | I generally recommend people avoid Land of Lisp as an
           | introduction to CL book. It's simultainisouly too easy and
           | too hard for most people approaching the language in that it
           | goes way too briefly over core concepts then all of a sudden
           | shifts gears into much more involved programming.
           | 
           | That being said, it's probably the best second book on CL
           | ever. It showcases a variety of lisp techniques on some very
           | real and fun example projects working itself all the way up
           | to a web base game rendered via SVG which is quite fun.
        
             | rgrmrts wrote:
             | Fair enough! I haven't gone through it entirely. What do
             | you recommend as primary texts? I have a few in mind
             | (Practical Common Lisp, for example) but haven't actually
             | touched them yet.
        
             | ngcc_hk wrote:
             | But for simply and phone based game, would concentrate on
             | JS better than on CL due to the support, and easy of doing
             | both desktop and phone. Wonder?
        
         | crispyalmond wrote:
         | Even kandria itself is open-source (I believe) here[0].
         | 
         | [0] https://github.com/Shinmera/kandria
        
       | crispyalmond wrote:
       | Also check out alien-works[0] by same author (borodust). This guy
       | just works non-stop. I find it inspiring in a way.
       | 
       | [0] https://github.com/borodust/alien-works
        
       ___________________________________________________________________
       (page generated 2021-06-24 23:00 UTC)