Estou procurando duas coisas: velocidade e integração. Geralmente os dois andam juntos e com familiaridade. Infelizmente, para C ++, não há praticamente nenhuma linguagem que ofereça velocidade e integração. Eu usei Lua e foi horrível. Passei o tempo todo escrevendo ligações e sem tempo suficiente escrevendo código.
Caracteristicas do idioma? O ponto de incorporar uma linguagem de script não é para que ele possa ter recursos de linguagem dinâmica whizzy que meu idioma original não possuía, é para que possa ser interpretado em tempo de execução . Eu realmente não me importo além disso, desde que seja basicamente funcional, então tudo bem - e se encaixa na minha linguagem host (neste caso, C ++). No entanto, surpreendentemente, as linguagens projetadas para serem integradas aos aplicativos host falham totalmente na parte da integração .
Preciso de co-rotinas? Não, não preciso de co-rotinas. Preciso de digitação dinâmica? Não, eu preciso saber que tipos estão voltando para mim a partir da minha linguagem de script e, como todo o meu código existente é construído com base em uma digitação muito forte, eu realmente gostaria que meu código de script também respeitasse isso. Preciso de coleta de lixo? Não, meus tipos já gerenciam seus próprios recursos, e eu definitivamente quero destruição determinística. Eu quero ir? Não, eu quero lançar exceções.
O problema que encontrei foi que basicamente todas as linguagens de script existentes foram projetadas para estender C, não C ++, e não suportam adequadamente o modelo C ++ de várias maneiras e, além disso, elas têm semântica totalmente diferente. Como vou traduzir shared_ptr
, que é a destruição determinística automática, em um ambiente de coleta de lixo? Você pode escrever as bibliotecas de quebra automática que desejar, não alterará a semântica do idioma subjacente, sendo incompatível com o idioma que está tentando estender com ele. Como posso garantir que esse void*
é o tipo certo? Como posso lidar com a herança? Como faço para lançar e capturar exceções? Simplesmente não funciona.
Uma boa linguagem de script para C ++ seria estaticamente digitada, valorizaria a semântica, deterministicamente destruída, lançaria e capturaria exceções e respeitaria meus destruidores / construtores / construtores de cópia, porque todos os meus tipos funcionarão, agradáveis e fáceis, e a linguagem resultante será rápido e suporte toda a minha semântica original, fácil de vincular.