nopantsyet said:
Yeah, I see your point in that context. Just as easy to work backwards as forward. I'm fine with the idea of storing the score rather than the base, and separating the aggregate to work backwards.
I was actually thinking Python since it's appropriate for semantic processing and it's easy to embed. But if some functional XML syntax is capable of providing the same level of functionality without embedding script, I'm liking that.
I decided on a XML for a couple of reasons:
- It's extremely simple and intuitive for the common user to read and fiddle with.
- No dependency issues (other than XML libraries which can hardly be called dependencies nowadays)
- Doesn't foster argument over language issues ("This architecture would be great if they had used Java/Perl/Python/whatever")
- It creates only a single learning curve. Once you get into editing data files (such as a character), it's a natural progression to edit rules files. Also simplifies the architecture a little (though this isn't that big a deal with the libraries available).
- Licensing free. I didn't want to get into the muddled mess of using GPL/CNRI (Python is CNRI, most language libraries are GPL) code. I just find it easier to deal with freely available closed libraries, which, in my experience, are better at maintaining backwards compatibility and packaging support. I usually try to work with the BSD license, which is how I planned on licensing mine.
- Language agnostic. While one could write a Perl application that uses Python script (for example), one would find that by using Python script, you would attract a lot of Python developers and few others.
- Extensible language. No language (other than Lisp) is extensible like XML. In fact, it can be said with more than a grain of truth, that any language that is as extensible as Lisp is itself a dialect of Lisp. With that in mind, I chose to design the XML language using Lisp principles (they parse in a similar fashion, so it's quite intuitive).
That said, I primarily develop in PHP and .NET. Using .NET for the application-level I think is the way to go so that people have language choices (C#, VB, C++, Perl, Python, PHP, Fortran, COBOL and many others all have .NET versions). Also, of the 3 major platforms (Wintel, Linux on Intel, and Mac), only Java Bytecode has better cross-platform support and user penetration than MSIL/Mono,but it sticks you with a single language.