Pergunta

Alguém tem alguma experiência com isso? Eu estou trabalhando em um decompiler Java agora em C ++, mas gostaria de uma linguagem de alto nível para fazer as transformações reais das árvores internos. Estou curioso para saber se a sobrecarga de empacotamento de dados entre as línguas vale a pena o benefício de uma forma mais expressiva e idioma para melhor articular o que estou tentando realizar (como Haskell). É este realmente feito no "mundo real", ou seja, geralmente, escolhe um idioma no início de um projeto e ficar com ela? Todas as dicas de quem já tentou isso?

Foi útil?

Solução

Eu sou um grande defensor de sempre escolher a linguagem de programação certa para cada desafio. Se houver outra linguagem que lida com alguma tarefa de outra maneira complicada com facilidade, eu diria que ir para ela.

Isso acontece no mundo real? Sim. Atualmente, estou trabalhando em um projeto que é composta de ambos código PHP e Objective-C.

O truque é, como você apontou, a comunicação entre as duas línguas. Se possível, deixar que cada vara linguagem para seu próprio domínio, e ter as duas seções comunicar da forma mais simples possível. No meu caso, foi documentos XML enviadas via http. No seu caso, algum tipo de arquivo de texto formatado pode ser a resposta.

Outras dicas

custos de triagem dependem dos idiomas e arquitetura que você está trabalhando. Por exemplo, se você está no CLR ou JVM, há baixo custo de interoperabilidade soluções disponíveis - embora eu saiba que você está trabalhando com, provavelmente, não gerenciado C ++

.

Outra avenida é uma linguagem específica de domínio incorporado. transformações árvores são muitas vezes expresso através de correspondência de padrão e aplicação de um número relativamente pequeno de funções. Você poderia considerar escrever uma árvore simples padrão de correspondência - por exemplo, algo que se parece com Lisp s-exprs mas usa espaços reservados para as variáveis ??de captura - com ações associadas que são funções que transformam o sub combinado

.

John Ousterhout , o inventor do Tcl / Tk era um advogado stong de programação multi-linguagem e escreveu extensivamente sobre o assunto. A fim de fazer isso, você precisa de um mecanismo de interface limpa entre os idiomas que você está usando para isso. Existem muito poucos mecanismos para isso. Exemplos de diferentes mecanismos para fazer isso são:

  • SWIG (Wrapper simplificado e Interface Generator pode tomar um c ou c ++ (ou várias outras línguas) arquivo de cabeçalho e gerar um Interface para uma linguagem de alto nível tal como Perl ou pitão que permite você para acessar a API. tem outros sistemas que utilizam esta abordagem.

  • Java suporta JNI , e vários outros sistemas, como Python ctypes , VisualWorks DLL / C Connect são mecanismos nativos que lhe permitem explicitamente construir a chamada para a parte inferior nível do subsistema.

  • Tcl / Tk foi concebido explicitamente embeded, e tem um API nativa para uma biblioteca C para adicionar ganchos em o idioma. As construções para Isto assemelha-se argv [] em estruturas C, e foram projetados para torná-lo relativamente fácil de interface de um De linha de comando programa baseado em C Tcl. Este é semelhante ao anterior exemplo, mas proveniente da frente direção. Muitas linguagens de script tal como Python, Lua e apoio Tcl este tipo de mecanismo.

  • mecanismos de cola explícitas tais como Pyrex , que são semelhantes a uma invólucro gerador, mas têm o seu linguagem própria para a definição do interface. Pyrex é realmente um linguagem de programação completa. Middleware tais como COM ou CORBA permitir que um genérico definição de interface a ser construído externamente à aplicação numa interface de linguagem de definição de e ligações de idioma para o línguas em causa a utilizar o mecanismo de interface comum.

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