I really like C++, because it allows it's users to choose the paradigm they'll use based on the task at hand.
Of course, it's not perfect in any paradigms, but it's still quite the all-rounder, despite requiring practice.
It allows to easily have side effects in functions, which is mandatory for I/Os, it allows for automatic recollection of no longer used objects, it allows imperative, generic, objects, ...
Things I regret it to not do correctly is about type safety: there's no real standard way to check, even at runtime, for over/under flows, and one can not cycle through all the member of an enumeration except by using an integer and casting it to said enum.
But I consider those problems to be pretty minor compared to what it offers.
Now, I think prolog is quite interesting, but I lack experience with it, because it's damn hard to put in an actual program. Sure, it can do sockets, and it can do I/Os, but they don't really play naturally with it from what I've seen.
One of the things I have on my TODO list is to get a C++ program embedding prolog, so that prolog would do the high level decisions, but C++ would interpret I/Os to build the queries to send prolog. I think this way, I would have the best of both worlds.
Sadly, prolog is also quite the (bad) joke when it comes to type safety.