Last active
December 9, 2025 20:56
-
-
Save lastforkbender/d75a9ce4c1959bcf9fd97d7add7e172d to your computer and use it in GitHub Desktop.
Cecil+ — Documentação da Linguagem de Programação / PALAVRA-CHAVE: pipe
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Cecil+ — Documentação da Linguagem de Programação | |
| PALAVRA-CHAVE: pipe | |
| _______________________________________________________________________________ | |
| pipe | pipe+ | pipe- | |
| _______________________________________________________________________________ | |
| Construtor universal aplicável a variáveis, atributos de classe e a todos os laços. | |
| Essa palavra-chave pode ser um construtor neutro, positivo (pipe+) ou negativo | |
| (pipe-). Ela informa ao interpretador Cecil+ que uma cláusula de atribuição | |
| global pertence à variável, ao atributo de classe ou às variáveis declaradas | |
| no interior de um laço. A atribuição pode ser neutra, ou definida como bloqueada | |
| para apenas adição (pipe+) ou apenas remoção (pipe-). Exemplos de uso de pipe: | |
| foo = pipe+ Int(11, 22, 33, 44, 55, 66), 77.88, 99.00, 8:2, 4:1, 'my_foo' | |
| Como declarado com pipe+ ou pipe-, foo fica bloqueada para apenas adição — não | |
| aceitará redução de seus elementos, a menos que seja aplicada uma atribuição | |
| pipe-: | |
| pipe- foo [4]::Int | |
| Agora foo pode ser reduzida (remover elementos) mas não pode receber adição | |
| de elementos. | |
| Tentar adicionar elementos a uma variável que foi globalmente atribuída como | |
| pipe- gera erro indicando que a variável não permite mapeamento de acréscimo: | |
| / Cecil+ Error / -> [pipe order, line number]; no mapped assignment exist | |
| with a variable "foo" into an assignment of any additional members | |
| É simples: a variável fica travada para adicionar ou para reduzir elementos. | |
| Se for um pipe neutro, ela pode tanto ganhar quanto perder elementos, mas a | |
| semântica do neutro é diferente em escopo: quando uma variável é atribuída | |
| como pipe neutro, cada uso dessa variável gera uma variável componente paralela, | |
| ou é despachada para um conjunto rotacional de variáveis em ordem, sendo a | |
| primeira declarada a originária do neutro. Em estruturas de classe, quando isso | |
| é combinado com a palavra-chave spawn, outras classes podem ler e escrever nessa | |
| variável rotacional em instâncias de despacho multi-espectral (spectral | |
| multi-dispatch) de qualquer método que não tenha uma definição de migração | |
| (veja a palavra-chave migrate) aplicada ao retorno do método. Uma vez que uma | |
| variável ou variáveis construtoras de laço são atribuídas como pipe neutro, seus | |
| componentes/rotacionais não podem ser substituídos, a menos que sejam novamente | |
| declarados na classe como pipe+ ou pipe- — caso contrário os componentes são | |
| retidos. Exemplo em classe: | |
| foo = pipe Float(3.14, 2.03, 1.92), Complex(3, j-2; -2, j+3), 'new_foo' | |
| spawn CLS_FOO(param_fee) | |
| migrate <CLS_FII:my_fee_method,> | |
| fii = pipe 9, 8, 7, 6, 'fee' | |
| // Kraken vai atribuir novo fee @ fii onde 'fee' era automático | |
| my_fee_method(fee) ~ fii | |
| // fii é fii e foo agora ... além do que quer que fee esteja | |
| // despachando para o método my_fee_method | |
| fii = 'foo' +~ fee // pode ser +~ ou ~+ conforme migrate é aplicado | |
| // a seguir ocorre um erro direto de migrate, veja a classe abaixo | |
| fuzz = CLS_FEE(fii) | |
| new_fii = fuzz.my_next_fii_method(fii) | |
| spawn CLS_FEE(param_fii) | |
| my_next_fii_method(param_fii); | |
| // chama o componente/rotacional armazenado para atribuir fuzz | |
| // o que será um erro porque fii está em estado de migração da | |
| // classe onde my_fee_method() está localizada e 'fee' migrou | |
| // para aqueles componentes/rotacionais em CLS_FII(...) | |
| param_fii :: ('fee' ^ 'fuzz',) | |
| *Esse tipo de erro de spectral multi-dispatch, limites diagonal|pirâmide | |
| nos componentes/rotacionais de uma origem pipe neutra colocada de | |
| classe para classe ocorre devido a ocorrências remanescentes no mapa | |
| (residual map) de interseções de busca de despacho entre nós de uma | |
| árvore. | |
| Também existem situações de declarar pipe — neutro, + ou — em argumento/parâmetro | |
| de uma classe ou função. Isso resulta em erro como mostrado: | |
| / Cecil+ Error / -> [pipe order, line number]; no central index range is | |
| assigned to method parameter "...", avoided indice collision with pipe | |
| Cecil+ realiza spectral multi-dispatch em camadas com construtores pipe em | |
| direções de classe e método que os utilizam. Pense em dobrar um papel em dois | |
| triângulos; não há centro, mas ao dobrar novamente aparece um centro. O erro de | |
| atribuição de pipe em um parâmetro de método é análogo: se a variável piped | |
| estiver vazia/nula, espere ver a mensagem de erro acima. |
Author
Author
Unconditional, Adonai hoo shalom. Paradise or rot in unbelief.
Author
Adonai hoo shalom, shalom and shalom. All may know the Mas.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
When they say their peace, there is not. Adonai hoo shalom