Проведен масштабный рефакторинг архитектуры под интерфейсные типы, что позволило получить большую масштабируемость при существенном увеличении производительности.
- Виртуальная машина получила идиоматически верные интерфейсные типы данных Го и новые быстрые обертки для системных функциональных объектов. Как следствие, еще более быстрая обработка данных и удобство при расширении функциональности стандартной библиотеки (из-за правильных абстракций).
- Более строгий контроль типов при осуществлении операций
- Код выполняется в воркерах, что позволит в дальнейшем создавать языковые конструкции с поддержкой параллелизма
- Вызов функций существенно ускорен за счет отказа от рефлексии
- Для работы с плавающей запятой использована библиотека работы с Decimal-типами (абсолютная финансовая точность операций с плавающей запятой, работа с большими числами)
- Реализованы типы Дата и Длительность с русскоязычными встроенными методами (Год, Месяц, День недели и т,д.), форматирование в русской локали и.т.п. Работа с датой и временем возможна в любой локации и часовом поясе, при сравнении дат и времени это автоматически учитывается. Возможна работа с местным временем, и преобразование в другие часовые пояса / локации типа Europe/Moscow.
- Добавлена быстрая хэш-функция на ассемблере https://github.com/dchest/siphash, для хэширования строк, структур и массивов (требуется в различных алгоритмах, где нужна проверка на уникальность больших/составных значений)
- Добавлено сравнение системных функциональных структур через хэши их бинарного представления
- Добавлены быстрые преобразования всех базовых типов в JSON, binary и обратно (в т.ч. и функциональных структур) - задел на будущие операции с сетевыми протоколами RPC, JSON-RPC и т.п.
- Массивы и структуры получили операции коньюкции, дизньюкции и т.п. в виде обычного сложения, вычитания и т.д.
Простые тесты показывают хороший прирост производительности по сравнению с версией 2.0. Например, рекурсивный тест Фибоначчи увеличил производительность в два раза. Вместе с тем, в угоду производительности (избавление от рефлексии практически везде), утрачена былая гибкость использования функций в нативном исполнении на Го. Теперь необходимо писать более строгую обертку для типов, полей, методов и функций, которые должны быть доступны из языка Го. Это компенсируется на порядок более высокой производительностью и меньшим потреблением памяти.