AHK's not meant to be a general purpose programming language. That was never the point and I doubt chris has any intention of making it that way. AHK is turing-complete and has been so for ages, so technically you could use it to do anything already. The question is whether you want to torture it into doing it.
I really believe that the best option to satisfy those who want to do scripting and programming work in ahk and those who just want to do some quick macros and hotkeys is to seperate the engine from the interface - to make what makes ahk ahk into a library and a minimal language similar to what it used to be. Then you could make bindings for the library to whatever language you want - similar to Autoit3X. There are problems with this approach of course. One is the technical problems of making hotkeys work across language boundaries - though this would be a problem for the binding authors - not for chris, and another is the blurry area between "simple" and "serious" programming. By seperating the two domains you could alienate some users. IIRC chris is considering this for a possible AHK 2.0 but since that's not going to be any time soon I'm implementing some things that address my needs.
OTOH, fundamental improvements that ahk could really do with include the following:
- a proper extension library interface - mentioned above as "plugins"
- proper dynamic compilation/execution - this I think is the most important one, more later on this
- different semantics for arrays - something like dotted arrays in rexx - this would allow for the simplicity of ahk's current arrays while allowing for fairly simple implementations of higher-order data structures - lists and dictionaries and the like
- heh.. a bit of a stretch here but.. tail recursion
Why are these important? Because combined they allow for massive extension of the ahk language into more general (or more specific) areas without actually having to bug chris for new features or adding to the current mash of syntax. Let's see why -
1. the library interface would allow others to add features often requested - odbc/activex/ole/etc. This is currently possible with the dll interface and ahk wrappers. I'm thinking of a native interface like this
Code:
#using odbc.dll
odbc_connect()
If you're worried about still having standalone binaries I believe it's possible to pack dlls into an exe's resources.
2. Here's the biggy - with dynamic compilation you would be able to preprocess a file and then #include it on the line after. This is currently not possible because #includes are done statically after a file is loaded. Being able to preprocess and include a file without needing a wrapper script means that you can easily create domain specific languages for common ahk tasks. One such task for me is creating keychains ie hitting #x then p to do something. My parser is currently written in ruby and has to be run seperately. Combined with tail recursion this would allow you to easily create a custom ahk dialect with custom looping constructs, special syntax, better data structures, etc, while still producing portable ahk code.
Actually just making #includes happen when they are encountered during execution would make some of this a lot easier.
Of these I think the library interface is the most immediately applicable and probably not a huge stretch to implement (of course I'm not all that familiar with ahk's internals). Next I think would be the array thing. It might be possible now just using variable names but a defined syntax would be nice. Dynamic compilation I gather would be very difficult to do given ahk's current state. And the tail recursion thing is a throwaway

we don't need to turn ahk into scheme or something.
Phew. Long winded diatribe terminates now.