all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Tim Cross <theophilusx@gmail.com>
To: Phillip Lord <phillip.lord@russet.org.uk>
Cc: arthur miller <arthur.miller@live.com>,
	emacs-devel <emacs-devel@gnu.org>
Subject: Re: Christmas wish: Literate Elisp
Date: Sat, 21 Dec 2019 12:16:07 +1100	[thread overview]
Message-ID: <CAC=50j91sdSKcf-dP4GMdGWD9_Hw7FbtKSNJ4TrVcqSmTQ0Y9w@mail.gmail.com> (raw)
In-Reply-To: <87h81vhrek.fsf@russet.org.uk>

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

I've been watching this thread and resisting adding to it, but feel now
might be when I can contribute something useful.

This whole discussion seems to centre around some views that literate
programming for lisp is a positive way forward and therefore, making
changes to both C and Elisp parsing is a good idea if it means we can move
to a 'modern' literate programming model with greater ease.

As someone who has done literate programming for non-trivial projects (i.e.
something other than my .emacs file), I think this assumption needs to be
challenged. Literate programming has been around for a long time, but has
failed to gain traction. Why? Is it due to the existing tools or is it
something more fundamental?

I have been a fan of Donald Knuth's work for a long time. When I first came
across literate programming in the mid-90s, I thought it sounded really
interesting and a potentially great approach to writing code. A few of us
adopted this approach in our project and embarked on this new path of
discovery. Unfortunately, the reality just did not hold up to the promise.
Some of this was due to limitations in tooling (relating to the 'weave' and
'tangle' tools of the time), but a big part really just failed because
people don't move between prose and code that easily and we don't maintain
the prose as well as the code. In the end, you just have lots of
out-of-date prose mixed in with your code, which is often more misleading
than no prose at all.

The tools at the time were particularly poor when it came to working within
a REPL type environment. This was partly because they were a two step
process (tangling) and you could only go in one direction (getting chagnes
made in the REPL back into your source was distracting and often forgotten,
so work was frequently lost). Dealing with scope, namespaces etc was a pain
in a system which relied on 'tangling' of source files in order to get the
final output and nearly all supporting utilities (code formatters,
highlighting, linters etc) were broken.  Like others who have posted in
this thread, we thought it could all be improved if you could eliminate the
weaving/tangling and be free to just write prose within your code, so we
tried to do this with the lisp we were using (sorry, can't remember what
lisp flavor it was). At first glance, it looked very easy to do - a few
tweaks to the parser, some new reader macros and we should be fine. On one
level, it did fix some of the issues, but we did find lots of unforeseen
edge cases and it added sufficient additional complexity to the whole
system that in the end, we decided it just didn't deliver the benefits we
had hoped for.  At the end of the day, it wasn't the tools or the
implementation which killed it - it was simply that literate programming
simply didn't fit with how people like to code. It was one of those things
which sounds nice in theory, but for most, fails in practice.

We did find the approach works better for some languages than others. For
example, languages like C, where you have a code, compile, run, test cycle,
it wasn't oo bad. However, for languages where you often included a more
REPL driven style of devleopment, where lots of devleopment is done as
experimentation/refinement at the repl, the paradigm added very little and
more often than not, just got in the way.  We did find it was useful for
smaller tasks and configuration management, but for larger projects,
especially with teams of developers, it didn't stand up.

So, my advice, for what it is worth is

Implement a solution which does NOT require any modifications to either the
elisp parser or C code and use it to develop some non-trivial elisp
packages. You could probably base it on org-mode. My suspicion is that you
will find that after some time, it really doesn't deliver what you hoped.
However, if I'm wrong, it will provide the necessary experience and
familiarity to help guide a more refined and targeted model for working
with literate programming and elisp.

Don't under estimate the effort or impact making changes to either the
elisp parser or C sources will have. There has been a number of comments in
this thread which makes it sound like you would just need to 'tweak' the
parser and everything will work. That 'tweaking' is far more complicated
than it might seem on the surface. One of the main benefits of lisp
dialects is there simple syntax and the idea of code as data. Any changes
made to either the syntax or parsing of elisp is going to impact on lots of
things, many of which none of us have even thought about yet.

My feeling is that if literate programming is a great way forward, this
will be evident in the number of people who start using an elisp literate
programming mode. If this does turn out to be the case, then we can use the
experiences from many people who are using that mode to see what can be
done to develop the paradigm further. This may involve low level C or elsip
parser or syntax changes, but they will be based on experience and demand.

On Sat, 21 Dec 2019 at 03:56, Phillip Lord <phillip.lord@russet.org.uk>
wrote:

