Minha situação específica, quando eu uso uma linguagem de script interpretada em um aplicativo principal:
Existe um dispositivo externo que executa várias funções. Medições, controle, leituras. É bastante "burro" e requer controle preciso, passo a passo, incluindo muitos estados de espera e tomada de decisões ad-hoc no lado do mecanismo de controle.
Várias funcionalidades do dispositivo são necessárias em vários pontos da aplicação principal, em momentos diferentes, geralmente sob demanda. O aplicativo principal não permite estados de espera, como tal, tudo deve ser feito com máquinas de estados finitos.
Agora, quem escreveu uma máquina de estados finitos sabe que implementar um estado de espera é efetivamente pelo menos dois, geralmente três ou quatro estados internos da máquina. Implementar vinte estados de espera para várias funções (e aguardar suas respostas e reagir de acordo) do dispositivo externo seria uma experiência muito, muito frustrante.
Portanto, em vez disso, existem estados de "executar uma função sem espera", "executar uma função de bloqueio", "executar uma função de ramificação / condicional / salto" na máquina de estados finitos, talvez seis estados no total. E existem scripts de controle que são agendados para execução e, em seguida, executados pelo intérprete que controla o dispositivo externo e seus resultados são colocados onde são necessários.
Resumindo, o aplicativo: em um RTOS, o uso de uma linguagem de script interpretada interna pode reduzir enormemente a complexidade de executar tarefas abundantes em estados de espera (funções de bloqueio).