GScript – скриптовый язык для D
В игровом движке трудно обойтись без какого-либо способа динамического задания логики и поведения объектов, поэтому я решил написать для Atrium скриптовый язык. Это очень простой императивный язык с динамической типизацией и (пока) всего одним внутренним типом – float.
Что уже реализовано:
- Модульная система, как в D;
- Функции (есть поддержка рекурсии);
- Локальные переменные;
- Передача аргументов по значению и по ссылке. Что интересно, передача по ссылке возможна в любую функцию, так как ссылочный тип указывается при конкретном вызове функции, а не при ее объявлении;
- Условный переход if…else;
- Цикл while;
- Возможность расширять язык собственными функциями на D.
Кодогенератор и виртуальная машина к языку пока находятся на стадии прототипа (реализация рабочая, но далека от оптимальной).
Пример кода на GScript:
import myPackage.myModule;
func main()
{
var x = 10;
var a, b;
a = x * 2 + 1;
while(a > 0)
{
a = a - 1;
b = b + 1;
}
writeln(x, a, b);
}
Исходники проекта доступны на GitHub:
https://github.com/gecko0307/gscript
Примеры скриптов
Приветствуются предлолжения и пожелания – какую функциональность вы бы хотели видеть в языке (оговорка: поддержка ООП в ближайшее время не планируется).
"передача по ссылке возможна в любую функцию"
Очень спорная фича. Даже предположить не могу где такое может пригодиться, зато какие ошибки может вызвать… Не говоря уже о том, что функция не говорит какие в неё нужно аргументы передавать. Нужно назвать эту возможность "недореализация функций"!
Может, и спорная, но я ни в одном существующем языке такого не видел, поэтому решил попробовать. Если не оправдает себя, всегда можно переделать в традиционный вариант, с указанием ref в объявлении функии.