Original Article: The Extension Language Kit
Author: www-rn.informatik.uni-bremen.de/

Elk:     O Kit de Extensão de Idioma

O que é Elk?

Elk é uma implementação do Scheme linguagem de programação. Em contraste com os sistemas Scheme autónomos existentes, o Elk foi concebido especificamente como um subsistema de linguagem de extensão reutilizável incorporável para aplicações escritas em C ou C++.

Os desenvolvedores que usam Elk podem oferecer aplicativos com diferentes componentes escritos em diferentes idiomas, como um núcleo eficiente escrito em C ou C ++ e uma camada de interface de usuário extensível implementada em Scheme. Para ajudar a construir arquiteturas de aplicativos híbridos, a Elk suporta um interfuncionamento bem apertado das partes C / C ++ de aplicativos com código Scheme.

Elk também é útil como uma implementação autônoma do Scheme, em particular como uma plataforma para prototipagem rápida baseada em X11 programas Scheme.

O projeto Elk foi iniciado em 1987 para apoiar o ISOTEXT, um editor de documentos multimídia que foi desenvolvido na Universidade Técnica de Berlim. A primeira versão livremente disponível, Elk 1.0, foi publicada em USENET em setembro de 1989. Desde então, Elk foi utilizado com sucesso como o framework de linguagem de extensão para inúmeras aplicações (produtos comerciais, bem como projetos de software livre).

O que há de novo em Elk 3.0?

As principais melhorias no Elk 3.0 são uma nova representação Scheme de objetos e um novo, completamente reescrito C/C++ Manual do programador para Elk.

A nova representação do objeto foi sugerida por Craig McPheeters, que também contribuiu com um conjunto inicial de patches. Suas vantagens são:

  • O tamanho do heap não é mais limitado (exceto pela quantidade de memória virtual que pode ser endereçada);
  • ``fixnums'' Agora ocupe um C int inteiro;
  • o número de tipos de Schemes não está mais limitado a 128
  • o novo formato melhora a verificação do tempo de compilação e facilita a depuração;
  • Elk agora facilita facilmente as plataformas de 64 bits, como o DEC / Alpha.

O novo Manual do Programador C / C ++ é uma especificação completa da interface C / C ++ para Elk; Destina-se a autores de aplicativos extensíveis, baseados em Elk e para escritores de extensão. Os tópicos variam desde a arquitetura geral de aplicativos extensíveis e o uso de carregamento dinâmico para técnicas avançadas, como estruturas de dados fracas e cooperação com o coletor de lixo.

Também é novo no Elk 3.0 uma extensão de expressão regular de estilo POSIX. Elk foi portado para várias plataformas novas (entre elas Linux, BSD / OS, AIX 4.1 e HP-UX 10.0). Uma lista completa de mudanças está na distribuição (veja os arquivos de texto ALTERAR e MIGRAR).

Distribuição e fonte de Elk

Você pode baixar a distribuição Elk 3.0 diretamente via HTTP ou obtê-la por FTP anônimo a partir de vários servidores. Além disso, a distribuição é realizada de forma descompactada para visualização interativa.. As distribuições binárias pré-compiladas de Elk estão sendo preparadas.

Documentação Elk

Para a navegação online e como uma referência conveniente, a documentação completa para Elk é oferecida em formato HTML. Os mesmos documentos estão incluídos na distribuição como fonte troff e PostScript pré-formatado.

Notícias de Elk

Aqui você encontra informações sobre as recentes adições ao Elk, extensões e portos contribuídos pelos usuários e outras novidades que podem ser de interesse para a comunidade de usuários de Elk.

Características Elk

Incremental total, carregamento dinâmico. Esta facilidade permite que o código do Scheme carregue as extensões do Scheme compiladas no intérprete em execução (ou na aplicação) sob demanda. As aplicações complexas baseadas em Elk podem ser decompostas em componentes dinamicamente carregáveis para evitar grandes executáveis monolíticos. Além disso, a extensão fornecida pelo usuário não precisa ser escrita inteiramente no Scheme; Eles podem incluir uma camada eficiente e de baixo nível escrita em C ou C++.

O carregamento dinâmico no Elk é suportado em muitas plataformas e não se restringe a um dlopen() interface. O Elk fornece inicialização automática de extensões dinamicamente carregadas e cuida de construtores / destructores estáticos C ++ incorporados em arquivos de objetos.

