[pt] Um cenário comum atualmente é o de aplicações
desenvolvidas usando duas
linguagens de programação a fim de otimizar partes onde o
desempenho é
crítico e permitir extensibilidade através de scripts
escritos pelo usuário.
Há várias formas de se obter esse tipo de
interoperabilidade; idealmente,
entretanto, uma linguagem deve prover uma interface de
acesso externo
(foreign language interface, FLI) que permita ao
programador receber e
enviar tanto chamadas como dados para outra linguagem.
Este trabalho discute as principais questões envolvendo o
projeto de APIs
para integração de ambientes de execução de linguagens em
aplicações C.
Apresentamos os principais problemas enfrentados na
interação entre código
executando em um ambiente com características
inerentemente dinâmicas
como o de uma linguagem de script com código C. Comparamos
aqui as
abordagens empregadas por cinco linguagens no tratamento
da comunicação
entre os espaços de dados de C e do ambiente de execução
embutido e as
conseqüências destas abordagens no gerenciamento de
memória, bem como
no compartilhamento de código entre a aplicação C e o da
linguagem de
script.
Ilustramos as diferenças das APIs destas linguagens e o
impacto destas
no código resultante de uma aplicação C através de um
estudo de caso.
Diferentes linguagens de script são embutidas como plugins
de uma mesma
biblioteca, que por sua vez expõe a aplicações clientes
uma API genérica de
scripting. Assim, o código de cada plugin permite observar
de forma clara
e isolada os procedimentos adotados em cada linguagem para
chamada de
funções, registro de funçoes C e conversão de dados entre
os ambientes. / [en] Applications written in two programming languages, in
order to optimize
parts where performance is critical or to obtain
extensibility through userwritten
scripts, are commonplace nowadays. There are several ways
to
obtain this kind of interoperability; ideally, however, a
language should
provide a foreign language interface (FLI), allowing the
programmer to send
and receive both data and function calls to the external
language.
This work discusses the main issues involving the design
of APIs for the
integration of language environments within C
applications. We present the
main problems faced in the interaction between code
executed in an environment
with inherently dynamic characteristics such as a
scripting language
and C code. We compare the approaches employed by five
languages when
handling communication between the data spaces of C and
the embedded
runtime environment and the consequences of these
approaches in memory
management, as well as sharing of code between the C
application and that
from the scripting language.
We illustrate the differences of the APIs of those
languages and their impact
in the resulting code of a C application through a case
study. Different
scripting languages were embedded as plugins for a
library, which on its turn
exposes to client applications a generic scripting API.
This way, the code of
each plugin allows us to observe in a clear and isolated
way the procedures
adopted by each language for function calls, registration
of C functions and
conversion of data between the environments.
Identifer | oai:union.ndltd.org:puc-rio.br/oai:MAXWELL.puc-rio.br:9497 |
Date | 26 January 2007 |
Creators | HISHAM HASHEM MUHAMMAD |
Contributors | ROBERTO IERUSALIMSCHY |
Publisher | MAXWELL |
Source Sets | PUC Rio |
Language | Portuguese |
Detected Language | English |
Type | TEXTO |
Page generated in 0.3051 seconds