Why FPC[main] specifically? Because it has many useful features, fixes, and improvements
While not an answer to your question: If you plan on using main, I would advice to only to so, if you have
lots of automated test for your code.
FPC main will most of the time to appear to work well... But it may have bugs, and those may not always be noticeable in a few manual test runs.
I don't have numbers, or stats on likelihood. Maybe I was just very unlucky. But I had (in the past couple of month) several issue, where I had version of FPC main.
They were good enough to run the IDE without noticeable issues (that is the bits I used in that time frame, which is a small part only).
But the failed (with several compiler bugs) some of the code I was working on. And I was only able to notice because I had massive testcases, that I could run for lots of build settings.
Without those testcases, those compiler bugs would now crash the IDE when build with 3.3.1.
Given that I encountered 2 or 3 (or was it 4) bug in just 2 or 3 month... I am either an extremely unlucky person, or bugs in FPC main are common enough to affect anyone (if they use a wide enough code base for a long enough time).
Yeah, ok, I did squeeze it, using new-ish stuff like generics, and really using those, and tweaking for optimization... But then, using new (less tested) features would be the point of going for 3.3.1. I actually only used what even 3.2.2 has, I did 3.3.1 only for testing the results.
And if your app fails, its a long way from debugging in search for an issue in your code, to realizing that it isn't your code at all.