Another trend is that highly specialized langauges for specific domains will continue to be created. Lisp macros are more obviously extensions of the language, and whole new languages have been written with macros. But note that all these specialized languages, with their specialized runtime system or libraries, are essentially declarative in that the programmer simply calls a routine and the implementation of the routine can carry out the request however it wants. One thing that we need more of is declarative semantics to specify what a routine is expected to do. The types of the arguments and results returned, supported by most typed languages, are a form of declaration.
Some languages support pre and post conditions for routines, which is a large step further.
Sufficiently complete pre and post conditions could be executable in the Prolog sense, or compilable to executable code. A path to reach a goal may be difficult to find, and thus the creative intelligence of human programmers steps in to help the system out with some explicit pointers. Not an easy goal itself.