emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Tangling is broken in git master
@ 2012-08-12  1:03 Bernt Hansen
  2012-08-12  6:27 ` Achim Gratz
  2012-08-12  8:43 ` Bastien
  0 siblings, 2 replies; 16+ messages in thread
From: Bernt Hansen @ 2012-08-12  1:03 UTC (permalink / raw)
  To: emacs-orgmode, Bastien

Hi Bastien,

Tangling doesn't work for me in git master anymore.  Git bisect
identifies the following commit as introducing the problem

--8<---------------cut here---------------start------------->8---
ba16c3c6f50738b070769040586945436439be76 is the first bad commit
commit ba16c3c6f50738b070769040586945436439be76
Author: Bastien Guerry <bzg@altern.org>
Date:   Sat Aug 11 10:43:56 2012 +0200

    Don't use `org-labels'
    
    * org-compat.el (org-labels): Remove.
    
    * org-bibtex.el (org-bibtex-headline): Don't use `org-labels'.
    
    * ob.el (org-babel-sha1-hash, org-babel-noweb-p): Ditto.

:040000 040000 bf962e4c7c93de4f2b5f71bf4fc1520ec0723a0e 43ecd68f89e1e856a4e65d84eff3cf6b84872494 M	lisp
--8<---------------cut here---------------end--------------->8---

--8<---------------cut here---------------start------------->8---
Debugger entered--Lisp error: (void-function letrec)
  (letrec ((intersect ...)) (funcall intersect (case context ... ... ...) (split-string ...)))
  org-babel-noweb-p(((:colname-names) (:rowname-names) (:result-params "replace") (:result-type . value) (:comments . "") (:shebang . "") (:cache . "no") (:padline . "") (:noweb . "no") (:tangle . "yes") (:exports . "none") (:results . "replace") (:colnames . "no") (:hlines . "yes") (:padnewline . "yes") (:session . "none")) :tangle)
  (if (org-babel-noweb-p params :tangle) (org-babel-expand-noweb-references info) (nth 1 info))
  ((lambda (body) (if ... body ...)) (if (org-babel-noweb-p params :tangle) (org-babel-expand-noweb-references info) (nth 1 info)))
  ((lambda (body) (with-temp-buffer ... ... ...)) ((lambda ... ...) (if ... ... ...)))
  (let* ((info ...) (params ...) (link ...) (source-name ...) (expand-cmd ...) (assignments-cmd ...) (body ...) (comment ...) by-lang) (setq by-lang (cdr ...)) (setq blocks (delq ... blocks)) (setq blocks (cons ... blocks)))
  (if (and language (not ...)) nil (let* (... ... ... ... ... ... ... ... by-lang) (setq by-lang ...) (setq blocks ...) (setq blocks ...)))
  (unless (and language (not ...)) (let* (... ... ... ... ... ... ... ... by-lang) (setq by-lang ...) (setq blocks ...) (setq blocks ...)))
  (if (string= (cdr ...) "no") nil (unless (and language ...) (let* ... ... ... ...)))
  (unless (string= (cdr ...) "no") (unless (and language ...) (let* ... ... ... ...)))
  (let* ((start-line ...) (file ...) (info ...) (src-lang ...)) (unless (string= ... "no") (unless ... ...)))
  (let ((full-block ...) (beg-block ...) (end-block ...) (lang ...) (beg-lang ...) (end-lang ...) (switches ...) (beg-switches ...) (end-switches ...) (header-args ...) (beg-header-args ...) (end-header-args ...) (body ...) (beg-body ...) (end-body ...)) ((lambda ... ...) (replace-regexp-in-string "[ 	]" "-" ...)) (let* (... ... ... ...) (unless ... ...)) (goto-char end-block))
  (while (re-search-forward org-babel-src-block-regexp nil t) (goto-char (match-beginning 0)) (let (... ... ... ... ... ... ... ... ... ... ... ... ... ... ...) (... ...) (let* ... ...) (goto-char end-block)))
  (save-window-excursion (when file (find-file file)) (setq to-be-removed (current-buffer)) (goto-char (point-min)) (while (re-search-forward org-babel-src-block-regexp nil t) (goto-char ...) (let ... ... ... ...)))
  (let* ((file ...) (visited-p ...) (point ...) to-be-removed) (save-window-excursion (when file ...) (setq to-be-removed ...) (goto-char ...) (while ... ... ...)) (unless visited-p (kill-buffer to-be-removed)) (goto-char point))
  (org-babel-map-src-blocks (buffer-file-name) ((lambda ... ...) (replace-regexp-in-string "[ 	]" "-" ...)) (let* (... ... ... ...) (unless ... ...)))
  (let ((block-counter 1) (current-heading "") blocks) (org-babel-map-src-blocks (buffer-file-name) (... ...) (let* ... ...)) (setq blocks (mapcar ... blocks)) blocks)
  org-babel-tangle-collect-blocks(nil)
  (mapc (lambda (by-lang) (let* ... ...)) (org-babel-tangle-collect-blocks lang))
  (let ((block-counter 0) (org-babel-default-header-args ...) path-collector) (mapc (lambda ... ...) (org-babel-tangle-collect-blocks lang)) (message "tangled %d code block%s from %s" block-counter (if ... "" "s") (file-name-nondirectory ...)) (when org-babel-post-tangle-hook (mapc ... path-collector)) path-collector)
  (save-excursion (let (... ... path-collector) (mapc ... ...) (message "tangled %d code block%s from %s" block-counter ... ...) (when org-babel-post-tangle-hook ...) path-collector))
  (save-restriction (when only-this-block (unless ... ...) (save-match-data ...) (narrow-to-region ... ...)) (save-excursion (let ... ... ... ... path-collector)))
  org-babel-tangle(nil)
  call-interactively(org-babel-tangle nil nil)
