Fu Limin wrote:
>>In what ways is your language distinctive? 
> 
> Well, I think the most distinctive feature is the integration of powerful
> text processing ability and powerful numerical computation with a
> simple syntax for them. I also try to support a simple and transparent
> interface to C++. Though there is still a long way to go, I think the
> status of Tao is promising, in fact I already benefit from it in my
> research where both text processing and numerically computation are
> important, for which I "suffered" a lot from using Perl in the beginning, 
> which drived me to design my own one ^_^

Ah, the dilemma between whether to create your own or extend what is
already there. Myself, I prefer the second option because that lets more
people use it with a lower overhead; the barrier to entry on an entire
programming language is quite a bit higher even if the integration it
affords you is more closely tuned.

>> How does developing your own
>> language (as opposed to making stronger one of the languages whose
>> newsgroups you've posted to) make the sum of human experience richer?
> 
> For the existing languages, I think they have already stabilized a kind of 
> philosophy, and something have already got complicated. So I think it
> would be more difficult for me to dive into them. Anyway, I believe it
> worth trying to design a new language, if I found it more usesful in some
> work than the other languages, somebody will also find this. A new option
> is not bad thing.

Every programming language is really a different way of thinking about
programming problems. The hard bit is determining whether you're either
covering some new fraction of the noosphere, or if not, covering some
useful distinct subset of it instead. It is also a curiosity that
sometimes reducing the number of things you do can make a language more
suitable for some kinds of tasks (security often seems to work out that
way for some reason).

[Below, where I've not replied to some point made, it's because I don't
feel I have anything more to say on the matter at the moment.]

>>Odd things I've noticed in a quick trawl through your docs:
>>  * What no bit-ops? And why give ^ a non C/C++ meaning?
> 
> My using of ^ as power is influenced by Matlab. In the beginning I didn't
> know it is also used in C/C++.

An alternative would be to use ** for exponentiation, deriving from
Fortran, and give the bit-ops their conventional C/C++ meanings.

>>  * What sort of characters are you using?
> 
> For strings, I use stl::string, so I didn't care about this. 
> But for byte type numeric array, I used unsigned char.

The real Q here is chars vs. characters. :^)

>>  * How does passing by reference square with constant arguments?
> 
> In Tao constants are also represented by objects, their passing by reference 
> are the same as other types of objects.

So, that would mean that it is possible for a constant to be altered? My
goodness me, that reminds me of some awfully buggy code I've seen in the
past! Please make sure that you can't ever change the actual constants
that come from your program (setting 0 to 1 is a good way to make things
go belly up!)

>>  * Your I/O interface has a /long/ way to go!
> 
> Right. I haven't concentrated on this part. The status of IO support
> deosn't conform to the version number which increased too rapidly :-)

Concentrate on producing a system for externally-defined loadable
modules and put (most of) your IO code in one of those. :^) Some people
have had real success with doing that.

>>  * Given that you are using mutable objects, do you have a way for
>>    someone to force a duplicate of an arbitrary object? That would make
>>    doing things like security separation much easier.
> 
> If you mean data object, yes, but it's not available for users yet. Now it is 
> mainly used for passing Tao data types to C++ modules, where each Tao
> object can be copied and converted into its C++ equivalent object
> (though internally they are all C++ objects, but the object used in C++ 
> modules is different from the one used in Tao interpreter, e.g. TaoHash is 
> used in the interpreter, while TcHash is used in C++ module, the conversion
> or copying keep its structure including cyclic ones).

Firstly, control of when things get duplicated is very important,
because doing a deep copy of a large object graph can be expensive. The
easiest way to handle this would be to put in a monadic operator that
duplicates an object.

Secondly, is it really necessary to have TaoHash and TcHash as separate
things? Unifying your entity system might be a big win over the longer term.

Donal.