Рискуя наизусть, я задаю этот вопрос в поисках более глубокого понимания концепции языков программирования в целом. Я пишу этот вопрос для собственного назидания и назидания других.
Какое полезное определение языка компьютерного программирования и каковы его основные и необходимые компоненты? Каковы ключевые особенности, которые различают языки (функциональные, императивные, декларативные, объектно-ориентированные, сценарии и т.д.)?
Один из способов подумать об этом вопросе. Представьте, что вы смотрите на оборудование современного настольного или портативного компьютера. Предположим, что язык C или любой его вариант не существует. Как бы вы описали другим все, что необходимо для того, чтобы сделать компьютер выразительным и функциональным с точки зрения того, чего мы ожидаем от персональных компьютеров сегодня?
Связано с Tangential, что это касается компьютерных языков, которые позволяют другим языкам существовать? Например, возьмите язык сценариев, такой как Javascript, Perl или PHP. Я полагаю, что часть определения состоит в том, что на каком-то уровне есть интерпретатор, наиболее вероятно реализованный на C или С++. Можно ли написать интерпретатор для Javascript в Javascript? Это требование для полного языка? То же самое для Perl, PHP и т.д.?
Я был бы доволен списком понятий, которые можно искать или исследовать дальше.