Можно использовать полнота по Тьюрингу в качестве критерия, но это немного строго (язык программирования специального назначения может быть не полон по Тьюрингу), поэтому я пойду с чем-то менее жестким.
Я думаю, что ключ в том, что на выходе будет серия инструкций , и что между этим выходом и входом будет нетривиальное соответствие .Пример, который вы приводите, нарушает последний критерий, потому что есть только два возможных выхода независимо от того, насколько сложен вход: "echo Hi"
и ничего.
Соответствие может быть очень близким (как между FORTRAN и сборкой) или болееотдаленный (Пролог или Лисп и сборка), но до тех пор, пока возможно создать огромное количество поведений с помощью связного языка ввода, это компилятор.