В игровом движке трудно обойтись без какого-либо способа динамического задания логики и поведения объектов, поэтому я решил написать для 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
Примеры скриптов

Приветствуются предлолжения и пожелания – какую функциональность вы бы хотели видеть в языке (оговорка: поддержка ООП в ближайшее время не планируется).

This article has 2 comments

  1. Vasua Pupkin Reply

    "передача по ссылке возможна в любую функцию"
    Очень спорная фича. Даже предположить не могу где такое может пригодиться, зато какие ошибки может вызвать… Не говоря уже о том, что функция не говорит какие в неё нужно аргументы передавать. Нужно назвать эту возможность "недореализация функций"!

  2. Тимур Гафаров Reply

    Может, и спорная, но я ни в одном существующем языке такого не видел, поэтому решил попробовать. Если не оправдает себя, всегда можно переделать в традиционный вариант, с указанием ref в объявлении функии.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *