1 |
[pt] TIPANDO LINGUAGENS DINÂMICAS: UMA REVISÃO / [en] TYPING DYNAMIC LANGUAGES: A REVIEWHUGO MUSSO GUALANDI 25 July 2016 (has links)
[pt] Linguagens de programação tem tradicionalmente sido classificadas como
estaticamente tipadas ou dinamicamente tipadas, estas últimas também
sendo conhecidas como linguagens de scripting. Linguagens com tipagem
dinâmica são bastante populares para a escrita de programas menores, um
cenário onde a facilidade de uso e flexibilidade da linguagem são altamente
valorizados. No entanto, com o passar do tempo, pequenos scripts podem
se tornar grandes sistemas e a flexibilidade da linguagem pode passar a ser
uma fonte de defeitos no programa. Para estes sistemas maiores, a tipagem
estática, que oferece detecção de erros em tempo de compilação, melhor documentação
e oportunidades de otimização, passa a ser mais atrativa. Como
reescrever todo o sistema em uma linguagem estática não é ideal do ponto de
um vista da engenharia de software, encontrar formas de adicionar tipos estáticos
em programas dinamicamente tipados já existentes tem sido uma área
de pesquisa bem rica. Nesse trabalho, nós apresentamos uma perspectiva
histórica dessa pesquisa. Nos focamos em abordagens que não são específicas
para uma única linguagem de programação, como as Type Hints de
Common LISP, o Soft Typing de Fagan et al e o Gradual Typing de Siek et al,
contrastando essas diferentes soluções a partir de uma perspectiva moderna. / [en] Programming languages have traditionally been classified as either statically
typed or dynamically typed, the latter often being known as scripting
languages. Dynamically typed languages are very popular for writing smaller
programs, a setting where ease of use and flexibility of the language are highly
valued. However, with time, small scripts tend to evolve into large systems
and the flexibility of the dynamic language may become a source of program
defects. For these larger systems, static typing, which offers compile-time
error detection, improved documentation and optimization opportunities, becomes
more attractive. Since rewriting the whole system in a statically typed
language is not ideal from a software engineering point of view, investigating
ways of adding static types to existing dynamically typed programs has been
a thriving research area. In this work, we present a historical overview of this
research. We focus on general approaches that apply to multiple programming
languages, such as the Type Hints of Common LISP, the Soft Typing of
Fagan et al and the Gradual Typing of Siek et al, contrasting these different
solutions from a modern perspective.
|
2 |
[en] OPTIMIZED COMPILATION OF A DYNAMIC LANGUAGE TO A MANAGED RUNTIME ENVIRONMENT / [pt] COMPILAÇÃO OTIMIZADA DE UMA LINGUAGEM DINÂMICA PARA UM AMBIENTE DE EXECUÇÃO GERENCIADAFABIO MASCARENHAS DE QUEIROZ 08 February 2017 (has links)
[pt] Ambientes de Execução Gerenciada tornaram-se alvos populares para compiladores de linguagens de programação de alto nível. Eles provêem um sistema tipos de alto nível com segurança de memória garantida, assim como facilidades como coleta de lixo, acesso a serviços da plataforma subjacente (possivelmente através de uma sandbox), multithreading, e uma rica biblioteca de estruturas de dados e algorithmos, mas não possuem um modelo de desempenho claro, o que atrapalha as tentativas de otimização de qualquer linguagem que não tenha um mapeamento direto na semântica do ambiente de execução, especialmente se a linguagem é dinamicamente tipada.
Nós afirmamos que é possível construir um compilador para uma linguagem dinâmica que tem como alvo um ambiente de execução gerenciada que rivaliza um compilador que tem como alvo linguagem de máquina na eficiência do código que ele gera. Essa tese apresenta um compilador com tal característica, descrevendo as otimizações necessárias para sua construção, e testes de desempenho que validam essas otimizações. Nossas otimizações não dependem de geração de código em tempo de execução, apenas em informação estaticamente disponível no código fonte. Nós usamos uma nova análise de inferência de tipos para aumentar a quantidade de informação disponível. / [en] Managed runtime environments have become popular targets for compilers of high-level programming languages. They provide a high-level type system with enforced runtime safety, as well as facilities such as garbage collection, possibility sandboxed access to services of the underlying platform, multithreadng, and a rich library of data structures and algorithms. But managed runtime environments lack a clear performance model, which hinders attempts ar optimizing the compilation of any language that does nor have a direct mapping to the runtime environments semantics. This is aggravated if the language is dynamically typed.
We assert that it is possible to build a compiler for a dynamic language that targets a managed runtime environment so that it rivals a compiler that targets machine code directly in efficiency of the code it generates. This dissertation presents such a compiler, describing the optimizations that were needed to build it, and benchmarks that validate these optimizations. Our optimizations do not depend on runtime code generation, only on information that is statically available from the source program. We use a novel type inference analysis to increase the amount of information available.
|
Page generated in 0.0232 seconds