A language is composed of syntax, semantics, and pragmatics.
The syntax is the most obvious part of a language, but also the least important. It's the definition of which character strings are valid programs in the language and which aren't. For example, "a=b" can appear in a C++ program given the right conditions, but "a===b" can't.
The semantics define the meaning of a character string, possibly depending on the context in which it appears. For example, in the BASIC strings
and
the "a=b" substrings take on the meanings of assignment and comparison.
The semantics of a language is what gives it expressive power and what places the language in one paradigm or another.
The pragmatics are implementation details, pertaining mostly to how a program is translated to executable code (compiled? JIT compiled? Ran on a VM? Interpreted? Interpreted in hardware?). It's technically not part of a language definition because any compiled language can be interpreted and vice versa, but some languages have only one implementation or are implemented almost exclusively in one way.
The pragmatics of a language often, but not always, determine what a language is suitable for. The semantics also are a major factor, though. On the other hand, the syntax is only a matter of convenience.
Anyway, that's just the theory. The proper answer to
its all just syntex and at the end of the day they turn into ones and zeros. |
is "program in Malbolge, then".
The three components above interact to make a language more or less appropriate to a given task. Just because you
could use Python for absolutely everything (Turing-completeness is a property of most programming languages. A program written in one Turing-complete language has at least one equivalent program in another Turing-complete language) doesn't mean you
should.