mercredi 30 avril 2014

De g++4.4 à g++4.8

Je suis en train de passer un bon bout de code (environ 2 million de lignes de code) de g++4.4 à g++4.8. Rien de trop méchant, mais quelques points intéressants à noter dans l'implémentation de C++11.

Le changement qui m'a le plus impacté est celui de std::make_pair. La signature de cette fonction est passée de std::make_pair(const T & left, const U & right) à std::make_pair(T left, T right), pour finalement devenir std::make_pair(T && left, T && right). La différence est double.

D'une part, il faut surtout laisser le compilo dériver les types templates. Un std::make_pair(x, y) ne compilera pas, il faut faire std::make_pair(x, y). En effet, écrire std::make_pair<int, int> réduit les paramètres de références universelles T && à rvalue int &&, et les lvalues ne passent plus. C'est particulièrement gonflant dans les std::bind qui ne peuvent donc plus utiliser std::make_pair. Ça tombe bien, les lambdas débarquent.

D'autre part, la conversion de type ne se fait plus. Alors qu'il était possible de faire, par exemple,

std::pair<int, std::shared_ptr<std::string> > = 
std::make_pair(1, new std::string("abc"))
, la conversion de std::string * en std::shared_ptr<std::string> ne se fait plus implicitement. Il faudra donc taper
std::pair<int, std::shared_ptr<std::string> > = 
std::make_pair(1, std::make_shared<std::string>("abc"))
.

samedi 5 avril 2014

Projet Gooseberry

La fondation Blender lance un appel aux dons pour son prochain projet de film libre. Il s'agira d'un long métrage, une comédie dont le personnage principal sera un mouton. Le budget complet du projet est estimé à 3.5M d'euros, c'est à dire plus de 10 fois le budget du projet précédent, "Tears of Steel".

La fondation propose en particulier de donner 10 euros par mois pendant les 18 mois que durera le projet, ce que je me suis dépêché de faire. En particulier, cette souscription donne accès au "Blender Cloud", qui contient des tas d'informations sur l'avancée du projet. Je suis cependant tenté de ne rien regarder, histoire d'avoir la surprise le jour où le film sort!