Settings

Theme

Steel Bank Common Lisp 2.3.5 released

sbcl.org

130 points by mm007emko 3 years ago · 31 comments

Reader

vindarel 3 years ago

For those who didn't follow, some news from 2022:

- SBCL is now callable as a shared library

- SIMD support

- faster (de)compression with zstd

- TRACE supports tracing macro functions, compiler-macro functions, individual methods and local functions (flet and labels)

- the SBCL repository reached 20,000 commits.

- Prebuilt SBCL binary for Android (Termux) (unofficial)

https://lisp-journey.gitlab.io/blog/these-years-in-common-li...

  • ravi-delia 3 years ago

    SIMD support is huge, and if you're willing to do a little hacking (SBCL is very easy to extend) you can even use it without the intrinsics

    • thoi23u4o3434 3 years ago

      In fairness, "SIMD support" is not exactly "the compiler can reduce code to AVX instructions" but more like "you can now write non-portable custom assembly-like code to make your code faster".

      • ravi-delia 3 years ago

        That's what I mean by "willing to hack"! Getting the compiler to use SIMD instructions is actually pretty easy- you just specify where to use them and let it handle them. Then you pinky promise that your array really is made of floats and turn safety off.

      • rice7th 3 years ago

        Still better than no SIMD at all imo

        • koito17 3 years ago

          Yup. I used to use Clozure CL all the time, but since the code I write tends to involve lots of number crunching, SB-SIMD and Loopus are indispensible.

          Even before SB-SIMD, SBCL has always seemed like the best Common Lisp implementation for any arithmetic. Or at least this seems to be case when you benchmark CCL against it :)

      • smegsicle 3 years ago

        but i assume a somewhat nicer interface than the internal VOP intrinsic stuff that sbcl has always had

reikonomusha 3 years ago

For such a small team developing SBCL, it has been hugely stable, consistent, and advancing for years. SBCL has many ways it could improve, but it definitely exceeds most bars of quality for serious—even commercial—projects.

  • tmountain 3 years ago

    These kind of projects always impress me. Is it commercially backed or just a labor of love for the maintainers?

    • reikonomusha 3 years ago

      It's a mix of volunteer work, contract work, and contributions from paid employees. Google historically has been a big contributor since they use SBCL for Google Flights.

      • mepian 3 years ago

        Wasn't ITA Software using CCL before their acquisition by Google? I wonder why they switched to SBCL. Right now CCL seems to be rather understaffed but this wasn't the case when they switched, as far as I know.

dmpk2k 3 years ago

I haven't looked in a while, so I'm wondering what SBCL's GC latency profile is like nowadays. IIRC, it used to be a non-incremental STW conservative GC, which is a bit unfortunate.

  • vindarel 3 years ago

    It's at least good enough to release a game on Steam. Here's an experience report: https://raw.githubusercontent.com/Shinmera/talks/master/els2... (https://kandria.com/)

    > Overall we have needed to do surprisingly little actual performance analysis and optimisation work to make Kandria run well. This is definitely in large part thanks to SBCL’s quite good native code compiler and type inference systems, and the prior work we’ve done to design critical libraries to not be completely obscene in terms of their performance characteristics.

    > […]

  • jjtheblunt 3 years ago

    This might align with your interest, from 2023.

    https://applied-langua.ge/~hayley/swcl-gc.pdf

  • Archit3ch 3 years ago

    Follow-up question: is there a way to "freeze" the GC? As in, I've done all my allocations, now I want to run a main loop uninterrupted, and force clean up inside at_exit().

  • aidenn0 3 years ago

    It's also generational and moving, but other than that you're right.

    For anyone wondering how it can be conservative and moving, for values that may or may not be pointers, it treats the data as pinned.

    Originally CMUCL targeted RISC processors that had a lot of registers, so it maintained two stacks. X86 is extremely register starved, so the conservative GC was written.

    In practice, the conservative nature doesn't cause problems on 64 bit architectures.

    • firstlink 3 years ago

      Why would a lisp gc need to be conservative, anyways? Unless we're talking about ffi or something.

      • moonchild 3 years ago

        Untagged memory addresses or integers may be produced as intermediate results.

  • ravi-delia 3 years ago

    I've found it to be pretty performant, but I rarely push it so who knows. SBCL is often good at avoiding allocations if you type hint things, which I'm usually doing when I need performance (messing around with sims mostly). But of course if you're doing unavoidably allocation-heavy work that doesn't do anything for you, so I'm not sure how much the gc hurts

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection