Python-purple: Desenvolvendo bindings para Python usando o Cython

596 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
596
No SlideShare
0
A partir de incorporações
0
Número de incorporações
93
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Python-purple: Desenvolvendo bindings para Python usando o Cython

  1. 1. Python-purple:Desenvolvendo bindings para Python utilizando o CythonBruno Abinader Anderson BrigliaINdT, 2009
  2. 2. Agenda1 CythonO que é?ObjetivosAspectos GeraisExemplo
  3. 3. Agenda1 CythonO que é?ObjetivosAspectos GeraisExemplo2 LibpurpleHistóricoO que é?Aspectos Gerais
  4. 4. Agenda1 CythonO que é?ObjetivosAspectos GeraisExemplo2 LibpurpleHistóricoO que é?Aspectos Gerais3 Python-purpleHistóricoO que é?Aspectos Gerais
  5. 5. Agenda1 CythonO que é?ObjetivosAspectos GeraisExemplo2 LibpurpleHistóricoO que é?Aspectos Gerais3 Python-purpleHistóricoO que é?Aspectos Gerais4 Referências
  6. 6. Extensões em C para Python
  7. 7. CythonO que é?O Cython é:Linguagem que permite escrever extensões em C para Python
  8. 8. CythonO que é?O Cython é:Linguagem que permite escrever extensões em C para PythonBaseado na linguagem Pyrex
  9. 9. CythonO que é?O Cython é:Linguagem que permite escrever extensões em C para PythonBaseado na linguagem PyrexLinguagem similar a Python
  10. 10. CythonObjetivosO Cython proporciona:Otimização de tempo de execução de código em PythonGeração de código eficiente em C
  11. 11. CythonObjetivosO Cython proporciona:Otimização de tempo de execução de código em PythonGeração de código eficiente em CEncapsulamento de bibliotecas e módulos em C
  12. 12. CythonAspectos GeraisO Cython usa três tipos de arquivo-fonte:Arquivo de implementação .pyx
  13. 13. CythonAspectos GeraisO Cython usa três tipos de arquivo-fonte:Arquivo de implementação .pyxContém as implementações (funções em C, C++ ou Python)Arquivo de definição .pxd
  14. 14. CythonAspectos GeraisO Cython usa três tipos de arquivo-fonte:Arquivo de implementação .pyxContém as implementações (funções em C, C++ ou Python)Arquivo de definição .pxdPossui apenas declarações em C para uso em módulos do Cython
  15. 15. CythonAspectos GeraisO Cython usa três tipos de arquivo-fonte:Arquivo de implementação .pyxContém as implementações (funções em C, C++ ou Python)Arquivo de definição .pxdPossui apenas declarações em C para uso em módulos do CythonNão corresponde necessariamente a um arquivo .pyx ou módulo Python
  16. 16. CythonAspectos GeraisO Cython usa três tipos de arquivo-fonte:Arquivo de implementação .pyxContém as implementações (funções em C, C++ ou Python)Arquivo de definição .pxdPossui apenas declarações em C para uso em módulos do CythonNão corresponde necessariamente a um arquivo .pyx ou módulo PythonÚtil para armazenar declarações comuns (ex: bibliotecas externas)
  17. 17. CythonAspectos GeraisO Cython usa três tipos de arquivo-fonte:Arquivo de implementação .pyxContém as implementações (funções em C, C++ ou Python)Arquivo de definição .pxdPossui apenas declarações em C para uso em módulos do CythonNão corresponde necessariamente a um arquivo .pyx ou módulo PythonÚtil para armazenar declarações comuns (ex: bibliotecas externas)Arquivo de inclusão textual .pxi
  18. 18. CythonAspectos GeraisO Cython usa três tipos de arquivo-fonte:Arquivo de implementação .pyxContém as implementações (funções em C, C++ ou Python)Arquivo de definição .pxdPossui apenas declarações em C para uso em módulos do CythonNão corresponde necessariamente a um arquivo .pyx ou módulo PythonÚtil para armazenar declarações comuns (ex: bibliotecas externas)Arquivo de inclusão textual .pxiSimilar a diretiva #include do C
  19. 19. CythonAspectos GeraisO Cython usa três tipos de arquivo-fonte:Arquivo de implementação .pyxContém as implementações (funções em C, C++ ou Python)Arquivo de definição .pxdPossui apenas declarações em C para uso em módulos do CythonNão corresponde necessariamente a um arquivo .pyx ou módulo PythonÚtil para armazenar declarações comuns (ex: bibliotecas externas)Arquivo de inclusão textual .pxiSimilar a diretiva #include do CSub-utilizado após o uso do cimport *
  20. 20. CythonExemploHello World em Cython# salve este arquivo como test.pyxcdef char *__hello_world ():cdef char *c_string = "Hello World!"cdef object stringstring = c_string + " :)"return stringdef hello_world ():print __hello_world ()
  21. 21. CythonExemplo (2)Arquivo de setup do python# salve este arquivo como setup.pyfrom distutils.core import setupfrom distutils.extension import Extensionfrom Cython.Distutils import build_extsetup (cmdclass = {build_ext : build_ext},ext_modules = [Extension("test",["test.pyx"])])
  22. 22. CythonExemplo (3)Criação da biblioteca (módulo Python)$ python setup.py build_ext --inplace
  23. 23. CythonExemplo (3)Criação da biblioteca (módulo Python)$ python setup.py build_ext --inplaceExecutando o módulo$ python>>> import test>>> test.hello_world ()Hello World! :)
  24. 24. Libpurple
  25. 25. LibpurpleBiblioteca que provê suporte a mensagem instantânea
  26. 26. LibpurpleHistóricoFigure: Pidgin: Front-end da Libpurple
  27. 27. LibpurpleO que é?A Libpurple é:Biblioteca que provê funcionalidades clientes de mensagensinstantâneas
  28. 28. LibpurpleO que é?A Libpurple é:Biblioteca que provê funcionalidades clientes de mensagensinstantâneasSuporta vários protocolos (MSN, Yahoo, IRC, Jabber, entre outros)
  29. 29. LibpurpleO que é?A Libpurple é:Biblioteca que provê funcionalidades clientes de mensagensinstantâneasSuporta vários protocolos (MSN, Yahoo, IRC, Jabber, entre outros)Pidgin: Front-end da libpurple
  30. 30. LibpurpleO que é?A Libpurple é:Biblioteca que provê funcionalidades clientes de mensagensinstantâneasSuporta vários protocolos (MSN, Yahoo, IRC, Jabber, entre outros)Pidgin: Front-end da libpurpleOutros clientes: Adium (Mac), Finch (Console), Meebo (Web)
  31. 31. LibpurpleAspectos GeraisCaracterísticas da Libpurple:Gerencia conexões a redes de mensagem instantânea
  32. 32. LibpurpleAspectos GeraisCaracterísticas da Libpurple:Gerencia conexões a redes de mensagem instantâneaGerencia contas e preferências de usuário
  33. 33. LibpurpleAspectos GeraisCaracterísticas da Libpurple:Gerencia conexões a redes de mensagem instantâneaGerencia contas e preferências de usuárioPossui API unificada para todos os protocolos
  34. 34. LibpurpleAspectos GeraisCaracterísticas da Libpurple:Gerencia conexões a redes de mensagem instantâneaGerencia contas e preferências de usuárioPossui API unificada para todos os protocolosImplementa o que é genérico entre todos os protocolos
  35. 35. LibpurpleAspectos GeraisCaracterísticas da Libpurple:Gerencia conexões a redes de mensagem instantâneaGerencia contas e preferências de usuárioPossui API unificada para todos os protocolosImplementa o que é genérico entre todos os protocolosAPI específica para exceções
  36. 36. LibpurpleAspectos Gerais (2)Sinais e callbacks:Registro de callbacks para diversos tipos de eventos (UI operations)
  37. 37. LibpurpleAspectos Gerais (2)Sinais e callbacks:Registro de callbacks para diversos tipos de eventos (UI operations)Eventos da conta, lista de usuários, mensagens, entre outros
  38. 38. LibpurpleAspectos Gerais (2)Sinais e callbacks:Registro de callbacks para diversos tipos de eventos (UI operations)Eventos da conta, lista de usuários, mensagens, entre outrosEstruturas de callbacks populadas no início da execução do cliente
  39. 39. LibpurpleAspectos Gerais (2)Sinais e callbacks:Registro de callbacks para diversos tipos de eventos (UI operations)Eventos da conta, lista de usuários, mensagens, entre outrosEstruturas de callbacks populadas no início da execução do clienteSinais que podem ser associados a callbacks
  40. 40. LibpurpleAspectos Gerais (3)Extensões e exceções:Extensível através de plugins
  41. 41. LibpurpleAspectos Gerais (3)Extensões e exceções:Extensível através de pluginsSuporte a um protocolo específico é um plugin
  42. 42. LibpurpleAspectos Gerais (3)Extensões e exceções:Extensível através de pluginsSuporte a um protocolo específico é um pluginLidos no início da execução do cliente
  43. 43. LibpurpleAspectos Gerais (3)Extensões e exceções:Extensível através de pluginsSuporte a um protocolo específico é um pluginLidos no início da execução do clienteNão possui suporte a threadsCliente não pode lidar com a biblioteca em threads separadas
  44. 44. LibpurpleAspectos Gerais (3)Extensões e exceções:Extensível através de pluginsSuporte a um protocolo específico é um pluginLidos no início da execução do clienteNão possui suporte a threadsCliente não pode lidar com a biblioteca em threads separadasFacilidade para fazer encapsulamento
  45. 45. LibpurpleAspectos Gerais (3)Extensões e exceções:Extensível através de pluginsSuporte a um protocolo específico é um pluginLidos no início da execução do clienteNão possui suporte a threadsCliente não pode lidar com a biblioteca em threads separadasFacilidade para fazer encapsulamentoLoop principal diferente para cada tipo de cliente
  46. 46. Python-purple
  47. 47. Python-purpleInterface da Libpurple para Python escrito em Cython
  48. 48. Python-purpleHistóricoFigure: Carman: Infosharing em ação
  49. 49. Python-purpleO que é?O Python-purple é:Spin-off de funcionalidade de compartilhamento de informações entreamigos no Carman
  50. 50. Python-purpleO que é?O Python-purple é:Spin-off de funcionalidade de compartilhamento de informações entreamigos no CarmanEscrito em Cython
  51. 51. Python-purpleO que é?O Python-purple é:Spin-off de funcionalidade de compartilhamento de informações entreamigos no CarmanEscrito em CythonProvê acesso completo à implementação da Libpurple para programasPython
  52. 52. Python-purpleO que é?O Python-purple é:Spin-off de funcionalidade de compartilhamento de informações entreamigos no CarmanEscrito em CythonProvê acesso completo à implementação da Libpurple para programasPythonÚnico passo: Importar o módulo purple
  53. 53. Python-purpleAspectos GeraisCaracterísticas do Python-purple:Headers da API da Libpurple separados em arquivos .pxd
  54. 54. Python-purpleAspectos GeraisCaracterísticas do Python-purple:Headers da API da Libpurple separados em arquivos .pxdDeclaração das funções e variáveis (extern)
  55. 55. Python-purpleAspectos GeraisCaracterísticas do Python-purple:Headers da API da Libpurple separados em arquivos .pxdDeclaração das funções e variáveis (extern)Forward declarations usados para evitar loops recursivos no Cython
  56. 56. Python-purpleAspectos GeraisCaracterísticas do Python-purple:Headers da API da Libpurple separados em arquivos .pxdDeclaração das funções e variáveis (extern)Forward declarations usados para evitar loops recursivos no CythonMesmo vínculo com o mainloop da GLib que o Pidgin
  57. 57. Python-purpleAspectos GeraisCaracterísticas do Python-purple:Headers da API da Libpurple separados em arquivos .pxdDeclaração das funções e variáveis (extern)Forward declarations usados para evitar loops recursivos no CythonMesmo vínculo com o mainloop da GLib que o Pidginglib_input_add implementado em C e importado pelo Cython
  58. 58. Python-purpleAspectos GeraisCaracterísticas do Python-purple:Headers da API da Libpurple separados em arquivos .pxdDeclaração das funções e variáveis (extern)Forward declarations usados para evitar loops recursivos no CythonMesmo vínculo com o mainloop da GLib que o Pidginglib_input_add implementado em C e importado pelo CythonOutras funções da mainloop implementadas pela LibpurpleCore: Inicia a execução da biblioteca
  59. 59. Python-purpleAspectos GeraisCaracterísticas do Python-purple:Headers da API da Libpurple separados em arquivos .pxdDeclaração das funções e variáveis (extern)Forward declarations usados para evitar loops recursivos no CythonMesmo vínculo com o mainloop da GLib que o Pidginglib_input_add implementado em C e importado pelo CythonOutras funções da mainloop implementadas pela LibpurpleCore: Inicia a execução da bibliotecaInicializa o núcleo da Libpurple e as estruturas de operações na UI
  60. 60. Python-purpleAspectos Gerais (2)Callbacks e sinais:Armazenados em dicionários lidos pelas callbacks genéricasimplementadas em C
  61. 61. Python-purpleAspectos Gerais (2)Callbacks e sinais:Armazenados em dicionários lidos pelas callbacks genéricasimplementadas em CChamam sequencialmente de acordo com o evento ou sinal associado
  62. 62. Python-purpleAspectos Gerais (2)Callbacks e sinais:Armazenados em dicionários lidos pelas callbacks genéricasimplementadas em CChamam sequencialmente de acordo com o evento ou sinal associadoTraduzem os parâmetros das chamadas em Python para C e vice-versa
  63. 63. Python-purpleAspectos Gerais (2)Callbacks e sinais:Armazenados em dicionários lidos pelas callbacks genéricasimplementadas em CChamam sequencialmente de acordo com o evento ou sinal associadoTraduzem os parâmetros das chamadas em Python para C e vice-versaQuando um retorno é necessário:Função em C intercepta o retorno da callback
  64. 64. Python-purpleAspectos Gerais (2)Callbacks e sinais:Armazenados em dicionários lidos pelas callbacks genéricasimplementadas em CChamam sequencialmente de acordo com o evento ou sinal associadoTraduzem os parâmetros das chamadas em Python para C e vice-versaQuando um retorno é necessário:Função em C intercepta o retorno da callbackVide add_callback() e signal_connect()
  65. 65. Python-purpleDiagrama de fluxo
  66. 66. ReferênciasCython: http://www.cython.orgCython user guide: http://docs.cython.orgCython wiki: http://wiki.cython.orgLibpurple: http://pidgin.imPáginas dos desenvolvedores: http://developer.pidgin.imWiki: http://developer.pidgin.im/wikiPython-purple: http://garage.maemo.org/projects/python-purpleHowTo: http://developer.pidgin.im/wiki/PythonHowTo
  67. 67. Perguntas ?
  68. 68. Obrigado!Contato:bruno.abinader@openbossa.organderson.briglia@openbossa.org#indt @ irc.freenode.org

×