[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)