all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Emanuel Berg <incal@dataswamp.org>
To: emacs-devel@gnu.org
Subject: 10 problems with Elisp, part 10 (was: Re: Emacs website, Lisp, and other)
Date: Mon, 05 Aug 2024 18:27:35 +0200	[thread overview]
Message-ID: <87frrjoryg.fsf_-_@dataswamp.org> (raw)
In-Reply-To: 86ed73qhly.fsf@gnu.org

Eli Zaretskii wrote:

> Please, everybody, take the Lisp vs Python argument off this
> list, it is off-topic here. If you must discuss this, please
> use the emacs-tangents@gnu.org mailing list instead.

Sure, but we are allowed to discuss how to make Elisp better?

Since Python has had enormous success, and Lisp hasn't - or if
it had, it lost it - it might be a good ide to analyze what
they (Python) did good.

You might think this is some bängalow discussion just because
certain people are in it. But it doesn't have to be like
that, it can be very hands-on.

Ten things that are annoying with Emacs Lisp from the holster,
and what to do about them:

10. Moving point around all the time. Whatever program, what
    you do is, it feels like, not solving your problem
    algorithmicly, you are just doing endless

    (goto (point-min))
    (prong (end-of-paragraph) (current-column))
    (pos-eol -1)

    (setq exists-after-point (unless (re-search-forward re nil t) (point)))

    Frustration: What has this to do with my problem and
    proposed solution? I understand Emacs grew around its
    function as a text editor, but "everything is in the
    buffer" and "the buffer is the data structure of Emacs",
    that has goon too far and we see a lot of code being
    virtually a very, very long traversal of buffers moving
    around point. So what ought to have been a tolerable
    exception, has become the norm and hailed model to the
    point, as I said earlier, interfaces toward programming
    are so weak it is considered normal that ispell can't even
    to (spell "word") without first outputting it somewhere
    and to the operation on that surface.

    Solution: MVC-ish separation of the interface, the
    computation, and the presentation of the result. To solve
    a problem, get the data into modern data structures with
    modern access methods, apply known algorithms by the book
    known specifically to help this problem rather than
    "Everything goes" Elisp hackin. (Yes you find that stuff
    in libraries, often. Apply on data in data structures, not
    on data as it appears in Emacs buffers.) But how ever well
    one does, it is gonna be _a lot_ of of moving point around
    in Emacs Lisp, so don't worry :)
   
Example of problem from my favorite part of Emacs, ispell.el:

