Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
UNIVERSIDADE FEDERAL DE CAMPINA GRANDE – UFCG
   CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA – CEEI
     DEPARTAMENTO DE S...
Sumário
Sumário .............................................................................................................
1 Introdução

       Com origem no laboratório de Inteligência Artificial do MIT como uma extensão do
TECO, o Emacs ganhou...
Figura 1: Visão arquitetural do emacs. (1) leitura do arquivo .emacs durante a execução do sistema; (2)
 referência aos pl...
arquivo a funcionalidades como syntax highlighting, autocomplete, spell-checking e outros.
        O segundo grupo determi...
Entre as estruturas utilizadas nos modos de operação, o Keymap e a Syntax Table
merecem destaque. A primeira estrutura con...
O primeiro conceito é o Frame que identifica cada janela gráfica do sistema
operacional associada ao Emacs.
       O outro...
3.4 Interface com o Sistema Operacional

       Para interagir com o sistema operacional ou programas externos, o Emacs
di...
História do Emacs. Acedido em: 23, agosto, 2009, em: http://www.emacswiki.org/emacs-
pt/Hist%C3%B3riaDoEmacs.
Text Editor ...
Upcoming SlideShare
Loading in …5
×

Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

936 views

Published on

Published in: Technology, Business
  • Be the first to comment

  • Be the first to like this

Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

  1. 1. UNIVERSIDADE FEDERAL DE CAMPINA GRANDE – UFCG CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA – CEEI DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO – DSC EMBEDDED SYSTEMS AND PERVASIVE COMPUTING LAB - EMBEDDED Relatório Técnico: Emacs: Arquitetura e Design com Foco no Desenvolvimento de Plugins. José Martins da Nobrega Filho martins.ufcg@gmail.com Campina Grande, agosto de 2009. 1
  2. 2. Sumário Sumário ............................................................................................................................. 2 1 Introdução................................................................................................................... 3 2 Arquitetura da Ferramenta .......................................................................................... 3 3 Design da ferramenta .................................................................................................. 4 3.1 Conceitos Estruturais ........................................................................................... 5 3.2 Conceitos Visuais ................................................................................................. 6 3.3 Módulos de edição ............................................................................................... 7 3.4 Interface com o Sistema Operacional ................................................................... 8 4 Conclusões ................................................................................................................. 8 5 Referências ................................................................................................................. 8 2
  3. 3. 1 Introdução Com origem no laboratório de Inteligência Artificial do MIT como uma extensão do TECO, o Emacs ganhou com o tempo várias implementações sendo hoje um ambiente de trabalho totalmente customizado e utilizado principalmente por programadores. Suas principais implementações são o GnuEmacs e o XEmacs que são tidos como dois editores separados por uma língua comum. Nesse relatório será informada uma descrição geral da arquitetura dessa ferramenta com foco no GnuEmacs e um pouco da linguagem utilizada para desenvolvimento de extensões e customização da ferramenta. 2 Arquitetura da Ferramenta A primeira implementação do Emacs surgiu em 1976 tendo o objetivo de organizar os macros (plugins) criados pelos usuários do TECO e adicionar facilidades para implementação de novos comandos. Mas foi em 1978 que o Emacs ganhou a primeira implementação cuja linguagem de extensão era baseada num dialeto do Lisp. Com o advento dessa linguagem que hoje é conhecida como EmacsLisp, a ferramenta passou a funcionar como um interpretador Lisp que utiliza uma API para utilização dos conceitos inerentes ao seu design. Na figura seguinte é possível visualizar o modelo da arquitetura utilizada pelo Emacs. Nesse modelo a ferramenta é customizada através de um arquivo de boot, escrito em lisp, que é carregado durante a execução do sistema, esse arquivo contém informações sobre os plugins que serão utilizados e os parâmetros de configuração de cada um deles. Cada plugin referenciado é então carregado pelo interpretador que disponibiliza todas as funções e/ou variáveis do mesmo para o sistema. Com esse modelo as estruturas de dados e funções passam a ser compartilhadas por todos os plugins existentes permitindo uma ampla utilização dos recursos do ambiente montado. 3
  4. 4. Figura 1: Visão arquitetural do emacs. (1) leitura do arquivo .emacs durante a execução do sistema; (2) referência aos plugins que devem ser carregados; (3) leitura dos plugins referenciados; (4) disponibilização das funções carregadas para o sistema. A disponibilização das estruturas montadas pelo sistema permite uma grande possibilidade de reuso e extensão, mas também permite uma má utilização das estruturas de dados, sendo necessário um conjunto de convenções que são utilizadas pela comunidade. 3 Design da ferramenta Como visto no tópico anterior, a arquitetura do Emacs está totalmente centralizada num interpretador que funciona como uma interface entre os componentes visuais e a lógica implementada em suas extensões. Essa associação torna-se possível devido à definição de conceitos que serão utilizados pelos plugins na forma de uma API que acompanha a ferramenta. Os conceitos existentes no design da ferramenta podem ser classificados em quatro grupos como visto na figura seguinte. O primeiro grupo contém os conceitos estruturais que definem como os arquivos são tratados no sistema e como é feita a associação desse 4
  5. 5. arquivo a funcionalidades como syntax highlighting, autocomplete, spell-checking e outros. O segundo grupo determina os conceitos relacionados aos itens visuais da aplicação e, portanto, define como manipular vários arquivos numa única janela, como interagir com o usuário, definir quais os menus serão visíveis, entre outras funcionalidades. O terceiro e o quarto grupos estão relacionados, respectivamente, à edição de arquivos e à manipulação do sistema operacional, sendo utilizados para recursos como autocomplete e remote editon file através de programas como openssh. Figura 2: Classificação dos conceitos utilizados pelo Emacs. 3.1 Conceitos Estruturais O primeiro conceito abordado nesse tópico será o Buffer. Essa estrutura é utilizada como um pacote com metadados associados e cujo conteúdo pode ser o texto de um arquivo ou uma string resultante de algum processamento no Emacs. Com essa estrutura é possível identificar de forma única um conteúdo e obter informações sobre o arquivo, como permissões de edição (ex: read only) e informações sobre o Major Mode e os Minor Modes associados a esse buffer. Os Modes de um buffer são responsáveis pela definição de um conjunto de comportamentos que serão aplicados ao conteúdo do buffer como, por exemplo, o syntax highlighting. Em um buffer existe sempre um Major Mode que contém informações referentes a comportamentos mais básicos (ex: comando para apagar uma linha) e um ou mais Minor Modes que definem comportamentos especialistas (ex: highlighting de códigos C/C++). 5
  6. 6. Entre as estruturas utilizadas nos modos de operação, o Keymap e a Syntax Table merecem destaque. A primeira estrutura consiste num mapa que relaciona uma combinação de teclas a uma função, permitindo a implementação de teclas de atalho. A segunda estrutura consiste numa tabela que relaciona um caractere a um significado na construção sintática do conteúdo como, por exemplo, o caractere “;” que em Lisp indica um comentário e em linguagens como C/C++ tem outro significado. Essa definição permite a utilização de funções que realizam um parsing no código e verificam, por exemplo, se a parentetização está correta. A figura seguinte demonstra o relacionamento entre essas estruturas para uma implementação de highlighting e autocomplete para códigos em C++. Figura 3: Instância do relacionamento entre os conceitos estruturais. 3.2 Conceitos Visuais O principal critério de usabilidade adotado pela ferramenta é a produtividade na edição de arquivos, esse requisito provavelmente influenciou a utilização de um ambiente gráfico dividido em janelas internas. Para permitir a manipulação desse ambiente por plugins externos, o Emacs definiu três conceitos que permitem trabalhar com cada item contido na interface da ferramenta. 6
  7. 7. O primeiro conceito é o Frame que identifica cada janela gráfica do sistema operacional associada ao Emacs. O outro conceito adotado, chamado Window, identifica as janelas internas a um frame que estão sempre associadas a um buffer. Dessa forma o usuário pode trabalhar com vários arquivos em uma ou mais janelas internas. Com a definição desses conceitos, o desenvolvedor pode interagir com essas janelas para exibir informações de forma temporária (uma window temporária), informações estáticas como a árvore de diretórios do sistema (uma window fixa), informações sobre os projetos abertos (um frame separado), etc. Também foi adotado um conceito chamado Minibuffer que permite a entrada de dados como senhas, comandos e parâmetros para funções. Essa estrutura está sempre associada a uma window fixa que está localizada no rodapé do frame principal. 3.3 Módulos de edição Como dito anteriormente, os buffers são estruturas que encapsulam o conteúdo, as funções e as estruturas associados ao documento. No caso da edição do conteúdo desse buffer, são definidos os conceitos Text, Positions e Markers. Um Text representa o conteúdo de um buffer entre dois pontos (Positions/Markers) e as propriedades desse conteúdo. É através dessa estrutura que é possível realizar operações como inserir, deletar, formatar, comparar partes, definir margens, visibilidade e outras mais. Os Positions e Markers, por sua vez, definem pontos no conteúdo do buffer que são utilizados para delimitar a área do texto onde será realizada uma dada operação. No primeiro caso a definição do ponto é realizada através de um inteiro representando o índice do caractere e, portanto, a área delimitada é alterada durante inserções ou deleções no texto. Já os Markers usam como referencial os caracteres antes e depois do ponto. Dessa forma as operações realizadas no texto não interferem na área delimitada. 7
  8. 8. 3.4 Interface com o Sistema Operacional Para interagir com o sistema operacional ou programas externos, o Emacs disponibiliza o conceito de processos e um conjunto de funções para interagir com o SO. Os processos disponibilizados pelo Emacs podem ser vistos como objetos que são identificados por um nome e executados de forma síncrona ou assíncrona. Além desse conceito, a ferramenta disponibiliza uma API para envio de sinais e/ou strings, obtenção de informações sobre o status do processo, aplicação de filtros nas saídas padrões, etc. Para comunicação com o sistema operacional o Emacs disponibiliza um conjunto de funções onde é possível obter informações sobe a data, setar variáveis de ambiente, tocar som, entre outros. Observe que do ponto de vista arquitetural essas funções para interface com o SO são apenas utilitários que fazem parte da linguagem. 4 Conclusões Com mais de trinta anos no mercado, o Emacs continua sendo uma ferramenta de alta produtividade para diversas atividades, mostrando com isso a eficiência de sua arquitetura. A escolha do Lisp como linguagem de extensão foi fundamental por ser interpretada e por ter características do paradigma funcional e orientado a objetos, mas foi a definição dos conceitos utilizados que permitiu a grande diversificação de plugins existentes. 5 Referências B. Lewis, D. LaLiberte, and the GNU Manual Group. The GNU Emacs Lisp Reference Manual, version 23.1, revision 3.0, July 2009. Emacs. Acedido em: 23, agosto, 2009, em: http://pt.wikipedia.org/wiki/Emacs. Emacs Lisp. Acedido em: 23, agosto, 2009, em: http://pt.wikipedia.org/wiki/Emacs_Lisp. Ferrari, B. (2007). An Introduction to all these Emacs articles. Acedido em: 23, agosto, 2009, em: http://blog.bookworm.at/2007/03/introduction-to-all-these-emacs.html GNU Operating System - GNU Emacs. Acedido em: 23, agosto, 2009, em: http://www.gnu.org/ software/emacs/. 8
  9. 9. História do Emacs. Acedido em: 23, agosto, 2009, em: http://www.emacswiki.org/emacs- pt/Hist%C3%B3riaDoEmacs. Text Editor and Corrector. Acedido em: 23, agosto, 2009, em: http://en.wikipedia.org/wiki/ Text_Editor_and_Corrector. XEmacs. Acedido em: 23, agosto, 2009, em: http://www.xemacs.org/. 9

×