Skip to content

Simple C++ like interpreted language with static types and operators overloading

Notifications You must be signed in to change notification settings

HumMan/BaluScript

Repository files navigation

BaluScript

Platform Windows Linux
Build status Build status
Test status
Build Status

Простой, интерпретируемый язык, похожий на C++ и C#. Все примеры кода можно посмотреть в тестах здесь GitHub. Модель памяти как в C++, нет неявных выделений/удалений, используются конструкторы и деструкторы.

Указатели отсутствуют. Есть ссылки, но имеется runtime механизм проверки ссылок на объекты в деструкторе (отслеживать use after free). Методы/поля можно использовать до объявления.

class TestClass
{
	class Vec2<T,Size>
	{
		TStaticArray<T,Size> value;
		copy(T v0, T v1)
		{
			value[0]=v0;value[1]=v1;
		}
		copy(Vec2 l)
		{
			value[0]=l[0];value[1]=l[1];
		}
		operator +(Vec2 l, Vec2 r):Vec2
		{
			return new Vec2(l[0]+r[0],l[1]+r[1]);
		}
		operator -(Vec2 l, Vec2 r):Vec2
		{
			return new Vec2(l[0]-r[0],l[1]-r[1]);
		}
		operator [](Vec2& l, int i):T
		{
			return l.value[i];
		}
		func Dot(Vec2 r):T
		{
			return value[0]*r[0]+value[1]*r[1];
		}
	}
	func static Test:int
	{
		Vec2<int, 2> v(3,5),r(-2,8);
		Vec2<int, 2> s=(v+r);
		return s.Dot(v-r);
	}
}

Что поддерживает

  • Классы
  • Вложенные классы
  • Шаблонные классы (параметр класс и int)
  • Поля классов (могут быть статичные, с доступом private/public)
  • Статичные локальные переменные
  • Перегрузка конструктора по умолчанию(default)/копии(copy), деструктора(dest), операторов, преобразований(conversion)
  • Стандартные операторы цикла while, for
  • Условный оператор if else
  • Перечисления enum
  • Набор встроенных классов: int float bool vec2 vec2i char. Сами классы тут GitHub
  • Динамические массивы TDynArray
  • Статические массивы TStaticArray<T,Size>
  • Класс string - обёртка над std::string
  • Автоматический вывод типа локальной переменной через var
  • Имеется TPtr - аналог std::shared_ptr (т.к. указателей нет, а иметь общие объекты нужно)
  • Операторные скобки, выражения - тут как обычно
  • Перегрузка методов
  • Имеются extern методы для вызова метода C++ из скрипта

Т.к. BaluScript разрабатывался для конструктора BaluEngine, то имеются функции для взаимодействия с внешним миром

  • Вызов метода скрипта из C++ (тут вручную преобразуем параметры)
  • Генерации биндингов для скрипта для вызова его методов из C++

About

Simple C++ like interpreted language with static types and operators overloading

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages