I'm not sure where you got the idea that Visual Basic was non-decompilable. Take a look at: http://www.program-transformation.org/Transform/VisualBasicDecompilers.
Any unencrypted language is decompilable. Think about it: the computer/virtual machine/interpreter has to be able to run the program, right? To do that, it must be in some sort of order. The logic must be there some how. A decompiler is just a program that goes through the code (whether it be plaintext, bytecode, or machine code) just like whatever is running the code, but instead of running each command, it spits out equivalant source code for that command. (That's just a simplication, of course; decompilers need to be a bit more sophisticated to handle a command that maps to several lines of lower level code, for instance).
So, knowing this, you should be able to see why decompilers are *not* a good way to secure source code. The only way source code would really be secure is if a computer/virtual-machine/interpreter/whatever-is-running-your-code had a way to natively encrypt/decrypt the source. (Think: you supply a password when compiling your program, and your user has to enter this password when running your program). I do not know of any language that has this feature, not even Java, probably because it would be a huge pain in the ass to users.