Extensibility: The "100% Lisp" Fallacy

(kyo.iroiro.party)

52 points | by todsacerdoti 8 hours ago

6 comments

  • vindarel 6 hours ago
    Recently added in Lem: tree-sitter for JSON, YAML, Nix, Markdown, WAT; new language modes: Clojure, Perl, Kotlin, Zig (with LSP); git-gutter mode.

    Lem has a (quite simple still) Git/hg/fossil interactive mode (interactive rebase is there but no reword for instance) and org-mode support is coming (https://github.com/mahmoodsh36/organ-mode).

    Lem now is ncurses + webview (+ the non-longer maintained SDL2 backend) and it has daily multi-platform binaries. Try it out!

    https://lem-project.github.io/

    • xedrac 5 hours ago
      I tried the latest nightly release AppImage on Fedora 43 and got a nice undefined symbol error:

          /usr/lib64/gio/modules/libdconfsettings.so: undefined symbol: g_assertion_message_cmpint
          Failed to load module: /usr/lib64/gio/modules/libdconfsettings.so
          /usr/lib64/gvfs/libgvfscommon.so: undefined symbol: g_task_set_static_name
          Failed to load module: /usr/lib64/gio/modules/libgvfsdbus.so
      
      So I tried out the container version with podman and that worked. I am familiar with Emacs, so some things were natural to me. I like Lem quite a bit. But to really drive with it, I need:

          - Solid LSP support
          - Project scoped buffer switching/searching
          - Great vim keybinding support (this seems to have improved since last I tried lem years ago)
          - Tree-sitter support for the languages I care about.
      
      According to the website, LSP support is still a WIP. I didn't want to go through the hassle of testing it out in the docker container. From what I can tell, there is no project scoping for buffers, but I might be wrong.

      All in all, a big improvement from a few years ago when I last tried it!

  • codeflo 1 hour ago
    The author mentions in the article text (and re-emphasizes in a footnote) that you will want to use platform-specific APIs for improved accessibility even when this limits extensibility:

    > you will want to support font fallback, input methods and screen readers, all of which require interacting with platform specific APIs and are thus much less customizable

    May I ask the heretical question why of these two situations:

    (a) you have one editor that makes compromises between extensibility and accessibility

    (b) you have one non-accessible editor that goes all-in on extensibility, and one not-fully customizable editor that goes all-in on accessibility

    one would prefer (a) over (b)? Situation (a) sounds like strictly more total effort for a worse outcome, as you have one much more complex system that tries to navigate both purposes.

  • acuozzo 4 hours ago
    Interesting that there was no mention of Symbolics Lisp machines.
  • jibal 6 hours ago
    > It’s not wrong

    Glad we settled that.

  • xvilka 3 hours ago
    Common Lisp standard (and its implementations) really needs an uplift to shine. There are so many shortcomings and missing features in it that listing them here would take a lot of space. Instead, I will point to some proposals like Common Lisp 3[1] and Compact Lisp[2]. Meanwhile proper typing should be introduced out of the box, like in Coalton[3], for example. Also, pattern matching should be the part of the language, not some external library [4]. Even something basic but foundational is not yet standardized - Unicode support!

    [1] https://github.com/blakemcbride/common-lisp-3

    [2] https://github.com/lassik/compact-lisp

    [3] https://coalton-lang.github.io/

    [4] https://lispcookbook.github.io/cl-cookbook/pattern_matching....

    • kscarlet 2 hours ago
      I don't find any good idea in [1].

      > 1. The function and variable namespaces have been collapsed into a single namespace.

      Lisp-N, package system and homoiconic macro is a local optimum (IMO practically much better than Scheme, but I digress) for variable capture issue in metaprogramming. Now it's saying let's bring back the footguns and also you have to write lst instead of list. Please, no.

      > 2. ...adds a layer on top of CLOS

      How about a library? Why a new standard?

      > 3. Common Lisp 3 supports case-sensitive symbols.

      This I can relate.

      > 4. Common Lisp 3 supports native threads. > 5. Common Lisp 3 supports tail recursion elimination.

      Practically not a problem for today's CL. There's nothing to fix.

      > Meanwhile proper typing should be introduced out of the box, like in Coalton[3], for example.

      Are you saying Coalton as an embedded language should be introduced out of the box? I'm afraid it may quickly earn similar reputation as LOOP and FORMAT. Or are you saying the whole language should adopt Coalton-like typed semantics? Then I don't think it's even possible for large part of the language, especially when you take interactivity into account. What happens when a function gets redefined with different type? Worse, how about CHANGE-CLASS and UPDATE-INSTANCE-FOR-REDEFINED-CLASS?

      > Also, pattern matching should be the part of the language, not some external library [4].

      Why not? Common Lisp as a living and extensible language now evolves by adopting de-facto standard (trivia for pattern matching, bt for native threads, usocket for network, ASDF for build system, etc). Why need a committee or other form of authority to prescribe what everyone gets to use when we have a maximally democratic process?

      • xvilka 2 hours ago
        > Are you saying Coalton as an embedded language should be introduced out of the box?

        Not the whole language as is but proper algebraic types at least. Just like most modern languages do.

        > Why not? Common Lisp as a living and extensible language now evolves by adopting de-facto standard (trivia for pattern matching, bt for native threads, usocket for network, ASDF for build system, etc). Why need a committee or other form of authority to prescribe what everyone gets to use when we have a maximally democratic process?

        Totally a valid point but then something like Compact Lisp proposal to strip the language to the bare minimum and extract everything out in libraries would make way more sense than the huge and only half-used CL standard we have now.

        • metroholografix 1 hour ago
          If you want Scheme, go use Scheme because these are not arguments for Common Lisp. There is tons of value in the CL specification being this big and I'm happy I can still run code I wrote more than 25 years ago (or third party code written more than 50 years ago) without any issues.

          Generally, contemporary folks that propose improvements to the CL spec tend to be misinformed / misguided and/or lacking experience to realize why their proposed improvements are bad ideas.