AI tooling
Since some period I started working with AI tooling. Mostly I use Claude, Gemini and Visual Studio's Copilot. The experience is a bit of mixed feelings about this. Claude can send you around the world with all kinds of suggestions. You have to separate signal from noise. Gemini had some good suggestions but also failed many times. Copilot has good code completion suggestions but misses the mark also occasionally. Copilot's function name suggestions are very welcome.
Some examples of AI tooling failing are listed here:
- I asked Gemini for camera sharpness algorithm. It came up with a good algorithm but the actual OpenCV function calls and parameters were incorrect.
- I asked Gemini to get the real sample time from an 'IMediaSample'. It hallucinated and suggested to use the non existing 'GetSampleTime'. There is a 'GetMediaTime' function but this returns the stream time; i.e. the time since the graph was running and not the time from the start of the video.
- I asked Gemini of conversion from UCS-2 to UTF-16. It wrongly suggested to use wstring_convert but wstring_covert is hardbound to std::string as byte_string
- I asked Gemini for a natural sort algorithm. It came up with a good implementation and a clever trick to circumvent the conversion from string to integer numbers. It lacked though the removal of leading zero's which is essential for the clever trick to work.
- I had to work on CMake lately but suggestions were often contradictory or using old conventions. In the CMake world things have shifted and perhaps the AI models are not updated and trained on old data.
- I measured that the memory wasn't fully released when using ippFree on Linux in a test function. Claude came up with a whole story that most likely IPP was using a custom allocator. However spying the assembly one could see that it would invoke free after a couple of statements. The actual reason had more to do that glibc sticks to its memory after the second allocation call and probably keeps it standby.
- I asked Google if there is an ATL variant for PROPVARIANT. Its AI bot answer was yes there is CComPropVariant. However this does not exist in ATL but in a third party library.
- We asked Claude for guiding us through SxS technology. First I asked if it is still a viable technology and Claude assured it was the correct solution for our problem despite being old. After several prompts Claude couldn't get it working. Worse my colleague was convinced it wouldn't work having a fatal error. I fed Claude with the error and it also came to the conclusion that SxS wouldn't work for us and that only Microsoft would be able to alter the SxS store. At home I tried Gemini and it guided me successfully through a SxS installation. It couldn't retrieve the publicKeyToken algorithm. I confronted Claude and it apologized and changed its mind.
AI tooling can suggest plain bugs. I was implementing a swap of width and height and Copilot's code complete came up with the following code snippet:
// NOTE: incorrect Size sz = ...;
if (sz.GetWidth() < sz.GetHeight())
{
sz.SetWidth(sz.GetHeight());
sz.SetHeight(sz.GetWidth());
}
This doesn't swap but sets the width and height on the old height value.
Conclusion
AI tooling can be very helpful and I use it now as a better Google search. It guided me through difficult CMake paths some very good answers but also ones who missed the boat. They are still not on the level to be trusted blindly. They also have limited scope for software engineering; e.g. code blocks; algorithms and functions. I am not aware if they can help in refactoring and extending architecture wide solutions.
No comments:
Post a Comment