On the way to ROOT 6
Hi!
We are running late with ROOT 6, in part because I'm just back at work after being sick for 4 weeks. The other cling team members were hacking away at Fermilab, and I'll demonstrate how major that step to version 6 is for ROOT.
"Commit Activity Index" for ROOT
SVNPlot defines a sort of arbitrary measure for the "activity" in a repository, basically the average commit frequency without looking at the relevance of each commit. As such it's not necessarily a good measure - but the amount of changes we seem to put into ROOT 6 is amazing nonetheless. And it corresponds to how we feel: productive and exhausted :-)
So when are we going to release ROOT 6? Where are we? Core parts now work completely without CINT: dictionaries are built from the information extracted by clang and thus I/O does not rely on details provided by CINT anymore. TInterpreter is migrated almost completely. Those are major chunks. But we have still have a few details that need to be fixed before we can remove CINT (and Reflex and Cintex) from the repositor. We need one major piece of work before we can release ROOT 6.0.0 (related to clang::Modules).
Then we have to make a cut: what do we really, really need in ROOT 6.0.0, what can wait until ROOT 6.2? Complete error recovery from bogus input? Likely only "to a large extent". Unloading? Likely only in ROOT 6.2. Performance improvements to demonstrate that we can do better than with CINT? Likely only in ROOT 6.2. PyROOT? Definitely in ROOT 6.0.0! We might have to remove features that many see as essential, for instance void f() {gSystem->Load("libEvent"); Event* e = new Event();} Some of these features might come back after ROOT 6.0.0, some of them are the price we pay for having a proper compiler read your code.
Working with ROOT-with-cling over the past months tells me that going to clang + llvm was the right thing to do: it is a major improvement for ROOT, in many, many respects. A nice side effect is that we reduce the amount of "our" code from about 300k (CINT, Cintex, Reflex, rootcint, TCint) to 30k (cling, rootcling, TCling)! But it's wonderful to be able to write any C++ code, not the CINT subset. To use the C++11 "auto". To get error messages that are immediately understandable. I'm positive that you will enjoy ROOT 6, too!
Cheers,

beta version of root 6
Re: Beta of ROOT 6
Hi Wolfgang!
Nice to hear from you! We push real hard to get ROOT 6.0.0 into a usable state, though with several missing features. I'm afraid all I can recommend is to try out ROOT 6.0.0 once we release it. I would not yet recommend ROOT 6.0.0 for production use, but maybe I'm too hesitant :-)
If you want an early preview of random stability take the MacOS build from our nightly snapshots. Only the MacOS nightly snapshot is built with cling at the moment. Right, that server is down right now - IT is working on it so try again tomorrow.
Cheers, Axel
When? How to get started?
Re: When? How?
Hi Christoph,
Thanks for your questions and for reporting the broken link! I have fixed the link in the post.
In principle you should not notice a difference between using CINT and cling: you still do ".x" etc. So we don't need to write documentation! ;-) Kidding aside: we will update the Users Guide for ROOT 6; the cling part might be a bit later, though.
Our current plan is to release ROOT 6.0.0 end of January.
Cheers, Axel.
MCJIT
Re: MCJIT
Hi Ben,
Yes, I did reach a conclusion. I now know exactly which parts of MCJIT need to improve (e.g. global initialization) and which features need to be implemented (e.g. lazy compilation) before we can use it in cling. When I studied it in October it wasn't possible to swap MCJIT for the traditional JIT yet. I will revisit it during the first half of next year; I hope we'll have more time the to help with the MCJIT parts we need.
Cheers, Axel.
Inline assembly
Re: Inline assembly
Hi!
I don't know the answer, sorry. I have not tested that case. But once we've moved to MCJIT it will be easy to find out :-)
Cheers, Axel.
C++11
Re: C++11
Hi Somebody,
No, ROOT 6 is fully C++ 2003, otherwise e.g. most of the experiments could not interface with it. But you can use some C++11 language features within the code you pass to ROOT, like auto!
That said, if you want to build ROOT 6 with C++11 then it will happily accept C++11 code also for the interpreter as far as clang supports it, and clang is doing pretty well there, too. This also extends to classes written in C++11 that you can store as far as the I/O currently supports it :-) For instance marking constructors as default would have been a problem with ROOT 5; it should work just fine for ROOT 6 in C++11.
Cheers, Axel.
Here's hope that it lives up
Re: Hope
Hi Thiago,
Thanks for your wishes! We definitely need luck, but what would help even more are a few additional hours per day! :-)
Cheers, Axel