You are here

On the way to ROOT 6


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.

cmtactidx.png"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!



hi every one i installed root 5.34/25 in windows 8.1 but it not working properly some results are missing


Please ask support questions at the forum - ideally providing info on what you run and what the error messages are.

Hi, With ROOT 6, will there be a version that can be used for Windows 7 64-bit? If not, do you think there will ever be a version that's win64? Thanks, Derek

Hi Derek,

Thanks for your question - indeed there will be no C++ 64bit Windows build for the time being. We are waiting for clang to support the C++ Windows API. That said - cling does work on Windows, be it 32 of 64 bit, in C-mode i.e. started with cling -x c.

Cheers, Axel.


Congratulations for your great work. When do you feel ROOT 6 will be released?



The LHC experiments' frameworks have already started migrating to ROOT 6; we are currently fixing issues seen by their test suites. Using ROOT interactively is a different story, though, as that requires all interpreter features to work, e.g. you want to be able to say TFile::Open("myfile.root"); hist->Draw();. The release which provides this functionality - ROOT 6.00.00 - is scheduled for May.

Cheers, Axel

Axel, when do you think will be a good time for an experienced user (but not a ROOT developer) to have a try at root-6? Best Wolfgang

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

Hi Axel, thanks for the update! The link you gave is private. I'd be interested when ROOT 6 is planned to be released. Is there some cling introduction tutorial available to get started and check out how it works? Cheers, Christoph

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.

Axel, did you reach a decision as to whether to enable MCJIT in cling?

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.

Hi Axel, Would the move to MCJIT allow inline assembly code eventually? I have run into a few situations where I was using cling to test code that includes some atomic/boost/tbb headers and the asm in them forced cling to fail. Nice to know if MCJIT will solve this problem.


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.

Hi Axel! Thanks for the update. Will ROOT6 only be compilable with C++11? Best, Somebody

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.

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