A language (i.e., not just a library) with abstractions targeted at a specific problem domain.
Easier programming, more efficient or secure, possibly better error reports
Lots of implementation work, language fragmentation, learning/training issues, less tooling, troublesome interoperability, possibly worse error reports
A DSL defined as a separate programming language.
Internal or embedded DSL
A DSL defined as language-like interface to library.