--8<---------------cut here---------------end--------------->8---

Regards,
Bernt

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

* Re: Tangling is broken in git master
  2012-08-12  1:03 Tangling is broken in git master Bernt Hansen
@ 2012-08-12  6:27 ` Achim Gratz
  2012-08-13  1:57   ` Bernt Hansen
  2012-08-12  8:43 ` Bastien
  1 sibling, 1 reply; 16+ messages in thread
From: Achim Gratz @ 2012-08-12  6:27 UTC (permalink / raw)
  To: emacs-orgmode

Bernt Hansen writes:
> Tangling doesn't work for me in git master anymore.  Git bisect
> identifies the following commit as introducing the problem
[...]
> Debugger entered--Lisp error: (void-function letrec)
>   (letrec ((intersect ...)) (funcall intersect (case context ... ... ...) (split-string ...)))

From the NEWS file in Emacs 24:
--8<---------------cut here---------------start------------->8---
* Lisp changes in Emacs 24.1
[...]
*** New macro `letrec' to define recursive local functions.
--8<---------------cut here---------------end--------------->8---


Regards,
Achim.
-- 
+<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+

Samples for the Waldorf Blofeld:
http://Synth.Stromeko.net/Downloads.html#BlofeldSamplesExtra

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

* Re: Tangling is broken in git master
  2012-08-12  1:03 Tangling is broken in git master Bernt Hansen
  2012-08-12  6:27 ` Achim Gratz
@ 2012-08-12  8:43 ` Bastien
  2012-08-13  1:55   ` Bernt Hansen
  1 sibling, 1 reply; 16+ messages in thread
From: Bastien @ 2012-08-12  8:43 UTC (permalink / raw)
  To: Bernt Hansen; +Cc: emacs-orgmode

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

Hi Bernt,

Bernt Hansen <bernt@norang.ca> writes:

> Tangling doesn't work for me in git master anymore.  Git bisect
> identifies the following commit as introducing the problem

Please try the attached patch and let us know if it works.

Thanks,


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-org-compat.el-New-alias-org-letrec-for-labels.patch --]
[-- Type: text/x-patch, Size: 4048 bytes --]

From 45c517919756b7af78b720e454e8ea8d969f6a43 Mon Sep 17 00:00:00 2001
From: Bastien Guerry <bzg@altern.org>
Date: Sun, 12 Aug 2012 10:41:28 +0200
Subject: [PATCH] org-compat.el: New alias 'org-letrec for 'labels

* org-compat.el: New alias 'org-letrec for 'labels.

* org-bibtex.el (org-compat): Require.
(org-bibtex-headline): Use the `org-letrec' alias.

