Foi publicado o lançamento do SBCL 2.3.11 (Steel Bank Common Lisp), uma implementação livre da linguagem de programação Common Lisp. O código do projeto é escrito em Common Lisp e C, e é distribuído sob a licença BSD. No novo lançamento:
- Pequenas incompatibilidades:
- Fluxos com o parâmetro external-format definido com ":REPLACEMENT" aplicarão os dados de substituição uma vez no fluxo, o que leva a erros de decodificação (e não como em alguns casos, uma vez para cada sequência de bytes que não seja uma posição inicial válida para o símbolo desse external-format).
- Os identificadores external-format agora sinalizarão um erro ao usar variantes não suportadas ou não reconhecidas.
- Melhorias:
- No processo de despacho de funções genéricas, ao usar o método padrão ou curto de combinação, na ausência de métodos principais aplicáveis, o sistema chamará a função genérica SB-PCL:NO-PRIMARY-METHOD, cujo comportamento padrão é sinalizar um erro. Os usuários podem definir métodos para essa função genérica.
- Formatos externos agora suportam variantes de nova linha para codificações de byte único e utf-8.
- Erros de codificação e decodificação de caracteres sinalizados pelas funções de fluxo ou octetos agora suportam reinício USE-VALUE para manipuladores que fornecem substituições para entrada ou saída.
- READ-SEQUENCE e WRITE-SEQUENCE suportam sequências definidas pelo usuário; a implementação padrão processa elemento por elemento, lendo ou escrevendo um byte ou símbolo em/para o fluxo, respectivamente.
- Otimizações:
- Formatos externos com :REPLACEMENT não vinculam mais manipuladores para erros de funções de conversão, o que deve reduzir o número de operações cons e aumentar o desempenho.
- Se :EXTERNAL-FORMAT atua como um argumento para STRING-TO-OCTETS ou OCTETS-TO-STRING e é uma constante durante a compilação, o formato externo é resolvido durante o carregamento, e não em cada chamada.
- O compilador pode restringir os tipos de argumentos para algumas funções com base no tipo de valor inferido ou implícito que é retornado por essa função.
- O compilador reduz o número de verificações de tipo redundantes em funções como ASSOC e GETF.
- Correções de bugs:
- OCTETS-TO-STRING sinaliza corretamente ou aplica substituições ao usar formatos externos de um byte para codificações raramente usadas (como iso-8859-3), em vez de pegar bits do endereço NIL e converter esses bits em caracteres.
- FILE-STRING-LENGTH agora retorna NIL se os valores de entrada não forem codificados em um formato de fluxo externo.
- Os formatos externos multibyte da tabela (EUC-JP, Shift-JIS, GBK) agora consideram o caractere de substituição (no formato externo ou por reinicialização) ao codificar em octetos.
- A conversão de octetos usando formatos externos UCS-2, UCS-4 e UTF-32 não lê mais o final da matriz de octetos com um número fracionário de unidades de dois ou quatro bytes.
- A conversão de octetos usando formatos externos UCS-2, UCS-4 e UTF-32 agora retorna uma string simples, conforme exige a definição do tipo OCTETS-TO-STRING.
- Usar um formato externo de argumento incorreto para OPEN ou WITH-OPEN-FILE (ou o interno MAKE-FD-STREAM) não resulta mais em vazamentos de descritores de arquivos.
- SB-ROTATE-BYTE define as especificações de BYTE fora do valor permitido antes da execução de cons de números inteiros muito grandes para uso com máscaras e deslocamentos.
- Correção da saída de tipo ao compilar SB-ROTATE-BYTE formas com POSITION não nulo na definição de byte.
- Correção de vários erros de assembler ao compilar MAKE-ARRAY, MAKE-STRING e outros com um tamanho fixo grande.
- Correção de erro interno ao compilar (SETF-SBIT) com um índice fixo grande.
- Correção de erro interno do compilador para função lambda com uma lista de parâmetros incorreta em LABELS.
- Correção de erro interno do compilador ao compilar algumas formas LABELS de recursão infinita.
- Correção de erro interno do compilador ao tentar embutir uma transição para uma etiqueta já removida.
- FILL-POINTER nunca deve ser negativo.
Fonte: opennet.ru
