Unlike imperative languages that describe how to solve a problem, declarative languages define what should be achieved by the program. Declarative languages vary by the domain they are designed to work with, and they are also known as domain-specific languages (DSL). Using a declarative language, the programmer declares the problem to be solved, without having to know how the solution is actually executed.