all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Robert Boyer <robertstephenboyer@gmail.com>
To: Simon Leinen <simon.leinen@gmail.com>
Cc: Emacs developers <emacs-devel@gnu.org>,
	Gerard Huet <gerard.huet@inria.fr>
Subject: Re: Some thoughts about Emacs performance
Date: Fri, 16 Feb 2024 12:34:03 -0600	[thread overview]
Message-ID: <CAP9n0TOMy=rguxsr3jTKsog23ZSRzSRVo20AfJfe44FKVkKU8w@mail.gmail.com> (raw)
In-Reply-To: <CAAO6KgArAjWgDxOqkWg8wMhy3azfZWgG=SVYeu6voAS4uxopvQ@mail.gmail.com>

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

>
> > But it doesn't try to be a standalone platform for
> > performance-oriented Lisp developers.
>


> I hope that Emacs merges with SBCL.
>


> Emacs and SBCL are amongst the greatest inventions in the history of the
> world.
>


> Of course I should mention gcc and Linux and so much that the Free
> Software Foundation has given us, e.g., their 'sort' which can sort files
> of amazing length at amazing speed.  It is crucial to my ongoing work on
> automatic theorem proving.  If you've got a billion clause records and want
> to flush duplicates, who you gonna call but /usr/bin/sort.  That's what I
> say, and what I do.  To do that in Lisp might consume more space than I
> have except on my SD card.   I run on a $100 chromebook and my 256 gb SD
> card only cost $30, and 1 tb SD cards are coming soon at a price I think I
> will be able to afford.



> But of course, Coq may be the fastest thing except for C.  And it has
> 'sanitary' macros.
>


> Where would I be without unsanitary macros!  My sorting algorithm 'msa'
> depends upon them!
>


> But what do I know about sanitation.


I think that the following are very unsanitary, but what do I know?
         (eval

>          '(defmacro key (x)
>             (cond (key
>                    (cond ((symbolp key) `(the ,msa-type (,key ,x)))
>                          (t `(the ,msa-type (funcall ,key ,x)))))
>                   (t `(the ,msa-type ,x)))))
>         (eval
>          '(defmacro msa-equal (x y)
>             (cond (msa-all-keys-real `(eql ,x ,y))
>                   (t `(equal ,x ,y)))))
>         (eval
>          '(defmacro msa-predicate (x y)
>             (cond ((symbolp msa-predicate) `(,msa-predicate ,x ,y))
>                   (t `(funcall ',msa-predicate ,x ,y)))))


On Fri, Feb 16, 2024 at 8:08 AM Simon Leinen <simon.leinen@gmail.com> wrote:

> Bob,
>
> welcome to the emacs-devel list, and thanks a lot for *your* wonderful
> contributions (theorem prover, string search, and Lisp benchmarking -
> I remember boyer.lisp from RPG's reference work[1]).
>
> On Thu, Feb 8, 2024 at 8:15 AM Robert Boyer
> <robertstephenboyer@gmail.com> wrote:
> >
> > Emacs 27.1 has a 'sort' function that takes longer than stable-sort of
> SBCL. Maybe
> > by a factor of 2. See also my attached file 'ms.lisp'.
> >
> > There may be a lot that can be improved in Emacs'
> > handling of cl-loop, setf, elt, or cl-random.
>
> In this case, cl-random seems to be the main culprit for the slow
> initialization—replacing that with plain "random" speeds it up by
> about a factor of ten.  There was some discussion on the list recently
> about cl-random vs. random. The main functional difference is that
> cl-random supports a defined state. But the performance difference may
> be due more to the fact that random is written in C, and cl-random in
> Lisp.
>
> As for the sorting itself, both Emacs and SBCL seem to use mergesort
> in their implementations of (stable-)sort.  Emacs's implementation is
> written in C, SBCL's in Lisp. Performance is quite similar—on my
> system (Apple Macbook Air M2) Emacs takes about 35% longer to sort a
> million random numbers than SBCL.  (On the other hand when sorting it
> again, i.e. when the vector is already fully sorter, Emacs is quite a
> bit faster than SBCL—maybe Emacs chose to optimize for partly-sorted
> vectors at the expense of a bit of performance for random input.)
>
> In general, the Emacs Lisp runtime system and compiler(s) aren't as
> optimized as SBCL for general Lisp use.  But it gets quite close!
>
> On the other hand, Emacs has editor-specific code (e.g. redisplay) and
> data structures (e.g. buffers) which are highly optimized and partly
> written in C.  But it doesn't try to be a standalone platform for
> performance-oriented Lisp developers.  Of course Emacs is very
> suitable as a Software Development Environment for systems such as
> SBCL, and there are many good integration options—personally I use the
> SLIME package these days.
>
> Best regards, and enjoy Lisping in Emacs!
> --
> Simon.
>
> > ;; First some Emacs, with times on my $100 Chromebook.
> >
> > (setq n 6)
> > (defun make-random-array (n)
> >   (let ((a (make-vector n 0)))
> >     (cl-loop for i below n do
> >              (setf (elt a i) (cl-random 1000000)))
> >     a))
> > (byte-compile 'make-random-array)
> > (benchmark '(setq foo (make-random-array (expt 10 n))) 1) -- 2.3 seconds
> > (benchmark '(sort foo '<) 1) -- 1 second
> >
> > ;; Second some Common Lisp, with times for SBCL on my $100 Chromebook.
> >
> > (defparameter n 6)
> > (defun make-random-array (n)
> >   (declare (fixnum n))
> >   (let ((a (make-array n)))
> >     (declare (type array a))
> >     (loop for i fixnum below n do
> >           (setf (aref a i) (random most-positive-fixnum)))
> >     a))
> > (time (defparameter foo (make-random-array (expt 10 n))))  -- .041
> seconds
> > (time (progn (stable-sort foo '<) nil)) -- .45 seconds
> >
> > Thanks so much for Emacs, which is so great that I cannot put it
> > into words.
> >
> > Bob
>
>
> [1] https://dreamsongs.com/Files/Timrep.pdf
>

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

  parent reply	other threads:[~2024-02-16 18:34 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-08  5:44 Some thoughts about Emacs performance Robert Boyer
2024-02-08 14:47 ` Ihor Radchenko
2024-02-16 14:08 ` Simon Leinen
2024-02-16 16:15   ` Robert Boyer
2024-02-19 12:29     ` Ihor Radchenko
2024-02-19 19:05       ` Robert Boyer
2024-02-16 16:31   ` Robert Boyer
2024-02-16 18:06   ` Robert Boyer
2024-02-16 20:28     ` [External] : " Drew Adams
2024-02-16 18:34   ` Robert Boyer [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-02-08 23:53 Arthur Miller
     [not found] <DU2PR02MB10109962DC3D994DCE1BCC11896442@DU2PR02MB10109.eurprd02.prod.outlook.com>
2024-02-09  0:23 ` Ihor Radchenko

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='CAP9n0TOMy=rguxsr3jTKsog23ZSRzSRVo20AfJfe44FKVkKU8w@mail.gmail.com' \
    --to=robertstephenboyer@gmail.com \
    --cc=emacs-devel@gnu.org \
    --cc=gerard.huet@inria.fr \
    --cc=simon.leinen@gmail.com \
    /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.