Your favorite language, of course! Naturally it should have some notion of objects, since DCI is about networks of collaborating objects.
Furthermore, these objects will have functionality (methods) attached to them at runtime, so the language must support some way of extending types, while not breaking object identity at the same time. Some examples of how this is done with statically typed languages like C# and C++ can be found here: Can I use DCI in Java.
See Existing DCI Implementations for information about support for the language of your choice.