unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
@ 2015-05-24 10:19 Philipp Stephani
  2015-05-25  1:59 ` Stefan Monnier
  0 siblings, 1 reply; 12+ messages in thread
From: Philipp Stephani @ 2015-05-24 10:19 UTC (permalink / raw)
  To: 20640


The manual
(https://www.gnu.org/software/emacs/manual/html_node/elisp/Using-Lexical-Binding.html)
says about `lexical-binding':

   Note that unlike other such variables, this one must be set in the
   first line of a file.

I think the only reason for this is an implementation detail
(lexical-binding is parsed by other code than the other file-local
variables).  It would be great to make it consistent with other
variables so that the user doesn't need to care about the difference.



In GNU Emacs 24.5.1 (x86_64-apple-darwin14.1.0, NS apple-appkit-1344.72)
 of 2015-04-12 on p
Configured using:
 `configure --prefix=/usr/local/Cellar/emacs/24.5
 --enable-locallisppath=/usr/local/share/emacs/site-lisp
 --infodir=/usr/local/Cellar/emacs/24.5/share/info/emacs
 --with-file-notification=gfile --with-dbus --with-gnutls --with-rsvg
 --with-imagemagick --without-popmail --with-ns
 --disable-ns-self-contained'

Important settings:
  value of $LANG: de_DE.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Emacs-Lisp

Minor modes in effect:
  tooltip-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
(New file)
For this change to take effect revisit file using s-u
Saving file /tmp/foo.el...
Wrote /tmp/foo.el
C-x C-g is undefined
You can run the command `revert-buffer' with s-u

Load-path shadows:
None found.

Features:
(shadow sort gnus-util mail-extr emacsbug message format-spec rfc822 mml
easymenu mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils warnings help-fns files-x xterm time-date
tooltip electric uniquify ediff-hook vc-hooks lisp-float-type mwheel
ns-win tool-bar dnd fontset image regexp-opt fringe tabulated-list
newcomment lisp-mode prog-mode register page menu-bar rfn-eshadow timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
frame cham georgian utf-8-lang misc-lang vietnamese tibetan thai
tai-viet lao korean japanese hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese case-table epa-hook jka-cmpr-hook help
simple abbrev minibuffer nadvice loaddefs button faces cus-face macroexp
files text-properties overlay sha1 md5 base64 format env code-pages mule
custom widget hashtable-print-readable backquote make-network-process
dbusbind gfilenotify cocoa ns multi-tty emacs)

Memory information:
((conses 16 79278 6322)
 (symbols 48 17661 0)
 (miscs 40 38 142)
 (strings 32 10374 4568)
 (string-bytes 1 270725)
 (vectors 16 7214)
 (vector-slots 8 341033 28254)
 (floats 8 62 328)
 (intervals 56 188 27)
 (buffers 960 14))





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-05-24 10:19 bug#20640: 24.5; lexical-binding should work like a normal file-local variable Philipp Stephani
@ 2015-05-25  1:59 ` Stefan Monnier
  2015-05-25 20:33   ` Daniel Colascione
  0 siblings, 1 reply; 12+ messages in thread
From: Stefan Monnier @ 2015-05-25  1:59 UTC (permalink / raw)
  To: Philipp Stephani; +Cc: 20640

> I think the only reason for this is an implementation detail
> (lexical-binding is parsed by other code than the other file-local
> variables).  It would be great to make it consistent with other
> variables so that the user doesn't need to care about the difference.

Allowing it at the end of the file, would require jumping to the end of
the file first, and then starting over from the beginning.
That'd be a very bad requirement.


        Stefan





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-05-25  1:59 ` Stefan Monnier
@ 2015-05-25 20:33   ` Daniel Colascione
  2015-05-25 22:55     ` Stefan Monnier
  0 siblings, 1 reply; 12+ messages in thread
From: Daniel Colascione @ 2015-05-25 20:33 UTC (permalink / raw)
  To: Stefan Monnier, Philipp Stephani; +Cc: 20640

[-- Attachment #1: Type: text/plain, Size: 570 bytes --]

On 05/24/2015 06:59 PM, Stefan Monnier wrote:
>> I think the only reason for this is an implementation detail
>> (lexical-binding is parsed by other code than the other file-local
>> variables).  It would be great to make it consistent with other
>> variables so that the user doesn't need to care about the difference.
> 
> Allowing it at the end of the file, would require jumping to the end of
> the file first, and then starting over from the beginning.
> That'd be a very bad requirement.

Why? We're going to have to read that page eventually anyway.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-05-25 20:33   ` Daniel Colascione
@ 2015-05-25 22:55     ` Stefan Monnier
  2015-05-26  1:06       ` Glenn Morris
  0 siblings, 1 reply; 12+ messages in thread
