Pergunta

Estou pensando em adicionar funcionalidade de script a uma base de código existente e avaliando os prós/contras de vários pacotes.Lua é provavelmente a escolha mais óbvia, mas gostaria de saber se as pessoas têm alguma outra sugestão baseada em sua experiência.

Os scripts serão acionados em determinados eventos e poderão permanecer residentes por um período de tempo.Por exemplo, na inicialização, um script pode definir diversas opções que o programa apresenta ao usuário como uma série de botões.Ao selecionar um desses botões o programa notificará o script onde novos eventos poderão ocorrer.

Estes são os únicos requisitos reais;

  1. Deve ser uma biblioteca multiplataforma compilável a partir do código-fonte
  2. Os scripts devem ser capazes de chamar funções registradas no lado do código
  3. O código deve ser capaz de chamar funções do lado do script
  4. Ser usado em uma base de código C/C++.
Foi útil?

Solução

Com base na minha própria experiência:

  • Pitão.IMHO esta é uma boa escolha.Temos uma base de código muito grande com muitos usuários e eles gostam muito.
  • Rubi.Existem alguns aplicativos muito legais, como o Google Sketchup, que usam isso.Eu escrevi um plugin para Sketchup e achei muito legal.
  • Tcl.Esta é a linguagem de script incorporável da velha escola preferida, mas não tem muito impulso atualmente.É de alta qualidade, eles o usam no Telescópio Espacial Hubble!
  • Lua.Eu só fiz coisas infantis com ele, mas no IIRC ele só tem um tipo numérico de ponto flutuante, então certifique-se de que isso não seja um problema para os dados com os quais você estará trabalhando.

Temos sorte de viver na era de ouro dos scripts, por isso é difícil fazer uma escolha errada se você escolher qualquer um dos mais populares.

Outras dicas

Eu brinquei um pouco com Macaco aranha.Parece que pelo menos valeria a pena dar uma olhada na sua situação.Também ouvi coisas boas sobre Lua.O grande argumento para usar uma linguagem de script javascript é que muitos desenvolvedores já a conhecem e provavelmente se sentiriam mais confortáveis ​​desde o início, enquanto Lua provavelmente teria uma pequena curva de aprendizado.

Não estou totalmente certo, mas acho que o macaco-aranha atende aos 4 requisitos.

Usei Python extensivamente para esse propósito e nunca me arrependi.

Lua tem a API C mais direta para vinculação a uma base de código que já usei.Na verdade, eu costumo enrolar rapidamente as encadernações manualmente.Considerando que muitas vezes você não consideraria fazer isso sem um gerador como gole para os outros.Além disso, é normalmente mais rápido e mais leve do que as alternativas, e corrotinas são um recurso muito útil que poucos outros idiomas oferecem.

AngelScript

permite chamar funções C padrão e métodos C++ sem necessidade de funções de proxy.O aplicativo simplesmente registra as funções, objetos e métodos com os quais os scripts devem ser capazes de trabalhar e nada mais precisa ser feito com seu código.As mesmas funções usadas internamente pelo aplicativo também podem ser usadas pelo mecanismo de script, o que elimina a necessidade de duplicar funcionalidades.

Para o escritor de scripts, a linguagem de script segue a sintaxe amplamente conhecida de C/C++ (com pequenas alterações), mas sem a necessidade de se preocupar com ponteiros e vazamentos de memória.

A pergunta original descreveu o Tcl como um "T".

Tcl foi projetado desde o início para ser uma linguagem de script incorporada.Ela evoluiu para ser uma linguagem dinâmica de primeira classe por si só, mas ainda é usada em todo o mundo como uma linguagem incorporada.Ele está disponível sob a licença BSD, portanto é tão gratuito quanto possível.Ele também compila em praticamente qualquer plataforma moderna e em muitas não tão modernas.E não funciona apenas em sistemas desktop, existem variações disponíveis para plataformas móveis.

Tcl se destaca como uma linguagem "cola", onde você pode escrever funções de alto desempenho em C enquanto ainda se beneficia das vantagens de uma linguagem de script para partes menos críticas de desempenho do aplicativo.

Tcl também vem com um kit de ferramentas GUI (Tk) de primeira classe que é sem dúvida um dos kits de ferramentas GUI multiplataforma mais fáceis disponíveis.Ele também faz uma interface muito boa com SQLite e outros bancos de dados, e já tem suporte integrado para Unicode há algum tempo.

Se a interface de script for disponibilizada para seus clientes (em vez de simplesmente permitir que seus próprios engenheiros trabalhem no nível de script), o Tcl será extremamente fácil de aprender, pois há um total de apenas 12 regras que governam toda a linguagem (como do tcl 8.6).Na verdade, o Tcl brilha como uma forma de inventar linguagens específicas de domínio, que é frequentemente usada como uma solução de script para o usuário final.

Já houve algumas sugestões excelentes, mas eu só queria mencionar que Perl também pode ser chamado/pode chamar para C/C++.

Você provavelmente poderia usar qualquer linguagem moderna de script/bytecode.

Se você estiver disposto a suportar as dificuldades de crescimento de um novo produto, poderá usar o Papagaio VM.Que tem suporte para muitos, senão todos os idiomas listados nesta página.Infelizmente ainda não foi feito, mas isso não impediu algumas pessoas de usá-lo em um ambiente de produção.

Acho que a maioria das pessoas provavelmente está mencionando a linguagem de script com a qual estão mais familiarizadas.Da minha perspectiva, o Tcl foi projetado especificamente para fazer interface com C, portanto, o domínio do seu problema é feito sob medida para a linguagem.No entanto, tenho certeza de que Python, Perl ou Lua serviriam.Você provavelmente deve escolher o idioma que é mais familiar para sua equipe atual, pois isso reduzirá o tempo de aprendizado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top