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

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.
Advertisements

Curso de aprofundamento na linguagem C
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Denise Guliato Faculdade de Computação – UFU
Laboratório de Programação
Capítulo VIII – Subprogramação
Paulo Marques Hernâni Pedroso
Programação II Estruturas de Dados
Programação II Estruturas de Dados
Programação para Engenharia I
Rafael Pinto Frederico Corrêa
Linguagem de Programação C++
Linguagem de Programação 1
Disciplina: AAM Profa. Ana Watanabe 03/13 vol.2
Ponteiros em C.
YACC.
Universidade Federal do Espírito Santo
Universidade Federal do Espírito Santo
Análise Léxica Supondo o trecho de programa abaixo:
Linguagem C Strings.
Prof. Msc. Raul Paradeda Aula 3 Fundamentos
Introdução a Linguagem de Programação C
Haskell Binding for GraphViz João Paulo Barbosa
Revisão da Linguagem C.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
JAVA: Conceitos Iniciais
Introdução a Computação e Cálculo Numérico
Rodrigo Cristiano Silva
Introdução a Computação e Cálculo Numérico
Aula prática 13 Orientação a Objetos – C++ Parte 1
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Curso de Nivelamento LCG
1 Ponteiros Ponteiros são variáveis que guardam localizações em memória. A declaração de uma variável ponteiro x para um dado tipo type é type *x; Essa.
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tópicos avançados em internet A
Atributos, Encapsulamento e Interface em Java
Professor Mário Dantas
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
Introdução à Programação Orientada a Objetos com Java
Tipos Abstratos de Dados
Centro de Informática – UFPE
Curso de C/C++ Aula 2 Instrutor: Luiz Felipe Sotero
Programação Visual Visual Basic.
Linguagem C : Ponteiros
Programação em C++ Compiladores
Java Bytecode Software Básico Mitsuo Takaki.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Declarando e Chamando Funções
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Aula Prática 3 Funções Monitoria Introdução à Programação.
Tipos de dados inteiro caracter real logico
Aula Prática 3 Funções Monitoria Introdução à Programação.
Haskell Programação Funcional Diego Lima Rubem Moreira.
 2000 Prentice Hall, Inc. All rights reserved. 1 Capítulo 8 - Caracteres e Strings Sumário 8.1Introdução 8.2Conceitos Fundamentais de Strings e Caracteres.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
PROGRAMAÇÃO II – PARTE 6 Profa. Maria Augusta Constante Puget.
30/8/2015(c) Dept. Informática - PUC-Rio1 INF1007: Programação 2 Módulos.
Linguagem de Programação
1 Programação – JAVA Unidade - 4 Arrays e Strings Prof. Aparecido V. de Freitas Mestre e Doutorando em Engenharia da Computação pela EPUSP.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Fundamentos de Programação 1
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

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

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:

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

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.

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

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

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.

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.

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

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):

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):

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

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

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

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

Prof.: Francisco Heron Equipe: Israel Cavalcanti | Ricardo Ulisses | Marcos de Souza FFI - Foreign Function Interface Referências The Haskell 98 Foreign Function Interface 1.0 A Haskell foreign function interface