s4g - скриптовый язык программирования Язык программирования: C++ 11 Платформа: начиная с Windows XP и выше Лицензия: свободная (MIT с некоторыми дополнениями) Сайт:ссылка Пользовательская документация:ссылка Документация для программистов:ссылка Быстрый старт:ссылка Репозиторий:ссылка
s4g (scripts for games) – высокоуровневый, императивный, процедурный, встраиваемый, скриптовый язык программирования общего назначения, написанный на C++. s4g создавался как мощный, гибкий, быстрый и простой скриптовый язык (конечно же в балансе всего этого), предоставляющий достаточные выразительные средства для решения различных задач. Как такового понятия входа в программу нет, поэтому могут выполняться отдельные участки кода, такие как функции. s4g легко расширяем посредством предоставляемого набора функций (api). Файл s4g_lib_std.h яркий пример простого расширения языка, в данном файле происходит экспорт языковых функций в скриптовую систему. s4g поддерживает препроцесс похожий на C++. Тип виртуальной машины – стековая. При разработке был сделан особый упор на real-time производительность исполнения кода и отчетности скриптовой системы перед программистом, так как изначальная цель использования языка в среде критичной по времени исполнения. Является свободно распространяемым программным средством по лицензии MIT (см. файл LICENSE).
На данный момент версия 0.9.2 то есть еще не все сделано, и язык еще немного сыроват, но это уже более стабильная версия. Требуются дополнительные тесты. Кому не трудно протестируйте)) Язык будем потихоньку дорабатывать.
Несколько примеров:
Код
//простой пример работы с препроцессом
#define TEST2(str) #str #define TEST(a, b) TEST2(a ## b) print(TEST(qwe, asd) + "\n");
//пример работы с функциями с замыканием и с функция с переменным количеством аргументов
var closure1 = function () { var a = 10; var c = 1;
var fc = function(arg1) extern a,c { return a+arg1-c; }; a = 15;
var fc2 = function(arg1) extern a,c { return a+arg1*c; }; var arrfunc = {fc;fc2;}; return arrfunc; };
var arrfunc = closure1(); var nfc = arrfunc:[0]; var nfc2 = arrfunc:[1]; print("closure " + tostring(nfc(10)) + "\n"); print("closure " + tostring(nfc2(10)) + "\n");
var mmarg = function (...) { var f1 = function(arg1) { var f2 = function(a1) { return a1*a1; };
return f2(arg1); };
print("f1 table length is " + tostring(f1(count(args))) + "\n"); print("f1 argument number 1 is " + tostring(f1(args:[1])) + "\n"); };
mmarg(1,2,3,4,5,6);
Возможно местами код не элегантный, а алгоритмы не совершенны, но мы делали для себя, а потом решили выпустить в open source)) В некоторых местах мы могли оказаться не настолько компетентны на сколько хотелось бы. Выслушаем объективные комментарии, примем к сведению. Комментарии обсуждения целесообразности разработки не принимаем)) Мой блог - ссылка Мои проекты: SkyXEngine - графический 3D движок с real-time рендером s4g - скриптовый язык программирования
Сообщение отредактировал Byurrer - Понедельник, 02 Октября 2017, 09:05