From: Stefan Monnier @ 2015-05-25 22:55 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: Philipp Stephani, 20640

>>> I think the only reason for this is an implementation detail
>>> (lexical-binding is parsed by other code than the other file-local
>>> variables).  It would be great to make it consistent with other
>>> variables so that the user doesn't need to care about the difference.
>> Allowing it at the end of the file, would require jumping to the end of
>> the file first, and then starting over from the beginning.
>> That'd be a very bad requirement.
> Why? We're going to have to read that page eventually anyway.

Because we can't read the first page correctly until we know whether it
should be read in lexical-binding mode or in dynamic-binding mode.


        Stefan





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-05-25 22:55     ` Stefan Monnier
@ 2015-05-26  1:06       ` Glenn Morris
  2015-05-26 17:12         ` Stefan Monnier
  0 siblings, 1 reply; 12+ messages in thread
From: Glenn Morris @ 2015-05-26  1:06 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Philipp Stephani, 20640

Stefan Monnier wrote:

>>> Allowing it at the end of the file, would require jumping to the end of
>>> the file first, and then starting over from the beginning.
>>> That'd be a very bad requirement.
>> Why? We're going to have to read that page eventually anyway.
>
> Because we can't read the first page correctly until we know whether it
> should be read in lexical-binding mode or in dynamic-binding mode.

A few years ago, we said (IIUC) it was desirable:

http://debbugs.gnu.org/10605
http://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00543.html

Or have speed-ups in uncompiled code shifted the balance?

(But no-one shows any sign of doing anything, so it's all academic.)





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-05-26  1:06       ` Glenn Morris
@ 2015-05-26 17:12         ` Stefan Monnier
  2015-05-26 20:53           ` Glenn Morris
  0 siblings, 1 reply; 12+ messages in thread
From: Stefan Monnier @ 2015-05-26 17:12 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Philipp Stephani, 20640

> A few years ago, we said (IIUC) it was desirable:
> http://debbugs.gnu.org/10605

Well, *you* said, but *we* didn't, IIUC.

For me, as long as we intend to allow running .el files without
byte-compiling them, I think allowing lexical-binding to be specified at
the end of the file would be a design mistake.


        Stefan





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-05-26 17:12         ` Stefan Monnier
@ 2015-05-26 20:53           ` Glenn Morris
  2015-05-27  1:49             ` Stefan Monnier
  0 siblings, 1 reply; 12+ messages in thread
From: Glenn Morris @ 2015-05-26 20:53 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: Philipp Stephani, 20640

Stefan Monnier wrote:

>> A few years ago, we said (IIUC) it was desirable:
>> http://debbugs.gnu.org/10605
>
> Well, *you* said, but *we* didn't, IIUC.

Hah, true enough, although IMO you were a least a little more ambiguous in

>> http://lists.gnu.org/archive/html/emacs-devel/2012-01/msg00543.html


Anyway:

> For me, as long as we intend to allow running .el files without
> byte-compiling them, I think allowing lexical-binding to be specified at
> the end of the file would be a design mistake.

Even if the code were to check for "coding:" (which we already have to
scan the end of the file for) and "lexical-binding:" in the same pass?





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-05-26 20:53           ` Glenn Morris
@ 2015-05-27  1:49             ` Stefan Monnier
  2015-06-21 20:08               ` Philipp Stephani
  0 siblings, 1 reply; 12+ messages in thread
From: Stefan Monnier @ 2015-05-27  1:49 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Philipp Stephani, 20640

> Even if the code were to check for "coding:" (which we already have to
> scan the end of the file for) and "lexical-binding:" in the same pass?

The check for "coding:" is a misdesign, indeed.  I think we should use
some utf-8 tell-tale sign at the beginning of *.el files to eliminate
the need to check for "coding:" (and to go through
load-with-code-conversion) in the normal case.  It could be a utf-8 BOM
or something like that.  Ideally we could give extra meaning to this
marker so it not only means "uses utf-8" but also "uses
lexical-scoping", so that we can have a future where we don't need to
add "lexical-binding:t" to every file.


        Stefan





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-05-27  1:49             ` Stefan Monnier
@ 2015-06-21 20:08               ` Philipp Stephani
  2015-06-22 15:56                 ` Stefan Monnier
  0 siblings, 1 reply; 12+ messages in thread
From: Philipp Stephani @ 2015-06-21 20:08 UTC (permalink / raw)
  To: Stefan Monnier, Glenn Morris; +Cc: 20640

[-- Attachment #1: Type: text/plain, Size: 1016 bytes --]

Stefan Monnier <monnier@iro.umontreal.ca> schrieb am Mi., 27. Mai 2015 um
03:49 Uhr:

> > Even if the code were to check for "coding:" (which we already have to
> > scan the end of the file for) and "lexical-binding:" in the same pass?
>
> The check for "coding:" is a misdesign, indeed.  I think we should use
> some utf-8 tell-tale sign at the beginning of *.el files to eliminate
> the need to check for "coding:" (and to go through
> load-with-code-conversion) in the normal case.  It could be a utf-8 BOM
> or something like that.  Ideally we could give extra meaning to this
> marker so it not only means "uses utf-8" but also "uses
> lexical-scoping", so that we can have a future where we don't need to
> add "lexical-binding:t" to every file.
>
>
>
I don't think this is a misdesign. In most cases files are either seekable
or small enough so that reading the variables from the end is tolerable. I
prefer the end of files for local variables because they tend to be less
important than the actual content.

[-- Attachment #2: Type: text/html, Size: 1421 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-06-21 20:08               ` Philipp Stephani
@ 2015-06-22 15:56                 ` Stefan Monnier
  2016-09-11 18:04                   ` Philipp Stephani
  0 siblings, 1 reply; 12+ messages in thread
