Функция диспетчера Solidity представляет собой дерево, где:
- Внутренние узлы выполняют бинарные разбиения.
- Листовые узлы содержат до 4 селекторов функций, проверяемых линейно.
Совет 1: байт-код функции `fallback` генерируется дважды в байт-коде. Чтобы уменьшить размер байт-кода, оберните логику fallback в внутреннюю функцию.
Совет 2: если у вас есть очень часто используемая функция, создайте псевдоним с селектором функции `0x00000000`, что делает её самой дешевой для поиска.
- Одной из задач при проектировании библиотеки будет выбор алгоритма. Узнайте, почему карта в C++ — это дерево, а unordered_map появилась только через 15 лет.
- Библиотеки с обобщениями сильно зависят от способности компилятора к нулевым затратам на абстракцию с минимальными подталкиваниями. В Solady мы иногда делаем очень неприятные вещи, чтобы подтолкнуть компилятор. Почему написание на Rust и C++ приносит удовольствие, так это потому, что компилятор достаточно умен, чтобы не нуждаться во всех этих подталкиваниях. Поэтому основному Solidity потребуется действительно хороший оптимизатор, чтобы выйти за рамки синтаксического сахара и приятных обобщений.
- Будьте осторожны с возможной ситуацией Python 2 против 3. Надеюсь, что знания из ядра смогут и будут возвращаться в классический.
- В мире классического и основного Solidity, Solady планирует поддерживать и развивать оба. Языки с безумной стандартной библиотекой все еще имеют сторонние библиотеки (например, Eigen), для специфических знаний.
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!