Гонец 3.1 и планы на версию 4.0


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

План для версии 4.0a:

  • Будет реализован первый кандидат на параллелизм (помимо уже существующих горутин) - цикл с ключевым словом "Параллельно N", разбивающий выполнение цикла на N параллельно выполняющихся воркеров-горутин, исполняющих тело цикла с отдельными пулами объектов или диапазонами итераторов (каждый в своем окружении). Это позволит обрабатывать большие массивы данных единым понятным алгоритмом, но с использованием параллелизма!
  • Работа с таблицами in-memory, в качестве основы будет взято решение https://github.com/ekzhu/datatable
  • InfluxDB
  • API для работы каналов через сеть - горутины Гонца будут общаться между собой и фронтендом посредством каналов по сетевому API. Между собой - бинарный протокол, с фронтендом и 1С - JSON API. Это позволит создавать масштабируемые горизонтально (на множество серверов) решения.

Комментарии

Популярные сообщения из этого блога

Показатели эффективности персонала в сфере услуг

P2M: ЦЕННОСТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД К УПРАВЛЕНИЮ ИННОВАЦИОННЫМИ ПРОГРАММАМИ И ПРОЕКТАМИ

Д. Кейрси. ТЕМПЕРАМЕНТ И ХАРАКТЕР