* ob.el (org-compat): Require.
(org-babel-noweb-p): Use the `org-letrec' alias.
---
 lisp/ob.el         |   12 +++++++-----
 lisp/org-bibtex.el |   42 ++++++++++++++++++++++--------------------
 lisp/org-compat.el |    2 ++
 3 files changed, 31 insertions(+), 25 deletions(-)

diff --git a/lisp/ob.el b/lisp/ob.el
index a6d1359..79f12f7 100644
--- a/lisp/ob.el
+++ b/lisp/ob.el
@@ -27,6 +27,7 @@
   (require 'cl))
 (require 'ob-eval)
 (require 'org-macs)
+(require 'org-compat)
 
 (defconst org-babel-exeext
   (if (memq system-type '(windows-nt cygwin))
@@ -2223,11 +2224,12 @@ header argument from buffer or subtree wide properties.")
 (defun org-babel-noweb-p (params context)
   "Check if PARAMS require expansion in CONTEXT.
 CONTEXT may be one of :tangle, :export or :eval."
-  (letrec ((intersect (lambda (as bs)
-			(when as
-			  (if (member (car as) bs)
-			      (car as)
-			    (funcall intersect (cdr as) bs))))))
+  (org-letrec
+      ((intersect (lambda (as bs)
+		    (when as
+		      (if (member (car as) bs)
+			  (car as)
+			(funcall intersect (cdr as) bs))))))
     (funcall intersect (case context
 			 (:tangle '("yes" "tangle" "no-export" "strip-export"))
 			 (:eval   '("yes" "no-export" "strip-export" "eval"))
diff --git a/lisp/org-bibtex.el b/lisp/org-bibtex.el
index 43b3c41..f857459 100644
--- a/lisp/org-bibtex.el
+++ b/lisp/org-bibtex.el
@@ -111,6 +111,7 @@
 (require 'bibtex)
 (eval-when-compile
   (require 'cl))
+(require 'org-compat)
 
 (defvar org-bibtex-description nil) ; dynamically scoped from org.el
 (defvar org-id-locations)
@@ -309,26 +310,27 @@ This variable is relevant only if `org-bibtex-export-tags-as-keywords` is t."
 
 (defun org-bibtex-headline ()
   "Return a bibtex entry of the given headline as a string."
-  (letrec ((val (lambda (key lst) (cdr (assoc key lst))))
-	   (to (lambda (string) (intern (concat ":" string))))
-	   (from (lambda (key) (substring (symbol-name key) 1)))
-	   (flatten (lambda (&rest lsts)
-		      (apply #'append (mapcar
-				       (lambda (e)
-					 (if (listp e) (apply flatten e) (list e)))
-				       lsts))))
-	   (notes (buffer-string))
-	   (id (org-bibtex-get org-bibtex-key-property))
-	   (type (org-bibtex-get org-bibtex-type-property-name))
-	   (tags (when org-bibtex-tags-are-keywords
-		   (delq nil
-			 (mapcar
-			  (lambda (tag)
-			    (unless (member tag
-					    (append org-bibtex-tags
-						    org-bibtex-no-export-tags))
-			      tag))
-			  (org-get-local-tags-at))))))
+  (org-letrec
+      ((val (lambda (key lst) (cdr (assoc key lst))))
+       (to (lambda (string) (intern (concat ":" string))))
+       (from (lambda (key) (substring (symbol-name key) 1)))
+       (flatten (lambda (&rest lsts)
+		  (apply #'append (mapcar
+				   (lambda (e)
+				     (if (listp e) (apply flatten e) (list e)))
+				   lsts))))
+       (notes (buffer-string))
+       (id (org-bibtex-get org-bibtex-key-property))
+       (type (org-bibtex-get org-bibtex-type-property-name))
+       (tags (when org-bibtex-tags-are-keywords
+	       (delq nil
+		     (mapcar
+		      (lambda (tag)
+			(unless (member tag
+					(append org-bibtex-tags
+						org-bibtex-no-export-tags))
+			  tag))
+		      (org-get-local-tags-at))))))
     (when type
       (let ((entry (format
 		    "@%s{%s,\n%s\n}\n" type id
diff --git a/lisp/org-compat.el b/lisp/org-compat.el
index b049ecc..5f410bd 100644
--- a/lisp/org-compat.el
+++ b/lisp/org-compat.el
@@ -110,6 +110,8 @@ any other entries, and any resulting duplicates will be removed entirely."
 	    t))
       t)))
 
+(defalias 'org-letrec (if (>= emacs-major-version 24) 'letrec 'labels)
+
 \f
 ;;;; Emacs/XEmacs compatibility
 
-- 
1.7.10.2


[-- Attachment #3: Type: text/plain, Size: 14 bytes --]


-- 
 Bastien

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

* Re: Tangling is broken in git master
  2012-08-12  8:43 ` Bastien
