Extensibility: The "100% Lisp" Fallacy

(kyo.iroiro.party)

40 points | by todsacerdoti 5 hours ago ago

6 comments

  • vindarel 3 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 2 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!

  • xvilka an hour 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 4 minutes 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?

  • acuozzo 2 hours ago

    Interesting that there was no mention of Symbolics Lisp machines.

  • jibal 4 hours ago

    > It’s not wrong

    Glad we settled that.