Skip to main content

Project: Boost-free Goblins, part 3

Ready, Aim, and Fire

After the battle-cry, and then calming down to make some preparation, I decided to take the shot. The target: boost::shared_ptr.

To Action

A quick search turns up that shared_ptr is supported in the STL's memory library since c++11. Well, that seems like an easy task. Let's take our script for a spin.
tools/boostrm.sh shared_ptr memory
Now I have a bunch of std::shared_ptr replacing the boost variant. Seems like everything is in good order. After pushing it into the github to have Travis CI do the honors of compiling it, turns out, some boost::weak_ptr, apparently derived from boost::shared_ptr, was being casted into boost::shared_ptr, and they are not compatible with std::shared_ptr since that's not what they inherited. Well, after a bit of research, it seems the weak_ptr has a STL version. It seems like weak_ptr needs to go, too.
tools/boostrm.sh weak_ptr memory
After another push into github, and another build run by Travis CI, it turns out that it conflicts with boost's serialize. This time, there's no easy replacement of it in STL. Full stop.

Catch 22

After staring at the boost code for it, I found that the old boost version being used is really the culprit: the old methods relies on calling the member function to serialize the object. The newer versions use helper functions and supports the STL variants. But earlier experiences taught us that using newer versions crashes the program. So my first bout with the boost ended in a bit of a loop: I was able to replace the objects, but in process lost some of the deprecated functionalities. They will not be a problem in the updated boost, except latest boost had caused us unknown errors. So now, we stand in an impasse: until we can progress far enough in development (i.e. remove more or all of boost), it may be too difficult to try updating the boost. To remove boost and test if it works well, we need to update to the later versions.

Lesson Learned

For now, Boost and I are at stand-off, slightly anti-climatic finish to my first attempt that wanted to take out just one object but ended up touching up on 3 different objects. If this is of any indication of the future, this war is going to be a long one. Still, I am interested in continuing the efforts: currently, another developer is working hard to get a Windows build to work, and one of the biggest stumbling block seems to be the Boost. Getting rid of it will simplify some of his headaches and make it possible to run the program in Windows quicker.

Comments

Popular posts from this blog

Project: Boost-free goblins

The headache: Boost Don't take me wrongly: Boost library is a powerful set of tools for bleeding-edge technology. Much of it gets absorbed into the C++ Standard Libraries. The problem lies in our project being inactive for 7 years, which means it is relying on a library that is 7 years behind. Installing such an old library is a chore, and securing a pre-built package is problematic at best. The project is even incompatible with the later versions of Boost. It may have once given the original developers a powerful technology to propel their project in the past, but now we are stuck with clock stopped at 2011. Along with libtcod being stuck also in 2012, dealing with Boost is critical to bringing the project up-to-date. Options There are several ways to address the issue. Option 1 : Upgrade We can read each related source code, research how Boost has modified the relevant function calls, and either fix the expected return type or required input type, This may lead to mor...

Vehicles with a Broken Frame

Browsing through github projects in C/C++ Trying to find ways to link up the goblin_camp project with more automated testers, I started looking around the Readme.md files of other C/C++ projects in github. From neovim, I found AppVeyor, and although I have not yet set it up, it promises to supplement Travis CI with Windows test builds. I also found Coverity Scan, which might be a way for us to scan the large, preexisting code and fix goblin_camp. Then, from Cataclysm-DDA, I found Bounty Source . The icon had a dollar figures on it, so I assumed it was some sort of funnily-named fund raising site. It was, but with a twist. Show Me The Money Apparently, this site is designed to help the project by having people put down money into a pot to fix certain issues listed in Github. Some of the issues were very popular: enough people contributed to the pot of 250 dollars. I would also imagine those are tough ones. I found myself a less-popular, 4 year-old issue of 15 dollars . I am mor...

Project: Boost-free Goblins, Part 2

Last time at the goblin_camp The mad developers went on a warpath to rinse away Boost from the goblins. Loud yelling and crying was involved, 52 of them. But now that all the yelling is out of the way, how should we do this? Repetition, repetition, ... I am personally a very lazy programmer. If I can make computer do the job for me, I would have the computer do the job for me. While hunting down every instance of a library manually is doable in small number, as it was for cstdint, Other Boost libraries are more widely used and require much more effort scanning the text. Text. Text. Well, if we are talking about text-manipulation in sh ... Scripting my problem away My beloved hobby tools If it is not apparently already, I love automating tasks, and UNIX shell scripting had been my go-to solution for any binary scripting needs, especially in the days before I learned to program. This problem can be solved quite easily using few lines of scripts. Caveat We will be making a s...