Eu acho que você está basicamente correto. Um tempo de execução de idioma já é um sistema orientado a dados totalmente flexível. Ele pega um dado (o programa) e o utiliza para determinar como deve agir em outros dados. Pode até ter um esquema multiusuário para armazenar código para reutilização por outros programas (desde um caminho de inclusão até o gerenciamento adequado da instalação).
Uma "linguagem de script", grosso modo, é um tempo de execução de idioma em que essa entrada de código é legível por humanos. Um compilador coloca uma etapa extra entre o usuário e o tempo de execução. Linguagens de "piadas" como Malbolge e APL não precisam ser legíveis por humanos de nenhuma forma. Mas é tudo a mesma coisa em um nível e, de qualquer maneira, legível por humanos não significa que todos os usuários em potencial tenham as habilidades necessárias para ler ou escrever, ou é esperado que eles os desenvolvam.
Existem boas razões pelas quais você normalmente não expõe um tempo de execução do idioma diretamente aos usuários finais. O principal é que a remoção da flexibilidade aumenta a conveniência.
Se eu quiser digitar uma postagem SO, eu apenas quero digitá-la. Sou perfeitamente capaz de escrever um programa C ++ para produzi-lo, mas não usaria um navegador da Web que expusesse um editor de programa C ++ em vez de uma caixa de texto comum. Pessoas que não conhecem C ++ não apenas não usariam o navegador, como também não.
Se eu quiser configurar certos parâmetros de negócios, não necessariamente o desejo usando uma linguagem de especificação completa de Turing, e mesmo que eu tenha feito isso provavelmente não é distinguível de "codificar" esses mesmos parâmetros de negócios em qualquer outra programação língua. Você ainda precisa considerar se o que está escrevendo significa o que deseja que ele signifique. Você ainda precisa testar se as alterações estão corretas. Ou seja, você ainda precisa de habilidades de programação para todas as tarefas que são não-trivial e não antecipado por alguém que não tem habilidades de programação que prepararam um sub-sistema especializado ( "aplicação") para que você configure ( "utilização").
Portanto, se você está prestes a embarcar em um sistema 100% orientado a dados, que pode fazer qualquer coisa com os dados corretos, faça duas perguntas:
- Estamos no negócio de inventar linguagens de programação ou deveríamos estar?
- Nossa nova linguagem de programação será melhor (para nossos propósitos) do que as que já temos e iremos apoiá-la e desenvolvê-la conforme necessário?
Às vezes, as respostas são afirmativas e você escreve algum tipo de idioma específico do domínio. Ou até mesmo uma linguagem de programação de uso geral, se você é Sun / Microsoft / Stroustrup / van Rossum / muitas outras. Às vezes, as respostas são não e você tem o efeito "plataforma interna" - depois de muito esforço, tentativa e erro, você acaba com alguma coisa. Se você tiver sorte, é apenas ligeiramente inferior à linguagem de programação em que você a escreveu e não é mais fácil de usar.
Alguns idiomas são mais difíceis ou fáceis de usar do que outros, especialmente se forem especializados para um propósito como o R, alguns usuários os acharão muito mais fáceis. O que você provavelmente não fará é tornar a programação geral de aplicativos fundamentalmente mais fácil. A qualquer momento, provavelmente existem várias pessoas / organizações no mundo com potencial para fazer isso, mas seu chefe / empresa deve considerar honestamente se isso inclui ele ou você.
Existe um truque frequentemente usado para jogos, que é expor as ligações Lua ao mecanismo do jogo. Isso permite que os designers programem em uma linguagem relativamente fácil, mas ainda envolvam um programador "real" quando necessário para obter desempenho ou acessar funcionalidades específicas do mecanismo ou da plataforma. Os scripts Lua resultantes são "dados" no que diz respeito ao mecanismo. Nem todos eles precisam incluir muito do que você chamaria de "lógica" em oposição aos dados de configuração, e geralmente definem praticamente todo o enredo e ambiente, mas não toda a jogabilidade. Isso não é 100% orientado a dados e certamente não é 100% livre de erros, mas é um compromisso prático interessante.