Qt 5.2 Beta Available
blog.qt.digia.com
blog.qt.digia.com
IANAL, but even if you make a modified version of Qt and release it, you are still free to use that same modified version in your app without releasing it as open source, as long as you are using dynamic linking instead of static. But, the same restriction also apply to original Qt.
Btw, what you can't do is using modified version of Qt without releasing the source of your Qt modification upon request.
1) you use the LGPG license. Then you can keep your application closed source / proprietary as long as you link with the Qt libraries dynamically and provide your changes (if any) to the Qt libraries only;
2) you use the commercial license. Then you can keep everything closed if you want (and the requirement to link dynamically disappear).
So, no they don't have a JIT on iOS.
The sand boxing on iOS does not allow for the low level dynamic code generation needed by JITs to operate.
This approach is very similar to LuaJit. Crazy fast JIT on the desktop, and a seperate interpreted mode for more restricted platforms.
So the Qt people could have written a JIT for iOS. The only thing that can't be done on iOS is to write a JIT that transforms the input to native code and execute it. But this is only one of many use cases of JIT compilers.
Quote: "JIT compilers are a novel idea: take some code in an “intermediate form”, and, given some heuristics, compile it into a “more native” representation,"
Note: They write "more native" representation.
Quote: "Conversely, in JRuby, the source format is the JRuby AST, and the destination format is Java bytecode. Perhaps the most fascinating aspect of the JRuby JIT compiler is that it benefits from both the initial compilation into Java bytecode, and then later, when Java may attempt to translate the JRuby-generated bytecode into native machine instructions."
So the JRuby guys have a multi-staged JIT:
JRuby AST => Java Bytecode => native
Depending on how the program is executed at runtime some parts of it will stay in JRuby AST, more interesting parts of the code will be transformed to Java Bytecode and the Hotspots may end up as native code.
- A compiler takes some input, does some specific stuff to it (like lexical analysis and parsing), and writes some output ("code generation")
- An interpreter takes some input, does some specific stuff to it (like lexical analysis and parsing) and executes it
- A JIT compiler is a compiler, like above, but it does its thing on the fly, as you go. This means it has to tie into the execution model on some level, to know which parts of the program need translation.
A component that takes a program and executes it could correctly be described as an interpreter, but it might also be correctly separated into a JIT compiler (that spits out an intermediate representation) and an interpreter (for the intermediate representation, not the original source).
I have no example of such a beast, but it is concievable, no? :)