@ 2012-08-13  1:55   ` Bernt Hansen
  2012-08-13  5:43     ` Bastien
  0 siblings, 1 reply; 16+ messages in thread
From: Bernt Hansen @ 2012-08-13  1:55 UTC (permalink / raw)
  To: Bastien; +Cc: emacs-orgmode

Bastien <bzg@gnu.org> writes:

> Hi Bernt,
>
> Bernt Hansen <bernt@norang.ca> writes:
>
>> Tangling doesn't work for me in git master anymore.  Git bisect
>> identifies the following commit as introducing the problem
>
> Please try the attached patch and let us know if it works.
>
> Thanks,

That doesn't work.  There's a missing ) at the end of the defalias and
after I add that I get

progn: Symbol's value as variable is void: intersect

Regards,
Bernt

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

* Re: Tangling is broken in git master
  2012-08-12  6:27 ` Achim Gratz
@ 2012-08-13  1:57   ` Bernt Hansen
  0 siblings, 0 replies; 16+ messages in thread
From: Bernt Hansen @ 2012-08-13  1:57 UTC (permalink / raw)
  To: Achim Gratz; +Cc: emacs-orgmode

Achim Gratz <Stromeko@nexgo.de> writes:

> Bernt Hansen writes:
>> Tangling doesn't work for me in git master anymore.  Git bisect
>> identifies the following commit as introducing the problem
> [...]
>> Debugger entered--Lisp error: (void-function letrec)
>>   (letrec ((intersect ...)) (funcall intersect (case context ... ... ...) (split-string ...)))
>
> From the NEWS file in Emacs 24:
> * Lisp changes in Emacs 24.1
> [...]
> *** New macro `letrec' to define recursive local functions.
>
>
> Regards,
> Achim.

I'm using GNU Emacs 23.2.1 (i486-pc-linux-gnu, GTK+ Version 2.20.0) of
2010-12-11 on raven, modified by Debian

Regards,
Bernt

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

* Re: Tangling is broken in git master
  2012-08-13  1:55   ` Bernt Hansen
@ 2012-08-13  5:43     ` Bastien
  2012-08-13 13:44       ` Eric Schulte
  0 siblings, 1 reply; 16+ messages in thread
From: Bastien @ 2012-08-13  5:43 UTC (permalink / raw)
  To: Bernt Hansen; +Cc: emacs-orgmode

Bernt Hansen <bernt@norang.ca> writes:

> That doesn't work.  There's a missing ) at the end of the defalias and
> after I add that I get

Er, sorry for the typo.

I've reverted this commit for now, I'll see if I can get rid of
cl-labels another way.

Thanks,

-- 
 Bastien

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

* Re: Tangling is broken in git master
  2012-08-13  5:43     ` Bastien
@ 2012-08-13 13:44       ` Eric Schulte
  2012-08-13 13:56         ` Bastien
  0 siblings, 1 reply; 16+ messages in thread
From: Eric Schulte @ 2012-08-13 13:44 UTC (permalink / raw)
  To: Bastien; +Cc: Bernt Hansen, emacs-orgmode

Bastien <bzg@gnu.org> writes:

> Bernt Hansen <bernt@norang.ca> writes:
>
>> That doesn't work.  There's a missing ) at the end of the defalias and
>> after I add that I get
>
> Er, sorry for the typo.
>
> I've reverted this commit for now, I'll see if I can get rid of
> cl-labels another way.
>

I've just pushed up another version of this commit, which I believe
removes cl-labels while still preserving tangling behavior.  If you have
a chance please re-check tangling with the latest Org-mode.

Thanks,

-- 
Eric Schulte
http://cs.unm.edu/~eschulte

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

* Re: Tangling is broken in git master
  2012-08-13 13:44       ` Eric Schulte
