unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Jean Louis <bugs@gnu.support>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: help-gnu-emacs@gnu.org
Subject: Re: How to tame compiler?
Date: Sat, 1 May 2021 09:34:06 +0300	[thread overview]
Message-ID: <YIz2Xs14+Y4tmPTX@protected.localdomain> (raw)
In-Reply-To: <jwvwnsj5d4y.fsf-monnier+emacs@gnu.org>

* Stefan Monnier <monnier@iro.umontreal.ca> [2021-05-01 06:50]:
> > Independent from the question whether your usage of `eval' is good or
> > valid - there must be some real problem here: if the compiler tells that
> > the lexical variables are unused, their values will not be available in
> > you `eval' call - you would have to create dynamical bindings for that.
> 
> I know I sound like a broken clock, but I think a better answer is to
> avoid `eval`: instead of taking expressions (that you'd pass to `eval`)
> arrange to receive functions (which you'd pass to `funcall` or `apply`).
> Then you can pass those functions the data they need (e.g. the value of
> things like `unsubscribe-text`).

  I have to understand it in this example:
  
  The HTML template is following and it is string:

  <html>
    <head>
      <title>⟦ xml-escape title ⟧</title>
    </head>
    <body>
      <p>Today is one US dollar this many euros: ⟦ usd-eur 1 ⟧</p>
    </body>
  </html>

> I know I sound like a broken clock, but I think a better answer is to
> avoid `eval`: instead of taking expressions (that you'd pass to `eval`)
> arrange to receive functions (which you'd pass to `funcall` or `apply`).
> Then you can pass those functions the data they need (e.g. the value of
> things like `unsubscribe-text`).

  Does that mean I should now extract maybe function `xml-escape' and use apply with rest of arguments?

  Maybe instead of:
  
  <title>⟦ xml-escape title ⟧</title>

  I should make:

  <title>⟦ xml-escape title ⟧</title>

  And then apply xml-escape with "title".

Then I would convert first word into function, that somehow
works, but all the remaining parts of string still need to be
converted. How is program to know that things in a string are for
example other variables or other Lisp functions?

(let* ((lisp (buffer-substring-no-properties
	      (1+ (match-beginning 0)) (1- (match-end 0))))
       (lisp (split-string lisp))
       (function (pop lisp)) 
       (_ (message "%s" function))
       (value (apply (intern function) lisp)) ;; I am stuck here
       (value (string-or-empty-string value)))


For simplest use case like converting string to variable, or something like:

⟦ var hello-name ⟧

I think that would work, but then if I only use variables, I
would not need "var" there, I could just interpolate it into
variable without eval.

For the case where there is even slightly complex Lisp like ⟦ (usd-eur (gold-price-kg)) ⟧
I would not know what to do there.

Maybe it could look like:

⟦ usd-eur (gold-price-kg) ⟧

But then again program would receive string "(gold-price-kg)" and
how would I know that string is another function? I would need to
extract that string and basically make small Lisp reader, again
we come to kind of eval-ing it.

I want to know if there is way to do it.

-- 
Jean

Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns

Sign an open letter in support of Richard M. Stallman
https://stallmansupport.org/
https://rms-support-letter.github.io/




  parent reply	other threads:[~2021-05-01  6:34 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-22 14:43 How to tame compiler? Jean Louis
2021-04-22 14:46 ` Stefan Monnier
2021-04-22 15:47   ` Jean Louis
2021-04-22 16:06   ` Jean Louis
2021-04-30 13:31   ` Jorge P. de Morais Neto
2021-04-30 19:38     ` rcd-template-eval - was " Jean Louis
2021-04-30 19:48     ` rcd-template-eval, much is in Org mode Jean Louis
2021-04-30 20:06       ` Tassilo Horn
2021-04-30 22:08       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-04-30 23:04         ` Org mode rant Jean Louis
2021-05-01  0:46           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01  6:10             ` Jean Louis
2021-05-01  6:34               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01  9:41                 ` On markdown images Jean Louis
2021-05-01  9:59                   ` Yuri Khan
2021-05-01 10:18                     ` Jean Louis
2021-05-01 11:09                       ` Yuri Khan
2021-05-01 11:25                         ` Jean Louis
2021-05-02 19:30                         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-03  5:43                           ` Yuri Khan
2021-05-03 17:08                             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-03 23:22                               ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-04  2:39                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01  5:00           ` Org mode rant Bastien
2021-05-01  5:10             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01  9:16             ` Jean Louis
2021-05-01 10:06               ` Bastien
2021-05-01 10:42                 ` Jean Louis
2021-05-01 10:10               ` Bastien
2021-05-01 11:19                 ` Jean Louis
2021-05-01 13:48                 ` [External] : " Drew Adams
2021-05-01 14:05                   ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01 10:10               ` Bastien
2021-04-30 20:23     ` eval myths - Re: How to tame compiler? Jean Louis
2021-04-30 22:11       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-04-30 23:07         ` Jean Louis
2021-05-01  0:28           ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01  8:13       ` tomas
2021-04-30 22:06     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-04-30 22:20       ` Stefan Monnier
2021-04-30 22:31         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-04-30 22:50           ` Stefan Monnier
2021-04-30 22:56             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01  0:44 ` Michael Heerdegen
2021-05-01  3:49   ` Stefan Monnier
2021-05-01  4:55     ` Michael Heerdegen
2021-05-01  6:34     ` Jean Louis [this message]
2021-05-01 13:38       ` Stefan Monnier
2021-05-01 16:19         ` Jean Louis
2021-05-02  5:41     ` Michael Heerdegen
2021-05-02  7:37       ` Jean Louis
2021-05-02  7:45       ` Jean Louis
2021-05-02  9:06         ` tomas
2021-05-02 11:18           ` Jean Louis
2021-05-02 12:24             ` tomas
2021-05-02 18:17               ` Jean Louis
2021-05-02 12:06           ` Stages of WWW development compared to Emacs Lisp development Jean Louis
2021-05-02 16:51             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-02 18:37               ` Jean Louis
2021-05-02 16:45       ` How to tame compiler? Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-02 22:29       ` Stefan Monnier
2021-05-02 23:14         ` Jean Louis
2021-05-03  1:58           ` Eduardo Ochs
2021-05-03  6:51             ` Eval in templates - " Jean Louis
2021-05-01  4:53   ` Michael Heerdegen
2021-05-01  7:05     ` Jean Louis
2021-05-01  7:59       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01  6:03   ` Jean Louis
2021-05-01  6:17     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-02  5:58     ` Michael Heerdegen
2021-05-02  6:54       ` Jean Louis
2021-05-03 21:39       ` Jean Louis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YIz2Xs14+Y4tmPTX@protected.localdomain \
    --to=bugs@gnu.support \
    --cc=help-gnu-emacs@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).