Congelamento de aplicativos totalmente personalizados em arquivos executáveis. Elk fornece uma nova primitiva Scheme dump que congela a imagem dinâmica de tempo de execução do interpretador Scheme em um arquivo executável (incluindo um aplicativo inclusivo se presente). Esta facilidade se assemelha unexec() n Emacs, mas o novo executável retoma a execução retornando da chamada para dump pelo qual esse executável foi criado (não diferente fork() em UNIX). Carregamento dinâmico e dump aumentar a usabilidade de Elk como a espinha dorsal de aplicações complexas.

Poderosa interface C / C ++ para interoperabilidade de idiomas. Elk fornece uma integração apertada do núcleo C / C ++ de aplicativos (ou extensões) com o idioma de extensão. Elk fornece uma integração apertada do núcleo C / C ++ de appaApplications pode definir suas próprias primitivas Scheme (três disciplinas de chamada são suportadas), defina tipos de Scheme específicos de primeira classe com funções de impressão e leitura personalizadas, convertem objetos entre tipos de Scheme e Tipos C / C ++ de várias maneiras, implementar estruturas de dados fracas, aumentar os erros do Scheme, definir variáveis e símbolos do Scheme, avaliar as expressões S codificadas como seqüências C e utilizar as colectores de lixo (ou extensões) com o idioma da extensão.

Fixações de Scheme completo para X11 e Motivo. Várias extensões carregáveis dinamicamente fornecem acesso Scheme completo ao X11 / OpenWindows Xlib, para a interface do programador de aplicativos fazer Xt Intrínseca, e aos conjuntos de widgets Athena e OSF / Motif. Usando essas extensões, as interfaces gráficas de usuário de aplicativos baseados em Elk podem ser totalmente integradas no idioma de extensão.

Interface UNIX. Elk fornece o acesso Scheme à maioria das chamadas do sistema UNIX e funções comuns da biblioteca C. A extensão UNIX suporta uma ampla gama de diferentes plataformas UNIX sem restringir a sua funcionalidade ao menor denominador comum ou às funções POSIX 1003.1.

Cobrança de lixo incremental e geracional, incremental. Elk emprega duas estratégias de coleta de lixo selecionáveis em tempo de compilação: um coletor de lixo "de paragem e cópia" tradicional e um coletor de lixo geracional que é mais eficiente e, assim, reduz o tempo que o aplicativo é interrompido por uma coleção de lixo. Em plataformas com gerenciamento de memória avançado, incremental o modo pode ser habilitado para o coletor de lixo geracional para reduzir ainda mais os tempos de espera.

Recursos do Scheme não padronizados. Além do núcleo padrão do Scheme, o Elk oferece suporte a ambientes de primeira classe, tratamento de erros, providenciar/exigir e carregamento automático, ligações de fluidos e vento dinâmico, macros simples de estilo `` eval-twice '', listas de propriedades, portas de cadeias e portas bidirecionais, estilo `` tilde expansão '' em nomes de arquivos, um nível interativo de nível superior escrito no Scheme, um Depurador de Scheme e uma impressora bonita, Trocas de bits de comprimento arbitrário e registros de Scheme.

Documentação abrangente. A distribuição inclui mais de 230 páginas de documentação totalmente indexada. Todos os manuais existem como troff arquivos de entrada que podem ser traduzidos para HTML (usando unroff) para navegação online, além de produzir versões impressas de boa qualidade.

Distribuído em forma legalmente livre. O contrato de direitos autorais / licença permite a redistribuição e uso gratuito de Elk em produtos comerciais.

Por que Elk está usando Scheme?

Como as extensões podem ser tão grandes e complexas quanto os programas independentes, os programadores de linguagem de extensão (geralmente os usuários da aplicação) merecem os mesmos recursos de linguagem que outros programadores estão acostumados. Ao usar uma linguagem de programação de propósito geral em vez de uma linguagem de script especializada, as extensões não triviais podem se beneficiar da funcionalidade de estruturação inerente a linguagens de programação reais (como Lisp).

Os membros da família de linguagem Lisp são particularmente adequados como linguagem de extensão: a Lisp possui uma sintaxe simples, mas uma semântica poderosa, permite pequenas implementações e sua natureza interativa suporta prototipagem rápida e encoraja os usuários a explorar e testar soluções para problemas de forma incremental.

Conseqüentemente, Lisp tornou-se cada vez mais popular para este propósito, ao ponto em que a abundância de diferentes dialetos cresceu em um problema. Dos dialetos padronizados da Lisp, apenas o Scheme é adequadamente modesto, ainda que suficientemente geral, para servir como um idioma de extensão reutilizável para uma ampla gama de aplicações. Scheme É ortogonal e bem definido, e é pequeno o suficiente para não dominar a aplicação que serve e ser totalmente compreendido com esforço aceitável.


Oliver Laumann       [email protected]