@ 2012-08-13 13:56         ` Bastien
  2012-08-13 14:18           ` Eric Schulte
  0 siblings, 1 reply; 16+ messages in thread
From: Bastien @ 2012-08-13 13:56 UTC (permalink / raw)
  To: Eric Schulte; +Cc: Bernt Hansen, emacs-orgmode

Hi Eric,

Eric Schulte <eric.schulte@gmx.com> writes:

> I've just pushed up another version of this commit, which I believe
> removes cl-labels while still preserving tangling behavior.  If you have
> a chance please re-check tangling with the latest Org-mode.

`letrec' is not available on Emacs <24.1 

Your commit looks like the one I pushed here...
http://orgmode.org/w/?p=org-mode.git;a=commit;h=ba16c3

... and reverted, thanks to Bernt's report.

Apart from one replacement of org-labels with `let*' in ob.el,
I don't see how we can get rid of `org-labels' completely.

-- 
 Bastien

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

* Re: Tangling is broken in git master
  2012-08-13 13:56         ` Bastien
@ 2012-08-13 14:18           ` Eric Schulte
  2012-08-13 14:42             ` Bastien
  2012-08-13 14:46             ` Nick Dokos
  0 siblings, 2 replies; 16+ messages in thread
From: Eric Schulte @ 2012-08-13 14:18 UTC (permalink / raw)
  To: Bastien; +Cc: Bernt Hansen, emacs-orgmode

Bastien <bzg@gnu.org> writes:

> Hi Eric,
>
> Eric Schulte <eric.schulte@gmx.com> writes:
>
>> I've just pushed up another version of this commit, which I believe
>> removes cl-labels while still preserving tangling behavior.  If you have
>> a chance please re-check tangling with the latest Org-mode.
>
> `letrec' is not available on Emacs <24.1 
>
> Your commit looks like the one I pushed here...
> http://orgmode.org/w/?p=org-mode.git;a=commit;h=ba16c3
>
> ... and reverted, thanks to Bernt's report.
>
> Apart from one replacement of org-labels with `let*' in ob.el,
> I don't see how we can get rid of `org-labels' completely.

Oh, my apologies, I just reverted my commit.  I thought letrec was an
old elisp construct.  I'm happy to stick with using org-labels (the code
was much more readable using org-labels).

I'm surprised that elisp doesn't provide any mechanism for local
anonymous functions.  I can't imagine why this would be an intentional
design decision.

Thanks,

-- 
Eric Schulte
http://cs.unm.edu/~eschulte

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

* Re: Tangling is broken in git master
  2012-08-13 14:18           ` Eric Schulte
@ 2012-08-13 14:42             ` Bastien
  2012-08-13 15:25               ` Nicolas Goaziou
  2012-08-13 14:46             ` Nick Dokos
  1 sibling, 1 reply; 16+ messages in thread
From: Bastien @ 2012-08-13 14:42 UTC (permalink / raw)
  To: Eric Schulte; +Cc: Bernt Hansen, emacs-orgmode

Hi Eric,

Eric Schulte <eric.schulte@gmx.com> writes:

> I'm surprised that elisp doesn't provide any mechanism for local
> anonymous functions.  

(let ((my-local-func (lambda (a) (message a))))
     (funcall my-local-func "Hello!"))

is fine.

It's just for recursive local function -- letrec provides it now, 
but apparently cl-labels was needed for that before.

-- 
 Bastien

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

* Re: Tangling is broken in git master
  2012-08-13 14:18           ` Eric Schulte
  2012-08-13 14:42             ` Bastien
@ 2012-08-13 14:46             ` Nick Dokos
  2012-08-13 14:53               ` Bastien
  1 sibling, 1 reply; 16+ messages in thread
From: Nick Dokos @ 2012-08-13 14:46 UTC (permalink / raw)
  To: Eric Schulte; +Cc: Bastien, Bernt Hansen, emacs-orgmode

