Java is a great language for beginners- it properly teaches all the OO (Object Oriented) concepts that will help strengthen your knowledge of not just algorithms but component design. mIRC is a procedural language; that is to say, it has no "objects". You'll find that in the *real* programming world nowadays, most programming is done with Object Oriented languages (C++,Ruby,Python,C#,Java, even PHP to some extent are all OO languages). You will probably find that OO improves your code and wonder why you ever wanted to make exe's with mIRC in the first place.

If you want to stay inside the interpreted domain (the one mIRC is in) you can also learn something like Python or Ruby, which give the programmer the same kind of power you get from mIRC over a static language like C/C++/Java. The reason these languages are more powerful are the same reason they cannot be compiled: they run in an interpreter. The interpreter exists to automate some of the tasks you would otherwise have to manually perform in C/C++-- for this very reason, you also need the interpreter to run the code, so without Python, Python scripts are useless, and without Ruby, Ruby scripts are useless.

Keep in mind none of the above languages can be "compiled" into standalone files; there are ruby2exe and python2exe compilers but they are finnicky-- exactly for the same reason a compiler for mIRC would be. As for Java, you can "compile" to .class files but you'd still need to somehow distribute it with Java's interpreter. There's a GNU Java compiler to machine code (to create .exe's) but it also depends heavily on the actual code you're trying to compile.

To satisfy your curiousity.. "compiling" mIRC into machine code would require the entire mIRC interpreter be thrown into your code. More importantly it would also require your code to stay completely in plain text and open for anyone to read or change-- this is because mIRC doesn't actually compile *anything* when it inteprets your code (unlike Java or Python but similar to Ruby and PHP). There are also tons of implementation details in mIRC's interpreter that directly ties it to, for instance, an MDI window with custom made windows inside it (the same distinctions you'd get in mIRC, custom windows, channel windows, query windows). You would not be able to re-apply mIRC's /echo command, for example, to echo text into just any window; it would have to be the exact same custom windows that the code was made to write to. What you'd get in the end is ...mIRC.

Then there's the fact that mIRC is about one of the slowest languages ever. I wouldn't wish it upon anyone to run an executable powered by mIRC's interpreter. The language is fine for doing simple text processing, or starting an mp3 to be played, but for any data intensive processing, you're out of luck.

If you think mIRC's mp3 functions are great, or image functions, you'll find that there are libraries that make this relatively easy to use even at the C level-- these are probably the same libraries Khaled uses.

- argv[0] on EFnet #mIRC
- "Life is a pointer to an integer without a cast"