Código Natural/Representação interna: mudanças entre as edições

m (intro)
mSem resumo de edição
Linha 1: Linha 1:
Códigos naturais podem ser visualizados por humanos e interpretados por máquinas, mas o processamento eficiente (em bancos de dados e algoritmos de manipulação dos códigos) requer uma '''representação interna no computador''' igualmente eficiente. Como se trata do conceito geral de [[código natural]], a representação interna pode também ser descrita como "implementação do conceito de código natural". Existem dois modos de se implementar, bem distintos, cabendo ao algoritmo usuário decidir:
Códigos naturais podem ser visualizados por humanos e interpretados por máquinas, mas o processamento eficiente (em bancos de dados e algoritmos de manipulação dos códigos) requer uma '''representação interna no computador''' igualmente eficiente. Como se trata do conceito geral de [[código natural]], a representação interna pode também ser descrita como "implementação do conceito de código natural". Existem dois modos de se implementar, bem distintos, cabendo ao algoritmo usuário decidir:
# Implementação direta do código natural '''como ''[[Cadeia de bits|bit string]]''''': é o ideal, mas tem ainda suas limitações porque a ''bit string'' '''não é''' ainda hoje, nas linguagens de programação e bancos de dados, um "[[wikipedia:First-class citizen|'''cidadão de primeira classe''']]". <br/>O [https://www.postgresql.org/docs/current/datatype-bit.html PostgreSQL oferece ''varbit''] e é razoável por ser indexável por ''btree'', mas não faz mais parte do padrão SQL ISO nem tem previsão de evolução no PostgreSQL. Uma variante, também presente em Parquet, é o UUID, mas requer tamanho fixo de 16 bytes.
# Implementação direta do código natural '''como ''[[Cadeia de bits|bit string]]''''': é o ideal, mas tem ainda suas limitações porque a ''bit string'' '''não é''' ainda hoje, nas linguagens de programação e bancos de dados, um "[[wikipedia:First-class citizen|'''cidadão de primeira classe''']]". <br/>O [https://www.postgresql.org/docs/current/datatype-bit.html PostgreSQL oferece ''varbit''] e é razoável por ser indexável por ''btree'', mas não faz mais parte do padrão SQL ISO nem tem previsão de evolução no PostgreSQL. Uma variante, também presente em Parquet, é o UUID, mas requer tamanho fixo de 16 bytes.
# Implementação indireta '''como número inteiro positivo''': foi um grande desafio, mas acreditamos ter conseguido. A sua representação interna fica a cargo dos padrões numéricos mais populares, ''Int32'' (inteiro de 32 bits com sinal - sobram 31 bits sem sinal) e  ''Int64'' (inteiro 64 bits = 8 bytes). <br/>No [[PostgreSQL]] temos ainda o ''smallInt'' (16 bits = 2 bytes); no [https://parquet.apache.org/docs/file-format/data-pages/encodings/ Parquet] ([[Apache Parquet|adotado pela Overture]]) tentou-se INT96 mas foi descontinuado. As [https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#deprecated-integer-convertedtype variantes Parquet sem sinal] também foram descontinuadas.
# Implementação indireta '''como número inteiro positivo''': foi um grande desafio, mas acreditamos ter conseguido. A sua representação interna fica a cargo dos padrões numéricos mais populares, ''Int32'' (inteiro de 32 bits com sinal - sobram 31 bits sem sinal) e  ''Int64'' (inteiro 64 bits = 8 bytes). <br/>São notorias as implementações H3 Uber e S2 Geometry, por suas células em identificadores int64. A ISO DGGS também parece sugerir IDs de 64 bits. <br/>No [[PostgreSQL]] temos ainda o ''smallInt'' (16 bits = 2 bytes); no [https://parquet.apache.org/docs/file-format/data-pages/encodings/ Parquet] ([[Apache Parquet|adotado pela Overture]]) tentou-se INT96 mas foi descontinuado. As [https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#deprecated-integer-convertedtype variantes Parquet sem sinal] também foram descontinuadas.


Apesar de existirem diversas estratégias de implementação, cada qual com suas vantagens e desvantagens,  
Apesar de existirem diversas estratégias de implementação, cada qual com suas vantagens e desvantagens,