Eric Schulte <eric.schulte@gmx.com> wrote:

> Bastien <bzg@gnu.org> writes:
> 
> > Hi Eric,
> >
> > Eric Schulte <eric.schulte@gmx.com> writes:
> >
> >> I've just pushed up another version of this commit, which I believe
> >> removes cl-labels while still preserving tangling behavior.  If you have
> >> a chance please re-check tangling with the latest Org-mode.
> >
> > `letrec' is not available on Emacs <24.1 
> >
> > Your commit looks like the one I pushed here...
> > http://orgmode.org/w/?p=org-mode.git;a=commit;h=ba16c3
> >
> > ... and reverted, thanks to Bernt's report.
> >
> > Apart from one replacement of org-labels with `let*' in ob.el,
> > I don't see how we can get rid of `org-labels' completely.
> 
> Oh, my apologies, I just reverted my commit.  I thought letrec was an
> old elisp construct.  I'm happy to stick with using org-labels (the code
> was much more readable using org-labels).
> 
> I'm surprised that elisp doesn't provide any mechanism for local
> anonymous functions.  I can't imagine why this would be an intentional
> design decision.
> 

Can't the definition of letrec in emacs24 be lifted bodily into org-compat.el
(or whatever the correct place is) as a compatibility-with-emacs-23 macro?

Nick

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

* Re: Tangling is broken in git master
  2012-08-13 14:46             ` Nick Dokos
@ 2012-08-13 14:53               ` Bastien
  2012-08-13 15:38                 ` Nick Dokos
  0 siblings, 1 reply; 16+ messages in thread
From: Bastien @ 2012-08-13 14:53 UTC (permalink / raw)
  To: nicholas.dokos; +Cc: Bernt Hansen, emacs-orgmode, Eric Schulte

Hi Nick,

Nick Dokos <nicholas.dokos@hp.com> writes:

> Can't the definition of letrec in emacs24 be lifted bodily into org-compat.el
> (or whatever the correct place is) as a compatibility-with-emacs-23 macro?

I don't think it's worth the effort.

The current code works and compiles without warnings for the user.

Getting rid of org-flet was to make things a bit more "elispy", 
but I'm fine with `org-labels' and those four lines of warnings-
for-developers-only.

-- 
 Bastien

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

* Re: Tangling is broken in git master
  2012-08-13 14:42             ` Bastien
@ 2012-08-13 15:25               ` Nicolas Goaziou
  2012-08-13 19:00                 ` Bastien
  0 siblings, 1 reply; 16+ messages in thread
From: Nicolas Goaziou @ 2012-08-13 15:25 UTC (permalink / raw)
  To: Bastien; +Cc: Bernt Hansen, emacs-orgmode, Eric Schulte

Hello,

Bastien <bzg@gnu.org> writes:

> Eric Schulte <eric.schulte@gmx.com> writes:
>
>> I'm surprised that elisp doesn't provide any mechanism for local
>> anonymous functions.  
>
> (let ((my-local-func (lambda (a) (message a))))
>      (funcall my-local-func "Hello!"))
>
> is fine.
>
> It's just for recursive local function -- letrec provides it now, 
> but apparently cl-labels was needed for that before.

You can have recursive local functions:

#+begin_src emacs-lisp
(let* (len                              ; For byte compiler.
       (len (lambda (l) (if (not l) 0
                     (1+ (funcall len (cdr l)))))))
  (funcall len '(1 2 3)))
#+end_src


Regards,

-- 
Nicolas Goaziou

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

* Re: Tangling is broken in git master
  2012-08-13 14:53               ` Bastien
@ 2012-08-13 15:38                 ` Nick Dokos
  2012-08-13 19:00                   ` Bastien
  0 siblings, 1 reply; 16+ messages in thread
From: Nick Dokos @ 2012-08-13 15:38 UTC (permalink / raw)
  To: Bastien; +Cc: Bernt Hansen, emacs-orgmode, Eric Schulte

Bastien <bzg@gnu.org> wrote:

> Hi Nick,
> 
> Nick Dokos <nicholas.dokos@hp.com> writes:
> 
> > Can't the definition of letrec in emacs24 be lifted bodily into org-compat.el
> > (or whatever the correct place is) as a compatibility-with-emacs-23 macro?
> 
> I don't think it's worth the effort.
> 
> The current code works and compiles without warnings for the user.
> 

