Existe alguma teoria da linguagem de programação descrevendo interfaces de função estrangeira (FFI) e várias ligações de linguagem?

16

Existe alguma teoria da linguagem de programação descrevendo interfaces de função estrangeira (FFI) e várias ligações de linguagem?

Eu perguntei alguns problemas de implementação no stackoverflow , o que não é adequado aqui. Mas gostaria de perguntar a partir da visualização deste site e ver o que eu poderia obter daqui.

Realmente aprecio sua resposta!

Obrigado a Dave Clarke por sua resposta no meta

StackExchange for All
fonte

Respostas:

17

O artigo Operational Semantics for Multi-Language Programs, de Jacob Matthews e Robert Bruce Findler, apresenta duas abordagens para definir a semântica de programas escritos em duas linguagens de programação, cuidando particularmente dos dados definidos em uma língua e utilizados na outra. A incorporação global permite que os valores criados em um idioma apareçam no código em execução de outro, mas eles só podem ser transmitidos, não operados (ou talvez operados apenas por uma pequena interface). A incorporação naturais permite que os valores em uma língua para ser usado na outra através da realização de uma chamada fundido entre linguagens , o qual converte os valores a partir de uma língua para a outra.

O artigo JNI Light: Um Modelo Operacional para o Core JNI de Gang Tan apresenta uma semântica formal de como o JNI existente funciona. Em contraste com o artigo anterior, isso formaliza muitos dos detalhes de baixo nível do que está acontecendo, em vez de tentar explorar os problemas de uma perspectiva fundamental.

O trabalho de verificação de tipo de chamadas externas de função, como Verificação de segurança de tipo de chamadas externas de função de Michael Furr e Jeffrey Foster, também fornece uma estrutura formal para definir o sistema de tipos e provar sua integridade.

Examinar as referências nesses documentos e descobrir onde elas são citadas usando o google scholar ajudará você a descobrir uma imagem mais completa do que foi feito na área.

Dave Clarke
fonte
10

Na sequência do comentário de Marc, quero corrigir a culpa. Wadler não introduziu o conceito de culpa, que é devido a Findler e Felleisen , nem introduziu a culpa pela mediação entre diferentes idiomas, que se origina no meu artigo de 2006 .

No entanto, Marc está inteiramente correto no ponto da culpa, e o artigo de Matthews que Dave aponta também discute esse assunto.

Sam Tobin-Hochstadt
fonte
11
O documento "Programas bem digitados" realmente fornece as citações corretas e reivindica sua contribuição específica como "fornecendo" uma visão uniforme dos trabalhos recentes sobre contratos, tipos graduais e tipos híbridos, introduzindo uma noção de culpa (dos contratos) em um sistema de tipos com elencos (semelhantes às linguagens intermediárias usadas para tipos gradual e híbrido), produzindo um sistema que chamamos de tipos evolutivos ".
SCLV
2
Peço desculpas a Sam por não dar crédito total a todos aqueles que tiveram uma participação pelas origens da "culpa". Por acaso foram os trabalhos que Wadler co-autorou que me apresentaram a ideia e com os quais estou mais familiarizado.
Marc Hamann
9

Embora muitos não estejam obviamente diretamente relacionados, uma coisa que vem à mente é o conceito de "culpa" de Wadler et al. . Isso fornece uma base teórica para pensar em misturar diferentes regimes de digitação em um todo coerente.

Em essência, a culpa permite combinar idiomas com garantias de tipo mais fraco com idiomas com garantias de tipo mais fortes sem perder todos os benefícios das garantias fortes. A idéia é que as partes do sistema com garantias mais fracas receberão a "culpa" se certas coisas derem errado, localizando erros do tipo runtime.

Espero que você possa ver como isso pode ser útil para FFI e ligações aplicáveis ​​a idiomas com sistemas de tipos variados.

Edit: Veja a resposta de Sam TH para uma história intelectual mais completa do conceito de "culpa".

Marc Hamann
fonte