(defun ispell-mime-multipartp (&optional limit)
  "Return multipart message start boundary or nil if none."
  ;; caller must ensure `case-fold-search' is set to t
  (and
   (re-search-forward
    "Content-Type: *multipart/\\([^ \t\n]*;[ \t]*[\n]?[ \t]*\\)+boundary="
    limit t)
   (let (boundary)
     (if (looking-at "\"")
	 (let (start)
	   (forward-char)
	   (setq start (point))
	   (while (not (looking-at "\""))
	     (forward-char 1))
	   (setq boundary (buffer-substring-no-properties start (point))))
       (let ((start (point)))
	 (while (looking-at "[-0-9a-zA-Z'()+_,./:=?]")
	   (forward-char))
	 (setq boundary (buffer-substring-no-properties start (point)))))
     (if (< (length boundary) 1)
	 (setq boundary nil)
       (concat "--" boundary)))))

Moving point around, looking, searching, seeing or not seeing.
This is boring and error prone to write, and error prone to
take over from someone else, or return to after x years.

You don't think in terms of the problem, or the solution for
that matter, you are just somewhere in the buffer and
according the the map you are completely lost!

That is why I have, at place 10 annoying things about Elisp,
excessive movement of point around the buffer, often involving
manual retrieving and editing data from a buffer that, in
execution, might not even look like what you thought it would,
and that was 25 lines ago!

Okay, I know - if only I could be passionate about it.

-- 
underground experts united
https://dataswamp.org/~incal




  reply	other threads:[~2024-08-05 16:27 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-04 22:27 Emacs website, Lisp, and other Jeremy Bryant
2024-08-04 22:55 ` Emanuel Berg
2024-08-05  4:29   ` Emanuel Berg
2024-08-05  9:23   ` Christopher Dimech
2024-08-05 10:43     ` Emanuel Berg
2024-08-05 11:37       ` divya
2024-08-05 11:56         ` Christopher Dimech
2024-08-05 12:33         ` Eli Zaretskii
2024-08-05 11:45       ` Christopher Dimech
2024-08-05 12:56       ` Dr. Arne Babenhauserheide
2024-08-05 13:16         ` Dr. Arne Babenhauserheide
2024-08-05 14:46           ` Christopher Dimech
2024-08-05 21:28             ` Dr. Arne Babenhauserheide
2024-08-05 14:55         ` Eli Zaretskii
2024-08-05 12:28     ` Eli Zaretskii
2024-08-05 16:27       ` Emanuel Berg [this message]
2024-08-05 16:38         ` 10 problems with Elisp, part 10 (was: Re: Emacs website, Lisp, and other) Eli Zaretskii
2024-08-05 17:03           ` Emanuel Berg
2024-08-05 18:32             ` 10 problems with Elisp, part 10 Dr. Arne Babenhauserheide
2024-08-05 20:20               ` Emanuel Berg
2024-08-06  7:14                 ` Dr. Arne Babenhauserheide
2024-08-06  7:21                   ` Org mode API (was: 10 problems with Elisp, part 10) Ihor Radchenko
2024-08-06  8:23                     ` Org mode API Dr. Arne Babenhauserheide
2024-08-10 16:55                       ` Ihor Radchenko
2024-08-06 11:54                   ` 10 problems with Elisp, part 10 Eli Zaretskii
2024-08-08  2:01                     ` Richard Stallman
2024-08-09 22:39                       ` Emanuel Berg
2024-08-13  1:28                         ` Richard Stallman
2024-08-09 22:46                     ` Emanuel Berg
2024-08-10  5:41                       ` Emanuel Berg
2024-08-10  6:09                         ` Eli Zaretskii
2024-08-13  1:28                       ` Richard Stallman
2024-08-05 18:58             ` 10 problems with Elisp, part 10 (was: Re: Emacs website, Lisp, and other) Christopher Dimech
2024-08-05 19:30               ` 10 problems with Elisp, part 10 Dr. Arne Babenhauserheide
2024-08-05 20:02                 ` Christopher Dimech
2024-08-08  2:01                   ` Richard Stallman
2024-08-06  2:28                 ` Eli Zaretskii
2024-08-05 17:13         ` 10 problems with Elisp, part 10 (was: Re: Emacs website, Lisp, and other) Yuri Khan
2024-08-06  6:39         ` Emanuel Berg
2024-08-06 11:16         ` Richard Stallman
2024-08-06 22:08           ` Emanuel Berg
2024-10-23 19:25         ` Jean Louis
2024-10-23 21:13           ` Emanuel Berg
2024-10-23 21:36             ` Jean Louis
2024-10-25  6:44               ` Emanuel Berg
2024-10-28  3:27                 ` 10 problems with Elisp, part 10 Joel Reicher
2024-10-24  6:48             ` Dr. Arne Babenhauserheide via Emacs news and miscellaneous discussions outside the scope of other Emacs mailing lists
2024-08-05 20:03   ` Emacs website, Lisp, and other Alan Mackenzie
2024-08-05 21:07     ` Christopher Dimech via Emacs news and miscellaneous discussions outside the scope of other Emacs mailing lists
2024-08-06  7:42     ` Jean Louis
2024-08-06 11:14     ` Immanuel Litzroth
2024-08-05 11:56 ` Eli Zaretskii
2024-08-06 19:09   ` Jeremy Bryant
2024-08-06 19:50     ` Christopher Dimech
2024-08-06 20:35       ` [External] : " Drew Adams
2024-08-06 22:10         ` Dr. Arne Babenhauserheide
2024-08-06 22:48           ` Christopher Dimech
2024-08-06 23:09           ` Drew Adams
2024-08-06 23:21             ` Christopher Dimech
2024-08-07  1:09               ` Dr. Arne Babenhauserheide
2024-10-23 19:45             ` Jean Louis
2024-10-23 20:25               ` Drew Adams via Emacs news and miscellaneous discussions outside the scope of other Emacs mailing lists
2024-10-23 20:50                 ` Jean Louis
2024-10-23 21:21                   ` Drew Adams via Emacs news and miscellaneous discussions outside the scope of other Emacs mailing lists
2024-10-23 21:37                     ` Jean Louis
2024-08-06 22:26         ` Christopher Dimech
2024-08-07  5:45         ` Emanuel Berg
2024-08-15  3:53           ` Madhu
2024-08-15  5:50             ` Emanuel Berg
2024-08-15  9:17               ` Madhu
2024-08-15  9:57                 ` Emanuel Berg
2024-10-23 19:48                   ` Jean Louis
2024-08-15  6:17             ` Emanuel Berg
2024-08-15  7:10               ` Eli Zaretskii
2024-08-15  8:06               ` Emanuel Berg
2024-08-15  9:27                 ` Emanuel Berg
2024-08-15 16:03                   ` Emanuel Berg
2024-10-23 19:52               ` Jean Louis
2024-10-23 19:41       ` Jean Louis
2024-10-24  6:39         ` Dr. Arne Babenhauserheide via Emacs news and miscellaneous discussions outside the scope of other Emacs mailing lists
2024-08-07 11:13     ` Eli Zaretskii
2024-08-07 12:03       ` Andrea Corallo
2024-08-07 12:16       ` Christopher Dimech
2024-08-08  2:01         ` Richard Stallman
2024-08-08  6:51           ` Joel Reicher
2024-08-07 12:31     ` Christopher Dimech
     [not found] <mailman.47.1722960050.16997.emacs-devel@gnu.org>
2024-08-06 16:59 ` 10 problems with Elisp, part 10 (was: Re: Emacs website, Lisp, and other) Abraham S.A.H. via Emacs development discussions.
2024-08-07  7:34   ` Emanuel Berg
2024-08-07 11:26     ` Christopher Dimech
  -- strict thread matches above, loose matches on Subject: below --
2024-08-06 17:05 Abraham S.A.H. via Emacs development discussions.

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

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

  git send-email \
    --in-reply-to=87frrjoryg.fsf_-_@dataswamp.org \
    --to=incal@dataswamp.org \
    --cc=emacs-devel@gnu.org \
    /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.
Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.