What about future code? IME, it's always worthwhile to be thinking about
ways to avoid future bugs.

> Getting rid of org-flet was to make things a bit more "elispy", 
> but I'm fine with `org-labels' and those four lines of warnings-
> for-developers-only.
> 

It's more the freedom that it gives to developers (i.e Eric S. :-) ) who
are used to writing code a certain way: the way it is now, they've got
to keep in mind that letrec is not valid for emacs23 and write the code
differently - I'd suggest that that can be a source of bugs that would be
avoided with a compatibility macro.

But maybe the compatibility macro would be a bigger problem - I don't
know for sure. In particular, the file would need a periodic cleanup to
get rid of old cruft, but if it's a once-a-year-or-two occurrence, that
might not be too bad.

Nick

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

* Re: Tangling is broken in git master
  2012-08-13 15:38                 ` Nick Dokos
@ 2012-08-13 19:00                   ` Bastien
  0 siblings, 0 replies; 16+ messages in thread
From: Bastien @ 2012-08-13 19:00 UTC (permalink / raw)
  To: nicholas.dokos; +Cc: Bernt Hansen, emacs-orgmode, Eric Schulte

Hi Nick,

Nick Dokos <nicholas.dokos@hp.com> writes:

> I'd suggest that that can be a source of bugs that would be
> avoided with a compatibility macro.

`org-labels' is an alias for `cl-labels' (when available) or `labels'.

There is no need for a compatibility macro here, as the current code 
is compatible with both Emacs 23 and Emacs 24 -- and hopefully later
versions of Emacs.

The question is rather whether we want to be very strict and replace
as much cl-* constructs as possible.

Nicolas shown a way to let-bind functions recursively (which is simple
and neat, by the way), so yes, I'd favor replacing org-labels in this
case.  Especially because the cl-labels and labels macros do not work
exactly the same way.

See labels' docstring:

...
Like `cl-labels' except that the lexical scoping is handled via `lexical-let'
rather than relying on `lexical-binding'.

> But maybe the compatibility macro would be a bigger problem - I don't
> know for sure. In particular, the file would need a periodic cleanup to
> get rid of old cruft, but if it's a once-a-year-or-two occurrence, that
> might not be too bad.

Always good to know there are many people we can rely on to clean the
old cruft :)

-- 
 Bastien

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

* Re: Tangling is broken in git master
  2012-08-13 15:25               ` Nicolas Goaziou
@ 2012-08-13 19:00                 ` Bastien
  0 siblings, 0 replies; 16+ messages in thread
From: Bastien @ 2012-08-13 19:00 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: Bernt Hansen, emacs-orgmode, Eric Schulte

Nicolas Goaziou <n.goaziou@gmail.com> writes:

> You can have recursive local functions:
>
> #+begin_src emacs-lisp
> (let* (len                              ; For byte compiler.
>        (len (lambda (l) (if (not l) 0
>                      (1+ (funcall len (cdr l)))))))
>   (funcall len '(1 2 3)))
> #+end_src

Indeed, neat!

-- 
 Bastien

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

end of thread, other threads:[~2012-08-13 18:59 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-12  1:03 Tangling is broken in git master Bernt Hansen
2012-08-12  6:27 ` Achim Gratz
2012-08-13  1:57   ` Bernt Hansen
2012-08-12  8:43 ` Bastien
2012-08-13  1:55   ` Bernt Hansen
2012-08-13  5:43     ` Bastien
2012-08-13 13:44       ` Eric Schulte
2012-08-13 13:56         ` Bastien
2012-08-13 14:18           ` Eric Schulte
2012-08-13 14:42             ` Bastien
2012-08-13 15:25               ` Nicolas Goaziou
2012-08-13 19:00                 ` Bastien
2012-08-13 14:46             ` Nick Dokos
2012-08-13 14:53               ` Bastien
2012-08-13 15:38                 ` Nick Dokos
2012-08-13 19:00                   ` Bastien

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

	https://git.savannah.gnu.org/cgit/emacs/org-mode.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).