- Squirrel
-
Squirrel Класс языка: мультипарадигменный
Тип исполнения: Появился в: 2003
Автор(ы): Альберто Демичелис
Релиз: 3.0.3 (19 июня 2012)
Испытал влияние: Lua, Python, Javascript, С++
Лицензия Лицензия zlib/libpng
Сайт: Squirrel (англ. «белка») — интерпретируемый язык программирования, разработанный специально для использования в качестве скриптового языка в приложениях реального времени, таких как компьютерные игры. Является свободно распространяемым, с открытыми исходными текстами.
Содержание
Основные особенности
- Динамическая типизация
- Поддержка классов и наследования
- Управление памятью и сборка мусора
- Делегаты
- Генераторы
- Работа с исключениями
- Малый размер
Отличия от Lua
- Синтаксис языка ближе к C/C++
- Поддержка классов на уровне языка
- Для создания полей у таблиц нужно использовать специальный оператор <-, таким образом невозможно создать новое поле, случайно ошибившись в имени
- Lua разрабатывается на протяжении более 15 лет и для него создано большое количество библиотек, Squirrel относительно молодой язык.
Типы данных
Squirrel представляет собой язык с динамическим определением типов данных - тип переменной определяется значением, которое она хранит в данный момент времени и может меняться при присваивании нового значения. Все значения в Squirrel могут храниться в переменных, использоваться в качестве аргументов при вызове функций и возвращаться в виде результата их выполнения.
Значения в Squirrel могут быть следующих типов:
- null - неопределенное значение. Переменные типа Null могут иметь только одно значение - null;
- bool - логический тип, может иметь значение true или false;
- integer - целые числа (32 бита или больше);
- float - вещественные числа (32 бита или больше);
- string - текстовые строки - может хранить стоки в кодировке ASCII (1 байт) или unicode (2 байта);
- table - таблица - может хранить набор значений, представленных парами ключ/значение (называемых "слоты");
- array - массив - последовательность значений переменной длины, индексируемых целыми числами. Индексы начинаются с 0;
- function - функция - значение типа функция можно "вызвать", передав ему параметры и получив результат выполнения;
- generator - генератор - функция, выполнение которой может быть приостановлено и возобновлено с помощью операторов yield/resume;
- class - как и таблица, классы имеют набор слотов, однако, классы могут быть унаследованы а на их основе можно создавать объекты. После создания класса к нему можно добавлять слоты в любой момент;
- instance объект, созданный из класса. Так же содержит слоты, однако добавлять новые слоты в объект нельзя;
- thread - поток выполнения ;
- userdata - пользовательские данные - участки памяти и указатели, которые используются приложением, использующим squirrel;
Примеры программ
Вычисление факториала
function factorial(x) { if (x == 0) { return 1; } else { return x * factorial(x-1); } }
Генератор случайных чисел:
function gen_random(max) { local last=42 local IM = 139968; local IA = 3877; local IC = 29573; for(;;) { //loops forever yield (max * (last = (last * IA + IC) % IM) / IM); } } local randtor = gen_random(100); for(local i = 0; i < 10; i += 1) print(">"+resume randtor+"\n");
Классы и наследование:
class BaseVector { constructor(...) { if(vargv.len() >= 3) { x = vargv[0]; y = vargv[1]; z = vargv[2]; } } x = 0; y = 0; z = 0; } class Vector3 extends BaseVector { function _add(other) { if(other instanceof ::Vector3) return ::Vector3(x+other.x,y+other.y,z+other.z); else throw "wrong parameter"; } function Print() { ::print(x+","+y+","+z+"\n"); } } local v0 = Vector3(1,2,3) local v1 = Vector3(11,12,13) local v2 = v0 + v1; v2.Print();
Реализация
Исходный код компилируется в байт код, который впоследствии выполняется на виртуальной машине. Для задач критичных по времени имеется JIT компилятор.
Ссылки
- Официальный сайт squirrel (англ.)
- Совместный перевод документации (рус.)
Основные языки программирования (сравнение • IDE • история • хронология) Используемые
в разработкеАда • APL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • Icon • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Ruby • Scala • Scheme • Smalltalk • SQL • PL/SQL • Tcl • Vala • Visual Basic (.NET)
Академические IEC 61131-3 Instruction List • ST • FBD • Ladder Diagram (LD) • SFC
Прочие Эзотерические Визуальные Категории:- Появились в 2003 году
- Языки программирования по алфавиту
- Скриптовые языки
- Свободные библиотеки программ
Wikimedia Foundation. 2010.