Re: Idle musings on doing E over again

Dan Bornstein <[email protected]> Fri, 28 Sep 2012 10:44:53 -0700
Newsgroups gmane.comp.lang.e.general
Message-ID <CAE1-sY2QbYFDtRyAhw=-33hykX8j75MacQS2La=gW7Y7aGqcPg@mail.gmail.com>
On Fri, Sep 28, 2012 at 7:41 AM, Kevin Reid <kpreid-M/[email protected]> wrote:
> I was trying to get to sleep last night, and was struck by the thought of: If we were designing E from scratch (with the same goals), what would I actually do differently? […]
> (Sending to friam on the off chance it's an interesting topic.)

I hesitate to write this, since I like to be more of an "underpromise
and overdeliver" kind of guy, but the resonance was just too strong.

I spent the last year or so working in JavaScript and Node (for a
startup; our product is <https://medium.com/>). Going into it a year
ago, I thought that this pair of technologies / products would be a
good basis for doing the next layer of programming language and
platform development. Today, not so much.

Having gotten product out the door, I took a vacation. One of my goals
for the vacation was to start in earnest on what I thought a good
next-language might be, in terms of my own career / life-work arc.
Where I ended up was that I had a few ideas for an ultimate goal — in
particular I'm currently interested in exploring where all of
promise-based computation, a nearly-immutable data model, and software
transactional memory (for the mutable parts) meet — but I was (and am)
utterly dissatisfied with the prospects of exploring this territory
using any of the existing higher-level tools and languages that I
researched. My dissatisfaction stemmed from issues along the lines of
too many dependencies, poor semantic fit for the problem, and
philosophical incompatibility.

This led me to take a week and a bit to prototype what I think will be
a good-enough system to use as a substrate for my own further work. A
bit meta, I know. As with Kevin, I don't know how much progress I'll
be able to make in the short term, particularly because the work isn't
well-aligned with my job responsibilities. That said, I'm currently
quite excited about the prospects and have been spending an awful lot
of my evening and weekend time on it.

One thing that I feel is important at this level is an integral
parsing facility that can be used to write understandable code, and so
the prototype includes syntax for PEG grammar specification. (In a
way, this is a decades-overdue acknowledgment that Snobol had the
right idea here.)

Another high-order bit for me is avoiding gratuitous dependencies.
Getting to a self-hosted system seems pretty sensible to me, but I
don't want to have a ton of prerequisites for getting to that point.
Where I landed was to use C as the implementation language for a
minimal implementation, with the aim being for the code to be correct
and readable, eschewing both completeness and efficiency as primary
goals. Along the lines of how Scheme48 and PyPy are built, this C
implementation is meant to host exactly one program, a compiler for a
complete language implementation.

Because of where I'm positioning this in the stack, I'm aiming for
transparent Posix support but *not* ubiquitous asynchronous I/O (even
though I agree that that's ultimately desirable).

Though Kevin's and my short- to medium-term goals are probably
different, I think he is sensing the same underlying need in the
world. And I'll disagree, and take the stance that inventing a new
language *is* inherently good, and I want to help make it easier to do
so. Wish me luck!

Cheers,

-dan