Платформа создана для решения программистами 1С задач с использованием синтаксиса языка, похожего, но не ограниченного возможностями языка 1С:
- высокопроизводительные распределенные вычисления
- создание и быстрое развертывание микросервисов, вэб-сервисов и вэб-порталов для работы тысяч пользователей
- работа с высокоэффективными базами данных
Встроив Гонец в свое решение, Вы сможете предоставить высокий уровень сервиса для своих клиентов, который обгонит решения ваших конкурентов.
Платформа разрабатывается “от простого к сложному”
На начальных этапах будет включена базовая функциональность многопоточных вычислений и сетевых сервисов
В перспективе планируется организация работы с различными базами данных и визуализация управляемых форм, созданных в конфигураторе 1С
Синтаксис 1С знаком и удобен сотням тысяч программистов в России и СНГ
Это позволяет создавать решения, которые могут поддерживаться программистами 1С, и которые не будут требовать дополнительной квалификации
Язык интерпретатора поддерживает синтаксис языка 1С, но дополнительно к этому имеет возможности, унаследованные от синтаксиса языка Go (Golang), Lua и Javascript
Многопоточное программирование: создание и работа с параллельно выполняемыми функциями и каналами передачи информации между ними (полный аналог chan и go из языка Го)
Поддержка срезов массивов и строк, как в языке Python (высокоскоростная реализация на слайсах Go)
Поддержка множества возвращаемых значений из функций и множественного присваивания между переменными (а,б=б,а) как в языке Go
Возможность указания структурных литералов и содержимого массивов прямо в исходном коде (как в Go)
Передача функций как параметров (функциональное программирование)
---?image=/extra/architecture.png&size=auto 92%
---?image=/extra/langarch.png&size=auto 92%
Язык Гонец расширяется путем изменения правил синтаксиса в формате YACC, а так же написания библиотек структур и функций на Го, которые могут быть доступны как объекты метаданных в языке Гонец
В системных библиотеках языка могут создаваться объекты метаданных, при импорте соответствующей библиотеки
Данные объекты метаданных являются функциональными структурными типами, функциональность которых скомпилирована на языке Го
Объекты таких метаданных имеют встроенные методы для работы с ними
Компиляция усовершенствованной версии интерпретатора выполняется одной командой go build .
в папке с исходными текстами, и занимает всего несколько секунд
Интерпретатор может и создавать микросервисы, и сам выступать в роли такого микросервиса
Посмотреть на использование интерпретатора в роли микросервиса можно по ссылке
В этой реализации в интерпретатор встроена простая система запуска кода через обычный браузер, которая работает на технологии ajax, общающаяся с микросервисом сессий исполнения кода интерпретатором, по протоколу HTTP
Производительность выше, чем у интерпретатора платформы 1С.
Скорость интерпретации кода соответствует скорости программ на Go и скорости работы библиотек, написанных на Go
Основные преимущества языка Go, которые позволят создавать производительные решения на языке Гонец:
- Кроссплатформенная компиляция - исполнение на любых устройствах
- Возможно создание функций на ассемблере и на C - для взаимодействия со специфичными драйверами устройств, например
- Встроенная система горутин и каналов для обеспечения параллельной обработки информации
- Оптимизированный SSA-компилятор в версии Go 1.9
- Быстрый и оптимизированный сборщик мусора - во время работы программ память используется минимально
- Переиспользуется ранее выделенная память - существенное ускорение за счет отсутствия лишних malloc
- Структуры хэшированы по ключам, слайсы работают очень быстро
- Оптимизирован для создания нагруженных сервисов
На платформе Гонец возможна реализация как обработки больших объемов данных, так и обработки часто поступающих запросов
Интерптетатор реализован на языке Go путем адаптации исходных кодов интерпретатора языка anko (https://github.com/mattn/anko)
Интерпретатор использует собственную регистровую виртуальную машину, также написанную на языке Go, а значит, имеет отличную производительность и стабильность
Исходный код на языке Гонец преобразуется в специальный байткод, который исполняется максимально быстро с минимальной нагрузкой на garbage collector
Интерпретатор использует повторное выделение памяти в синхронизированном пуле, что сокращает расход памяти даже при выполнении глубоких рекурсивных алгоритмов
Используется оптимизация "свертка констант"
а = [](0,1000*1000)
для н=1 по 10*10*10000 цикл
а=а+[н]+[н*10] //постоянно выделяется память для объединения массивов
конеццикла
к=0
для каждого н из а цикл
к=к+н
конеццикла
сообщить(к)
а=Новый("__функциональнаяструктуратест__")
а.ПолеСтрока = "авузлхвсзщл"
а.ПолеСтрока = "АВ"+а.ПолеСтрока[2:]
сообщить(а.ВСтроку(), а.ПолеСтрока+":ok")
LOAD r0, 0
LOAD r1, 1000000
MAKEARR r0, LEN r0, CAP r1
SET "а", r0
LOAD r1, 1
LOAD r2, 1000000
FORNUM r0, FROM r1, TO r2, BREAK TO L1
L2:
NEXTNUM r0, ENDLOOP L1
SET "н", r0
GET r3, "а"
MAKESLICE r4, LEN 1, CAP 1
GET r5, "н"
SETIDX r4[0], r5
OP r3, "+", r4
MAKESLICE r4, LEN 1, CAP 1
GET r5, "н"
LOAD r6, 10
OP r5, "*", r6
SETIDX r4[0], r5
OP r3, "+", r4
SET "а", r3
JMP L2
L1:
POPFOR L2
LOAD r0, 0
SET "к", r0
GET r0, "а"
FOREACH r0, ITER r1, BREAK TO L3
L4:
NEXT r2, FROM r0, ITER r1, ENDLOOP L3
SET "н", r2
GET r3, "к"
GET r4, "н"
OP r3, "+", r4
SET "к", r3
JMP L4
L3:
POPFOR L4
GET r0, "к"
CALL "сообщить", ARGS r0, ARGS_COUNT 1, VARARG false, GO false, RETURN r0
LOAD r0, "__функциональнаяструктуратест__"
SETNAME r0
MAKE r0 AS TYPE r0
SET "а", r0
LOAD r0, "авузлхвсзщл"
GET r1, "а"
SETMEMBER r1."ПолеСтрока", r0
LOAD r0, "АВ"
GET r1, "а"
GETMEMBER r1, "ПолеСтрока"
LOAD r2, 2
LOAD r3, <nil>
SLICE r1[r2 : r3]
OP r0, "+", r1
GET r1, "а"
SETMEMBER r1."ПолеСтрока", r0
GET r0, "а"
GETMEMBER r0, "ВСтроку"
CALL REG r0, ARGS r1, ARGS_COUNT 0, VARARG false, GO false, RETURN r0
GET r1, "а"
GETMEMBER r1, "ПолеСтрока"
LOAD r2, ":ok"
OP r1, "+", r2
CALL "сообщить", ARGS r0, ARGS_COUNT 2, VARARG false, GO false, RETURN r0
5500005500000
ПолеЦелоеЧисло=0, ПолеСтрока=АВузлхвсзщл АВузлхвсзщл:ok
Время компиляции: 0s
Время исполнения: 1.7867144s
MIT License (C) Роман Цованян, 2017