>
>
> Stefan Monnier <monnier@iro.umontreal.ca> writes:
>
> >> My proposal is to slightly change Elisp parser to treat lines that start
> >> with any other printable character but '(' as a start of comment and to
> >> simply ignore the line, just as it treats ';' as a comment.
> >
> > The `sexpresso` Haskell package follows the same idea ;-)
> >
> > As for using it in Elisp: I don't think there's anything stopping anyone
> > from making such a `literate-elisp-mode` and even arrange for `load` to
> > handle such a file (just like there is already a package that lets
> > `load` work directly on .org files).
> >
> > I'd welcome such a package in GNU ELPA.
>
>
> I'm very late to this thread, for which apologies.
>
> My own package, lentic, could achieve this. It's gives you two
> visualisations of the same file; so one with comment characters, and one
> without. You can then do the literate part in one mode and the coding
> part in another.
>
> It already supports org-mode delination markers; it could be made to
> support brackets as a delineator too.
>
> Phil
>
>

-- 
regards,

Tim

--
Tim Cross

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

  reply	other threads:[~2019-12-21  1:16 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-12 15:45 Christmas wish: Literate Elisp arthur miller
2019-12-12 17:29 ` Stefan Monnier
2019-12-14  4:40   ` Sv: " arthur miller
2019-12-14 14:08     ` Stefan Monnier
2019-12-15  8:37       ` arthur miller
2019-12-16 12:01       ` Sv: " arthur miller
2019-12-16 13:41         ` Stefan Monnier
2019-12-16 14:02           ` Sv: " arthur miller
2019-12-16 16:07             ` Jonathan Leech-Pepin
2019-12-17  2:09               ` arthur miller
2019-12-17 11:06                 ` Adam Porter
2019-12-18 16:29                   ` Sv: " arthur miller
2019-12-18 18:49                     ` Adam Porter
2019-12-18 20:04                       ` Sv: " arthur miller
2019-12-18 23:18                         ` Adam Porter
2019-12-18 23:53                           ` Sv: " arthur miller
2019-12-20 15:58                             ` Unknown
2019-12-18 21:18                       ` Sv: Sv: Sv: " Stefan Monnier
2019-12-18 22:43                         ` Christmas wish: Literate Elisp (Intro) VanL
2019-12-19  0:05                           ` Sv: " arthur miller
2019-12-18 22:59                         ` Sv: Sv: Sv: Christmas wish: Literate Elisp Adam Porter
2019-12-18 23:18                           ` Sv: " arthur miller
2019-12-18 23:52                             ` Adam Porter
2019-12-19  0:02                               ` Sv: " arthur miller
2019-12-19  0:42                                 ` chad
2019-12-19  1:50                                   ` Jean-Christophe Helary
2019-12-20  0:55                                     ` Sv: " arthur miller
2019-12-20 15:00                                       ` Stefan Monnier
2019-12-20 15:50                                         ` Stefan Monnier
2019-12-20 15:50                                         ` Sv: " arthur miller
2019-12-20 16:17                                           ` Stefan Monnier
2019-12-20 16:34                                             ` Eduardo Ochs
2019-12-21  1:18                                               ` Sv: " arthur miller
2019-12-21  5:24                                                 ` Eduardo Ochs
2019-12-21  5:52                                                   ` Sv: " arthur miller
     [not found]                                                   ` <VI1P194MB042965777086C4466B7FF5EC962C0@VI1P194MB0429.EURP194.PROD.OUTLOOK.COM>
2019-12-21 15:29                                                     ` arthur miller
     [not found]                                             ` <VI1P194MB0429A123183C15AF8EC3956B962C0@VI1P194MB0429.EURP194.PROD.OUTLOOK.COM>
     [not found]                                               ` <jwv7e2pln3s.fsf-monnier+emacs@gnu.org>
     [not found]                                                 ` <VI1P194MB0429F37A29A2720037CAD9F9962C0@VI1P194MB0429.EURP194.PROD.OUTLOOK.COM>
2019-12-22  7:01                                                   ` Sv: " arthur miller
2019-12-20 16:51   ` Phillip Lord
2019-12-21  1:16     ` Tim Cross [this message]
2019-12-21  4:24       ` Sv: " arthur miller
2019-12-21  6:41         ` Tim Cross
2019-12-21  9:39           ` VanL
2019-12-21 14:17             ` Sv: " arthur miller
2019-12-14  4:16 ` Richard Stallman
2019-12-14  5:05   ` Sv: " arthur miller

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='CAC=50j91sdSKcf-dP4GMdGWD9_Hw7FbtKSNJ4TrVcqSmTQ0Y9w@mail.gmail.com' \
    --to=theophilusx@gmail.com \
    --cc=arthur.miller@live.com \
    --cc=emacs-devel@gnu.org \
    --cc=phillip.lord@russet.org.uk \
    /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.