From: Stefan Monnier @ 2015-06-22 15:56 UTC (permalink / raw)
  To: Philipp Stephani; +Cc: 20640

> I don't think this is a misdesign. In most cases files are either seekable
> or small enough so that reading the variables from the end is tolerable. I
> prefer the end of files for local variables because they tend to be less
> important than the actual content.

I'm not talking about file-local variables in general.  I'm talking
about the "coding:" pseudo-variable.


        Stefan





^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2015-06-22 15:56                 ` Stefan Monnier
@ 2016-09-11 18:04                   ` Philipp Stephani
  2016-09-11 19:25                     ` Eli Zaretskii
  0 siblings, 1 reply; 12+ messages in thread
From: Philipp Stephani @ 2016-09-11 18:04 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: 20640

[-- Attachment #1: Type: text/plain, Size: 765 bytes --]

Stefan Monnier <monnier@iro.umontreal.ca> schrieb am Mo., 22. Juni 2015 um
17:57 Uhr:

> > I don't think this is a misdesign. In most cases files are either
> seekable
> > or small enough so that reading the variables from the end is tolerable.
> I
> > prefer the end of files for local variables because they tend to be less
> > important than the actual content.
>
> I'm not talking about file-local variables in general.  I'm talking
> about the "coding:" pseudo-variable.
>
>
>
No matter how we choose to call it: My argument stands, reading such
pseudo-variables from the end of the file is desirable, useful, and has
negligible disadvantages. Or do we have evidence that users routinely read
very large (gigabyte-sized) Elisp files from non-seekable sources?

[-- Attachment #2: Type: text/html, Size: 1264 bytes --]

^ permalink raw reply	[flat|nested] 12+ messages in thread

* bug#20640: 24.5; lexical-binding should work like a normal file-local variable
  2016-09-11 18:04                   ` Philipp Stephani
@ 2016-09-11 19:25                     ` Eli Zaretskii
  0 siblings, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2016-09-11 19:25 UTC (permalink / raw)
  To: Philipp Stephani; +Cc: monnier, 20640

> From: Philipp Stephani <p.stephani2@gmail.com>
> Date: Sun, 11 Sep 2016 18:04:13 +0000
> Cc: 20640@debbugs.gnu.org
> 
> Stefan Monnier <monnier@iro.umontreal.ca> schrieb am Mo., 22. Juni 2015 um 17:57 Uhr:
> 
>  > I don't think this is a misdesign. In most cases files are either seekable
>  > or small enough so that reading the variables from the end is tolerable. I
>  > prefer the end of files for local variables because they tend to be less
>  > important than the actual content.
> 
>  I'm not talking about file-local variables in general. I'm talking
>  about the "coding:" pseudo-variable.
> 
> No matter how we choose to call it: My argument stands, reading such pseudo-variables from the end of the
> file is desirable, useful, and has negligible disadvantages. Or do we have evidence that users routinely read
> very large (gigabyte-sized) Elisp files from non-seekable sources? 

Guys, is this really such a big deal to justify changes in an area
which was not touched in eons?  Just let the sleeping dogs lie.






^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2016-09-11 19:25 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-05-24 10:19 bug#20640: 24.5; lexical-binding should work like a normal file-local variable Philipp Stephani
2015-05-25  1:59 ` Stefan Monnier
2015-05-25 20:33   ` Daniel Colascione
2015-05-25 22:55     ` Stefan Monnier
2015-05-26  1:06       ` Glenn Morris
2015-05-26 17:12         ` Stefan Monnier
2015-05-26 20:53           ` Glenn Morris
2015-05-27  1:49             ` Stefan Monnier
2015-06-21 20:08               ` Philipp Stephani
2015-06-22 15:56                 ` Stefan Monnier
2016-09-11 18:04                   ` Philipp Stephani
2016-09-11 19:25                     ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).