The ideal situation would be an approach to parallelization which allows to get the advantages of both the two approaches above. Implicit and explicit parallelism are nothing else than the two extremes of a continuous line, as depicted in figure 1.
Figure 1: Schemes for Parallelism
An ideal system should allow for implicit exploitation of parallelism, but without preventing the user from eventually directing this activity--e.g., by indicating parts that have potential for parallelism or parts that are inherently sequential. The requirement of having potential implicit exploitation of parallelism restricts the choice of programming paradigms mainly to the declarative ones. On the other hand, the requirement of allowing facultative user intervention on parallelism detection does not seem to fit naturally within the semantics of certain classes of declarative languages.
Only few declarative paradigms  seem to naturally offer the capabilities and the flexibility indicated--''Pure'' Object Oriented Programming , some forms of Functional Programming , and Logic Programming . Of these, Logic Programming seems to be the most suitable programming paradigm to achieve the ideal parallel behaviour.