Em muitas linguagens de tipagem dinâmica, como Python, Ruby e JavaScript, os objetos se parecem com mapeamentos de nomes de atributos para valores. Essa flexibilidade leva os implementadores de runtimes a modelar atributos com uma tabela hash, o que parece natural, já que tabelas hash são boas em associar nomes a valores.
No entanto, a abordagem de tabela hash tem desvantagens. O hashing e o sondagem são lentos para uma operação muito comum. A tabela hash também adiciona uma indireção, forçando um salto do objeto para uma estrutura de armazenamento separada. Como resultado, um acesso simples a um atributo como a.b pode levar centenas ou milhares de instruções de CPU, incluindo vários carregamentos de memória dependentes. Como os atributos são acessados com frequência, armazená-los diretamente no objeto seria muito mais eficiente.
Para resolver isso, os runtimes usam estruturas conhecidas como mapas, layouts, shapes ou classes ocultas. Elas otimizam a leitura, a escrita e o armazenamento de atributos. Muitos runtimes de produção contêm casos especiais complexos e específicos de domínio, enquanto muitos posts de blog oferecem apenas visões gerais de alto nível, sem detalhes de implementação.
O autor se baseia em A Simple Object Model, de CF Bolz-Tereick, que modela o Python com fidelidade razoável. Em vez de cobrir a maquinaria de classes e métodos, o autor se concentra nos atributos de instância e na parte de mapas, extraindo um sistema de mapas reduzido e limpo, com menos de 500 linhas de código que o leitor consegue manter na cabeça de uma só vez.
Fonte: Hacker News · Resumido por HeadlinesBriefing