Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

9
1 UNIVERSIDADE FEDERAL DE CAMPINA GRANDE UFCG CENTRO DE ENGENHARIA ELÉTRICA E I NFORMÁ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 [email protected] Campina Grande, agosto de 2009.

Transcript of Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

Page 1: Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

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

[email protected]

Campina Grande, agosto de 2009.

Page 2: Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

2

SumárioSumá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

Page 3: Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

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.

Page 4: Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

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

Page 5: Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

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++).

Page 6: Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

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.

Page 7: Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

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.

Page 8: Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

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/.

Page 9: Emacs - Arquitetura E Design Com Foco No Desenv De Plugins

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/.