Sobre o projeto
kanso (簡素) é uma linguagem de programação construída em torno da ideia de que um arquivo de origem deve conter apenas decisões. Qualquer coisa que um guia de estilo, linter ou revisão de código normalmente imporia por convenção é, em vez disso, imposta pelo compilador: espaçamento não canônico, indentação ou posicionamento de linhas em branco são erros de sintaxe, nomes usam snake_case, declarações e campos de registros são ordenados alfabeticamente, e as sobrecargas ficam adjacentes, com a mais específica primeiro. Como cada programa tem exatamente uma renderização canônica, não existe formatador.
As semânticas enfatizadas pelo README incluem pureza e efeitos como descrições: print e o operador de sequenciamento >> produzem uma descrição de trabalho que o runtime executa, e o comando check com --plan mostra essa descrição em vez de executá-la. A falha é um valor em vez de uma exceção: err reason e none propagam até que uma sobrecarga seja despachada sobre eles, portanto, a divisão por zero e a indexação fora de intervalo retornam valores em vez de travar. O despacho funciona em literais, tipos concretos e genéricos, começando pelo mais específico. A linguagem suporta tipos de registro de construtor único com campos tipados, construção posicional e desestruturação em formas posicionais e de subconjunto com chave; aplicação por justaposição plana sem vírgulas em lugar nenhum; inteiros de precisão arbitrária; interpolação de strings; listas com indexação baseada em 1; um dot pipe cujo valor canalizado torna-se o primeiro argumento; e lambdas. Verificações adicionais em tempo de compilação rejeitam vinculações não utilizadas, expressões não utilizadas, revinculação antes do uso e sombreamento de funções, tipos ou builtins declarados. A indexação com xs[i] ou m[k] é estrita, enquanto at xs expressa a ausência esperada.
Módulos são diretórios: um módulo abrange qualquer número de arquivos que compartilham um único namespace, nomes prefixados com underscore são privados do módulo, e uma declaração privada não utilizada é um erro. O README enfatiza que o corpus de erros em tests/golden é tão importante quanto o corpus de sucesso.
Uma seção v0 lista aproximações reconhecidas e pontos abertos: a regra de endpoint é verificada em tempo de execução em vez de tempo de compilação; parâmetros genéricos nunca vinculam err ou none; a ordem de declaração canônica é uma interpretação; o alvo do pipe é analisado como uma aplicação e um alvo não chamável falha em tempo de execução; a forma if é provisória; o int nativo é int64 e overflows são capturados como um defeito em binários compilados, ao contrário do bigint do interpretador. Ainda não foram implementados typesets, atualização de registros, build regions, processos, polimorfismo de efeito e um LSP.
O suporte ao editor é um único pacote TextMate utilizável em IDEs JetBrains e VS Code para arquivos .kso. O desenvolvimento utiliza cargo test, cobrindo testes unitários e um corpus de arquivos golden; o projeto possui licença MIT. A documentação, a especificação e as notas do compilador são publicadas em um site GitHub Pages.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.