A PLT Design liberou a versão 6.1 do Racket. O objetivo do projeto é desenvolver uma linguagem de programação multiparadigma pertencente a família Lisp/Scheme. Entre diversos recursos, o Racket 6.1 introduz uma nova maneira de lidar com as definições de variáveis locais recursivas.
Segundo Ryan Culpepper,no racket-lang.org, a principal inovação adicionada ao Racket v6.1, é a maneira de lidar com as definições de variáveis locais recursivas. Anteriormente a versão 6.1, variáveis eram inicializadas com um valor #undefined. Agora as variáveis não são mais inicializadas e o Racket lança uma exceção quando se tenta acessar uma variável antes de definí-la.
Ryan comenta que está mudança tem por objetivo fornecer e melhorar o feedback para os desenvolvedores sobre o uso indevido de variáveis e não deve alterar a semântica dos programas, uma vez que os programas raramente tem a intenção de produzir #undefined. Além disto, o novo comportamento é consistente com a convenção existente sobre variáveis em relação a módulos, que já geram uma exceção quando utilizados antes da definição.
O novo comportamento de definição de variável local não é compatível com versões anteriores e irá quebrar qualquer programa que acessar incorretamente variáveis indefinidas bem como programas que incluem o seguinte padrão para obter o valor #undefined:
(define undefined (letrec ([x x]) x))
Agora, a maneira correta para obter um valor #undefined é através do racket/undefined.
Outras mudanças introduzidas com a nova versão do Racket são:
- Plumbers fornece aos programadores maior controle sobre o tempo de flushes(liberação/descarga) e ativa ações de flushing arbitrárias através de um novo conjunto de funções, tais como current-plumber, plumber-add-flush!, and plumber-flush-all.
- Contracts podem agora facilmente encontrar simples erros em implementações de estrutura de dados contracted(contratados), por exemplo: uma inversão acidental de uma condicional em uma verificação invariante da pilha.
- Bibliotecas gráficas e suas dependências (Pango, Cairo, GLib, etc.) foram atualizadas no Windows e Mac OS X.
- A biblioteca openssl apresenta melhoria de segurança através de pacotes de criptografia DHE e ECDHE e a indicação de Server Name.
- A biblioteca mzlib/class100 foi substituída pela racket/class.
O Racket (chamado antigamente de PLT Scheme) é uma linguagem multiparadigma de programação livre de uso geral, da família Lisp/Scheme liberado sob a licença LGPL. Um dos objetivos de seu design é ser uma plataforma para criações de linguagem, design e implementação. A linguagem é utilizada em uma variedade de contextos tais como scripting, programação em geral, educação em ciência e pesquisa.