Hacker News (curated)new | past | comments | ask | show | jobs| show hidden

I feel the lisp constructed on top needs significant language expertise. Lispy constructs of defvar, defconst, defcustom, alist, cl-loop etc. are quite extensively used in emacs - and need an understanding quite unique to Lisp. Of course, the domain then builds on top of this shared understanding of the contructs themselves.

I would say that loss of expertise in emacs-lisp is a significant loss, even if there continues to exist C-expertise globally.



It's just a Lisp dialect at the end of the day and not much more complicated to learn than Javascript. The only unusual aspect is its prevalent use of dynamic scoping, although nowadays lexical scoping is also available and encouraged AFAIK.

emacs 31+ started emiting this warning for my custom Lisp files:

Warning (files): Missing ‘lexical-binding’ cookie in "~/.emacs.d/custom.el". You can add one with ‘M-x elisp-enable-lexical-binding RET’. See ‘(elisp)Selecting Lisp Dialect’ and ‘(elisp)Converting to Lexical Binding’ for more information.

I am still trying to figure out what to do! The manual is quite verbose and I haven't had the patience to go through it yet.


If you open the file and execute:

  M-x elisp-enable-lexical-binding RET
It will add a cookie (lexical-binding) to the top of the file. If you want to do it manually put this:

  ;; -*- lexical-binding: nil; -*-
or this:

  ;; -*- lexical-binding: t; -*-
at the top of your custom.el file. They want it to be explicit now because eventually lexical will be the default. If you put in the former then when lexical becomes the default, the file will still use the current dynamic bindings. And if you use the latter, if there are issues you'll discover them now before the default changes and you're surprised by it.

There's a wealth of packages and the documentation for emacs-lisp is quite extensive. It's not some esoteric language. But what I'm talking about is that the code for the packages can be quite simple and readable.



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact | github