Я думаю, что вы в основном правы. Языковая среда выполнения - это уже полностью гибкая система, управляемая данными. Он берет один кусок данных (программу) и использует его, чтобы определить, как он должен действовать на другие данные. Он может даже иметь многопользовательскую схему для хранения кода для повторного использования другими программами (от включаемого пути до правильного управления установкой).
Грубо говоря, «язык сценариев» - это среда исполнения языка, в которой этот ввод кода понятен человеку. Компилятор размещает дополнительный шаг между пользователем и средой выполнения. Такие «шутливые» языки, как Malbolge и APL, не должны быть удобочитаемыми в любой форме. Но это все то же самое на одном уровне, и, в любом случае, человекочитаемое не означает, что все потенциальные пользователи имеют навыки для чтения или записи, или можно ожидать их развития.
Существуют веские причины, по которым вы обычно не предоставляете конечным пользователям языковую среду выполнения напрямую. Основным из них является то, что устранение гибкости повышает удобство.
Если я хочу напечатать SO сообщение, я просто хочу напечатать его. Я вполне способен вместо этого написать программу на С ++ для ее вывода, но я бы не стал использовать веб-браузер, в котором вместо обычного текстового поля отображался редактор программ на С ++. Люди, которые не знают C ++, не только не будут использовать браузер, но и не смогут.
Если я хочу настроить определенные бизнес-параметры, то я не обязательно хочу делать это с использованием языка спецификации, полного по Тьюрингу, и даже если я это сделаю, это, вероятно, не отличается от «жесткого кодирования» тех же бизнес-параметров в любом другом программировании. язык. Вам все еще нужно решить, означает ли то, что вы пишете, то, что вы хотите, чтобы это значило. Вам все еще нужно проверить, что изменения верны. То есть, вам все еще нужны навыки программирования для любых задач , которые не являются тривиальными и не порочат кого - то , кто действительно есть навыки программирования , которые подготовили специальную подсистему ( «приложение») для вас настроить ( «использование»).
Поэтому, если вы собираетесь использовать систему, основанную на 100% данных, которая может делать все, что нужно, с правильными данными, у вас есть два вопроса:
- Мы в изобретении языков программирования, или мы должны быть?
- Будет ли наш новый язык программирования лучше (для наших целей), чем тот, который у нас уже есть, и будем ли мы поддерживать и развивать его по мере необходимости?
Иногда ответы да, и вы пишете какой-то предметно-ориентированный язык. Или даже настоящий язык программирования общего назначения, если вы Sun / Microsoft / Stroustrup / van Rossum / многие другие. Иногда ответов нет, и вы получаете эффект «внутренней платформы» - после долгих усилий, проб и ошибок вы что-то получаете. Если вам повезет, он лишь немного уступает языку программирования, на котором вы его написали, и не проще в использовании.
Некоторые языки сложнее или проще в использовании, чем другие, в частности, если они специализированы для такой цели, как R, то некоторые пользователи найдут их намного проще. Что вы, вероятно, не сделаете, так это существенно упростит разработку приложений. В любой момент в мире, вероятно, есть несколько людей / организаций, которые могут это сделать, но ваш начальник / компания должны честно подумать, включает ли это его или вас.
Для игр часто используется хитрость, заключающаяся в том, чтобы привязать Lua к игровому движку. Это позволяет дизайнерам программировать на относительно простом языке, но при этом привлекать «настоящего» программиста, где это необходимо для производительности или для доступа к определенным функциям движка или платформы. Результирующие сценарии Lua являются «данными» для движка. Им не обязательно включать большую часть того, что вы бы назвали «логикой», в отличие от данных конфигурации, и часто они в значительной степени определяют весь сюжет и среду, но не весь игровой процесс. Это не на 100% на основе данных и, конечно, не на 100% без ошибок, но это интересный практический компромисс.