[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