Editorial note 1:
It is proper to lead users to know the essence of following distinctions:
For (end-)users, language (interface) and its implementation. For example, how to determine which language runtimes are needed and to install them.
For mainstream users (general developers), the syntax and the semantics. Whether the syntax and semantics have totally separated descriptions is depend; but for most languages this distinction should be sensible, since they are adaptive and practical for different aspects of the language, or more precisely, different problem domains. Generally, this distinction has been effective since the language is implemented. Pure grammar is only sound for restricted metalanguages, which is not hierarchical.
For language developers (or language-oriented programers), the metalanguage and the object language(s) it describing. This scene is rare for mainstream programing cases (at least currently), but it is more and more important. Skills of formal specification should be aware for language production, avoiding error-prone syntax and semantics definitions. Though parser generators or some other formal tools have been already popularly used for this purpose, they are only small pieces of cake.