[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
the ever-forthcoming next release of es...
... is actually very close to being done, only a little more than two
years after I first promised it. What's most embarrassing is that
very little of this wasn't done two years ago. (Not bad: es slipped
even more than Windows 95.)
A feature-complete, but under-documented and probably buggy, alpha
release is now available as
ftp.sys.utoronto.ca:/pub/es/es-0.9-alpha1.tar.gz
Thanks to Chris Siebenmann for making this available.
A caution:
The interaction with readline has been cleaned up (I have no
idea how it actually worked before) but there are still bugs.
Notably, when running on SunOS 4, and perhaps other systems,
it is *strongly* advised that if you use readline, you disable
HANDLE_SIGNALS. I haven't been able to find the problem, but
it appears that a readline which catches signals plus a SIGINT
leads to an infinite loop in the readline code.
Other than that, Mrs. Lincoln, it feels quote robust. On the other
hand, 0.84 has been more robust than I ever expected it to be, so I'll
probably be disappointed with this one. Further, that I put bug fixes
in after two years away from thinking about es, should be a concern.
I would like to do an alpha2 soon to fix bugs that I've introduced, so
please let me know what doesn't work.
As to new features or changes, see the CHANGES file, but here are some
of the highlights:
I did add the %read builtin that has been long asked for by
some people, but with the absolutely simplest semantics I
could think of. Let's see how well this works before trying
to add any fancy features.
A ~~ operator has been added for pattern extraction. ~~ is
like ~, except that instead of returning true or false, it
returns the parts of the strings that matched the wildcards in
the pattern. Examples:
; echo <={ ~~ (foo.c foo.x bar.h) *.[ch] }
foo c bar h
; ls
flow.dylan flow.idyl library.dylan mop.dylan mop.idyl
; for (i = <={ ~~ * *.idyl })
mv $i.dylan $i.pdyl && mv $i.idyl $i.dylan
; ls
flow.dylan flow.pdyl library.dylan mop.dylan mop.pdyl
;
Let and local do parallel binding; that is, all right-hand
sides are evaluated before any variables are bound.
Let, local, for, assignment, and variable reference all now
permit the use of multiple variables.
Some may complain that ~~ and %read are creatures that should have
fept in. For %read, I probably agree, but a lot of people have said
it will enable to do things in es that they want to, but can't right
now for reasons of efficiency.
~~ was added in lieu of the suggestions for adding a built-in expr,
regular expressions, or ksh/mk/make-style variable munging. My
observation is that it's actually just a generalization of the pattern
matching that the shell already does, and a useful one. There's some
feeling of more consistency between ~ and ~~ than ~ and some regular
expression manipulation, because the pattern language is the same.
Enjoy.
Paul