Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Woah, emacs lisp now has lexical scoping


Yes, this is pretty radical. More info from the manual:

http://www.gnu.org/software/emacs/manual/html_node/elisp/Usi...

from http://www.gnu.org/software/emacs/manual/html_node/elisp/Lex... -

Such code is also much more friendly to concurrency, which we want to add to Emacs in the near future.

Exciting times ahead ...


Indeed, will be nice when something blocking in one window doesn't lock up the whole emacs process.


YES! E.g. try running emacs on $host and run bbdb; go to some other machine and ssh ~/.bbdb $host:~/.bbdb; then ssh $host emacsclient. Now it's unresponsive until you walk over on your feet to $host and answer the revert-or-not question :(


Yes, ohhh, yes, I want that!


It's opt-in, otherwise most packages would break.

To enable it per-file use a file-local variable:

  ;;; -*- lexical-binding: t -*-


How ironic. Wouldn't it make much sense to enable it per lexical scope?

Or as Perl did it (18 years ago) with a new keyword, so that you can use both dynamic and lexical variables in the same file? Best of both worlds.


You can use both in the same file; you just need to declare the dynamic ones using defvar, etc. If you turn lexical-binding on blindly, the compiler will usually tell you which variables you need to mark as dynamic.


(eval form t) enables lexical scoping for form. http://yoo2080.wordpress.com/2011/12/31/lexical-scoping-and-... is highly recommended reading btw.


It has to be this way to remain backward-compatible. Similar to the issues Perl is going through with things like enabling strict by default (you have to request at least a certain version, I think 5.12), and distinguishing a Perl 6 file from Perl 5 one.


Well, there has been lexical-let in the cl package for quite a while.




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

Search: