Português (Brasil)

Ferramentas de desenvolvedor · Conversores de sintaxe

O problema da Noruega: YAML 1.1 vs 1.2 e por que NO se torna falso

· Fundo

yaml formatos de dados depuração

O texto NÃO permanece uma string enquanto um caminho booleano herdado é riscado
Ilustração vetorial original ToolAcre

Em YAML 1.1 o valor sem aspas NO é um booleano, e é assim que a Noruega desaparece das listas de países. Esta postagem conta a história da digitação implícita de YAML, o que a especificação 1.2 mudou e por que o problema persiste nas ferramentas atuais.

Uma lista de países em que falta um — NÃO analisado como falso e um relatório de bug do escritório de Oslo

O bug clássico é um código de país sem aspas `NO` tornando-se falso. Os testes de ToolAcre provam que isso não acontece aqui: ambas as opções de esquema mantêm `NO`, sim, não, ativado e desativado como strings. Uma história que começasse com a Noruega desaparecendo dentro deste painel contradiria a implementação.

O exemplo continua útil como aviso de compatibilidade. Quando outro consumidor YAML usa regras legadas, o escritor de ToolAcre cita strings ambíguas para que os leitores posteriores não as reinterpretem. O leitor e o gravador são configurados para evitar exatamente a falha que o esboço descreve.

A Noruega não desaparece neste conversor: NÃO permanece texto

Este repositório documenta as restrições restritas do js-yaml JSON e Esquemas principais e seu comportamento escalar observado. Não contém fontes para YAMLé 2001 origens, intenções dos autores ou debates históricos sobre design. Essas afirmações são omitidas em vez de reconstruídas a partir da memória.

O mecanismo atual é suficiente para um guia prático. A resolução escalar simples ocorre em um esquema selecionado; os valores citados permanecem como texto; tags não suportadas são rejeitadas. As evidências sobre o código não devem ser estendidas ao histórico de padrões sem fontes.

A evidência do repositório cobre a configuração atual do analisador, não o histórico de origem de YAML

YAML 1.1 comumente trata variantes sim, não, ativadas e desativadas como booleanos. Isto explica porque é que o problema da Noruega existe em alguns ecossistemas. ToolAcre não expõe nenhuma opção 1.1 e nunca demonstra conversão sexagesimal ou octal herdada nesse modo.

Use o perigo para revisar a saída do analisador externo, não para prever este painel. Se outra ferramenta produzir falso, registre sua biblioteca e esquema. O resultado de ToolAcre pode servir como uma leitura contrastante de YAML 1.2, mas não como prova de que a outra implementação está configurada incorretamente para seu contrato.

Os booleanos legados YAML 1.1 explicam o perigo, mas não estão habilitados aqui

O esquema estrito JSON reconhece apenas grafias escalares compatíveis com JSON. Além disso, o Core resolve valores til e vazios para números inteiros nulos, hexadecimais ou `0o` e números não finitos. Nenhum dos dois expande o vocabulário booleano além de verdadeiro e falso.

Core Infinity e NaN posteriormente tornam-se nulos em JSON com avisos porque JSON não tem representação para eles. A diferença entre as opções de esquema é, portanto, visível e às vezes com perdas, embora o próprio valor da Noruega permaneça estável.

Ambas as opções enviadas são esquemas YAML 1.2

O comportamento legado sobrevive onde quer que os padrões do analisador ou as convenções do aplicativo o retenham. O conversor não pode inventariar essas bibliotecas ou versões a partir da evidência do repositório. Teste o consumidor real com um acessório contendo palavras ambíguas e números semelhantes.

O escritor YAML de ToolAcre adiciona aspas protetoras em torno de strings que leitores mais antigos podem digitar de maneira diferente, incluindo `NO`, `yes`, `1.0`, `0755` e texto com aparência de data. Este resultado de compatibilidade é mensurável e mais seguro do que uma declaração geral sobre a adoção de analisadores modernos.

O perigo sobrevive em outros analisadores; verificá-los em vez de generalizar a partir desta ferramenta

Converta `countries: [SE, NO, DK]`, `answers: [yes, no, on, off]`, `mode: 0755`, `octal: 0o755`, `version: 1.10` e `empty:`. Sob estrito, todos, exceto os valores nativos JSON, permanecem strings. No Core, octal se torna 493 e vazio se torna nulo; o país e as palavras de resposta permanecem strings.

Cite cada token para forçar o texto. Em seguida, escreva o resultado de JSON de volta para YAML e inspecione as aspas que o serializador escolhe. Esta comparação precisa do código revela as regras da ferramenta sem pretender executar um modo YAML 1.1 que não existe.

Exemplo resolvido: códigos de país e sósias escalares nos dois esquemas enviados

Chaves de analisador específicas de linguagem, padrões de versão e wrappers de estrutura estão fora desta implementação. Seus nomes e comportamento mudam de forma independente. Consulte e teste o componente que irá consumir a configuração.

O painel também não valida a semântica do aplicativo. Manter `NO` como string é necessário para um código de país, mas não pode provar que `NO` é um valor permitido em um esquema específico.

Conclusão: cite suas strings, conheça a versão do seu analisador - e como a conversão de YAML em JSON no navegador torna a digitação implícita visível

Citar texto que poderia ser redigitado, conhecer o esquema realmente em uso e testar o consumidor. As duas opções YAML 1.2 de ToolAcre tornam visíveis suas diferenças limitadas e evitam deliberadamente a armadilha booleana herdada.

A lição não é que todo analisador se comporte de uma maneira. É que a digitação implícita é configuração e um conversor deve indicar essa configuração. Aqui as evidências dizem que a Noruega permanece `"NO"`.

Quando a configuração cruzar os sistemas, adicione um dispositivo de interoperabilidade contendo todos os tokens ambíguos que seu domínio permitir. Converta ou analise-o em cada consumidor real e compare os valores digitados, não renderizados YAML. Isso captura uma tabela booleana herdada, uma regra octal ou uma diferença de valor vazio antes que uma lista de países ou modo de permissão chegue à produção. Citar strings conhecidas continua sendo a defesa portátil mais simples porque registra a intenção no documento, em vez de confiar nos padrões do ambiente.