O dispatcher da função Solidity é uma árvore em que:
- Os nós internos executam divisões binárias.
- Os nós folha contêm até 4 seletores de função, testados linearmente.
Dica 1: o bytecode da função 'fallback' é gerado duas vezes no bytecode. Para reduzir o tamanho do bytecode, encapsule a lógica de fallback em uma função interna.
Dica 2: se você tiver uma função usada com muita frequência, crie um alias com um seletor de função '0x00000000', o que o torna o mais barato de pesquisar.
- Um dos desafios no projeto de uma biblioteca será qual algoritmo deve ser usado. Pesquise por que o mapa do C++ é uma árvore, unordered_map só veio 15 anos depois.
- Bibliotecas com genéricos dependem muito da capacidade do compilador de abstrair de custo zero com o mínimo de empurrão. Em Solady, às vezes fazemos coisas muito nojentas para cutucar o compilador. Por que escrever Rust e C ++ é bom é porque o compilador é inteligente o suficiente para não precisar de todos esses empurrões. Portanto, o núcleo do Solidity precisaria de um otimizador realmente bom para ir além das sutilezas genéricas do açúcar de sintaxe.
- Cauteloso em uma possível situação Python 2 vs 3. Espero que os aprendizados no núcleo possam e voltem ao clássico.
- Em um mundo de Solidez clássica e central, Solady planeja manter e desenvolver para ambos. Linguagens com uma biblioteca padrão maluca, ainda possui bibliotecas de terceiros (por exemplo, Eigen), para conhecimento específico do domínio.
Presenting 'The Road to Core Solidity', a series of blog posts through which we will share where we are headed with the language.
Let's take a look at the overview!