A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Introdução Estrutura Léxica Declarações.

Apresentações semelhantes


Apresentação em tema: "Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Introdução Estrutura Léxica Declarações."— Transcrição da apresentação:

1 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Introdução Estrutura Léxica Declarações Estrangeiras Chamadas C Padrão Especificação de Entidades Externas Referências sobre o tema Tópicos Abordados

2 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Interação inter-linguagens Reutilização de código Introdução FFI é uma interface criada para auxiliar os programadores quando houver a necessidade de utilização de um código escrito em outra linguagem num projeto em Haskell, ou vice- versa. Possibilita:

3 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Introdução O design usado na concepção da FFI para Haskell permite especificar convenções de chamada a outras linguagens, porém abordaremos apenas a interface com a linguagem C, a qual é exigida por toda implementação Haskell FFI. Compiladores compatíveis com o padrão: GHC Hugs NHC98

4 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Estrutura Léxica Para importar ou exportar funções, existem declarações pré-definidas em Haskell por meio de palavras chaves reservadas pelo FFI.

5 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface foreign export | safe | jvm |ccall | cplusplus | dotnet | stdcall | outras convenções de chamadas específicas do sistema Estrutura Léxica Identificador reservado: foreign Identificadores Especiais: ccall jvm cplusplus dotnet stdcall

6 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Tipos Estrangeiros Básicos Char, Int, Float, Double e Bool Definidos no Haskell 98 Prelude: Definidos pelo módulo Foreign: Int8, Int16, Int32, Int64, Word8, Word16, Word32, Word64, Ptr, FunPtr e StablePtr

7 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Declarações Estrangeiras Declaração de importação foreign import c e v :: t Declara a variável v do tipo t para ser definida internamente e especifica que v é obtida executando-se a entidade externa identificada pela string e, usando a convenção de chamada c.

8 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Declarações Estrangeiras Declaração de exportação foreign export c e v :: t Declara a variável v do tipo t para ser definida externamente e define a entidade externa e, usando a convenção de chamada c. A entidade e pode ser usada por código externo usando a convenção de chamada c.

9 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Chamadas C Padrão Declaração de importação foreign import ccall “string.h strlen” clen :: Ptr CChar -> IO CSize Declaração de exportação foreign export ccall “addInt” (+) :: Int -> Int -> Int

10 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface static - para funções ou endereços estáticos dynamic - converte ponteiros de funções C em funções Haskell wrapper - faz o inverso de dynamic ”[static] [chname] [&] [cid]” Chamadas C Padrão Importação de Entidades Externas Tipo da entidade a ser importada (impent):

11 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface “[cid]” Obs.: Se cid for omitida, o compilador usará o nome da variável de exportação (também vale para o “import”). Exportação de Entidades Chamadas C Padrão Tipo da entidade a ser exportada (expent):

12 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Usando o foreign export ccall: Compilando o módulo foo.hs, o qual usa foreign export ou são gerados dois arquivos: 1. foo_stub.h 2. foo_stub.c que contêm a definição. Chamadas C Padrão

13 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Caso o seguinte código seja compilado module foo where foreign export ccall foo :: Int -> IO Int foo :: Int -> IO Int foo n = return ( length (f n) ) f :: Int -> [Int] f 0 = [] f n = n : (f (n-1)) Exemplo

14 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface O arquivo foo_stub.h conterá o seguinte código: #include “HsFFI.h” Extern HsFFI foo(HsInt a0); e foo_stub.c conterá a definição gerada de foo(). Para chamar foo() de C basta incluir: #include “foo_stub.h” Exemplo

15 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Exemplo foo_stub.c foo_stub.h foo_stub.o foo.hs Compilador Haskell

16 Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface http://www.cse.unsw.edu.au/~chak/haskell/ffi/ffi.pdf Referências The Haskell 98 Foreign Function Interface 1.0 A Haskell foreign function interface http://www.haskell.org/hdirect/ffi.html


Carregar ppt "Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Introdução Estrutura Léxica Declarações."

Apresentações semelhantes


Anúncios Google