TScript - TScript

TScript
TScript TradeMark.png
Разработчики) Ekky Software
Стабильный выпуск
1.4 / 1 июля 2012 г. ( 2012-07-01 )
Написано в C ++
Операционная система Windows и Linux
Тип Язык сценариев
Лицензия Бесплатно (проприетарный)
Интернет сайт www .ekkysoftware .com

TScript - это объектно-ориентированный встраиваемый язык сценариев для C ++, который поддерживает иерархические переходные типизированные переменные (TVariable). Его основным критерием проектирования является создание языка сценариев, который может взаимодействовать с C ++, преобразовывать данные и возвращать результат. Это позволяет приложениям C ++ изменять свою функциональность после установки.

Привет, мир, пример

Базовое "Hello World!" Пример TScript.

CTScript ts;
ts.SetParameter(CTScript::SOURCE_STRING,0,TEXT("main(){")
TEXT("   System::MessageBox(L\"Hello World!\");")
TEXT("}"));
ts.ExecuteStaticMethod();

TVariables

Стандартная переменная может быть сформирована как фиксированные данные, такие как логическое, целое или десятичное, и переменная переменной длины, такая как строка ASCII, строка широких символов или двоичная строка. Тип данных может использоваться для определения переменной или тип может быть явно объявлен, поэтому, например, код - variable myInteger = 0;создаст переменную с именем myInteger и присвоит ей нулевое значение. Целочисленный тип также может быть объявлен как -, Integer myInteger;и его значение по умолчанию будет равно нулю.

TVariable имеют иерархический характер и очень похожи на переменные XML , JavaScript и PHP .

Тип TVariable также является временным, поскольку Integer можно преобразовать в AString, присвоив ему строковое значение или преобразовав переменную в AString. Например, после создания и использования целочисленной переменной ее можно переназначить, приравняв ее к AString.

TVariables также можно использовать для хранения массива TVariables. После создания действительной переменной можно использовать индексную нотацию индекса массива для преобразования ее в массив, поэтому, например, код - variable list = {0,2,4,6};создаст массив с четырьмя элементами. Тип TVariable для list.type будет типом структуры, а каждый элемент list[0].typeбудет целым числом.

Класс в TScript похож на массив в том, как TVariable обрабатывает их, но использует строки как сценарии массива. Например, код - создаст структурированную переменную, где list. Понедельник - истина, а список - ложь. В собственном коде C ++ структурированные элементы TVariable доступны в C ++ с помощью - или либо, либо в собственном коде. variable list = {"Monday" => true, "Tuesday" => false};list["Monday"];list.Mondaylist["Monday"]

Определенные переменные (классы)

Поддерживая иерархические переменные, TScript может хранить как примитивные, так и сложные переменные в одной и той же структуре переменных. Это устраняет любые требования к любому уникальному различию между примитивами и структурированными данными, тем самым делая структуру классов логической группировкой функций, а не типом хранения данных.

TScript реализует концепции наследования и инкапсуляции кода через определенные переменные. Например, в следующем фрагменте кода показаны определенные переменные Foo и Bar , поддерживающие конструктор.

variable Bar{
   Integer minimum, maximum;
   Bar(){
      this.minimum = 1;
   }
}

variable Foo extends Bar{
   WString name;
   Foo(WString name){
      this.name = name;
      this.Bar();
   }
}

public main(){
   Foo foo(L"Goo");
   System::MessageBox(foo.ToString());
}

Объявления функций

Еще одна поразительная особенность TScript - объявления функций, в которых используются выходные параметры, а не возвращаемые значения , и обеспечивается их синтаксическая поддержка. Стандартная функция во многих процедурных языках, следующих за Algol, имеет вид:

[ возвращаемый тип ] < имя функции > ([ входная переменная ], ...) .

В TScript этот шаблон был изменен на форму:

< имя функции > ([ входная переменная ], ...: [ выходная переменная ], ...) .

Это изменение сделало две вещи: во-первых, оно разрешило несколько выходных переменных, а во-вторых, оно изменило оператор return на функцию обработки ошибок.

Разрешение функциям иметь список входных и выходных переменных, разделенных полустолбцом «:», изменило обычный порядок вызова и использования функции. Это частично устраняет необходимость использования ссылочных указателей для возврата нескольких переменных, что является обычным для C / C ++, а использование ссылок в большинстве других языков сценариев фактически предотвращается, что вынуждает использование структуры или массива для возврата нескольких значений.

Вторая значимая вещь о вызывающей конвенции является то , что теперь все функции имеют интегрированную обработку ошибок цели , аналогичную и С ++ и Java. В TScript, поскольку все функции возвращают ошибку, оператор return работает аналогично оператору throw. Например, инструкция: - return error = «Есть сообщение об ошибке»; завершит функцию и вернет сообщение об ошибке. В качестве альтернативы пустой оператор; - return; завершит функцию, но не вернет никаких ошибок. try{}catch(){}throw new Exception()

Пример нескольких возвращаемых значений

public TextExtent(WString text : Integer width, Integer height){
   text = text.Fragment(L"\n");
   for(height = width = 0; height < text.length; height++){
      if(width < text[height].length) width = text[height].length;
   }
}

Сокращенное обозначение

Для удобства TScript предлагает сокращенный вызов функции в ситуации, когда возвращается только одна переменная. Это обозначение будет заменять регистр . Эта короткая запись не позволяет вызывающему коду перехватить какие-либо ошибки, и они автоматически вернутся к родительскому вызывающему коду. function(: variable); for variable = function();

Обработка ошибок

Обработка ошибок на многих других языках осуществляется с помощью исключений . TScript использует аналогичный процесс обработки ошибок, хотя и немного другой. TScript имеет глобальную переменную ошибки, аналогичную традиционной errno в C, хотя переменная ошибки в TScript может содержать как код ошибки, так и подробное сообщение об ошибке.

Во многих языках, использующих этот синтаксис, ошибка возвращается с помощью оператора catch, и это может затруднить выполнение кода в ситуациях, когда некоторые ошибки можно исправить. TScript использует нотацию, которая позволяет вызывающему коду фильтровать ошибку, потенциально восстанавливаясь после ошибки и возвращаясь к нормальной работе, или возвращая ошибку своей собственной вызывающей функции. try{...}catch(...){...}if(...){...} else{...}

Пример возврата и обработки ошибок

function(){return error = -1;}

public main(){
   if(!function()){
      if(error != -1) return error;
   }
   System::MessageBox(L"function executed correctly");
}

Связывание во время выполнения

C ++ поддерживает перегрузку функций , что позволяет функциям иметь одно и то же имя, различаясь по входным параметрам. Это вызывает проблему с TScript при поддержке переменных свободного типа , так как невозможно определить тип переменной до тех пор, пока программное обеспечение не будет запущено.

Чтобы противостоять этой проблеме, TScript был написан с возможностью связывания во время выполнения. Это когда конкретная вызываемая функция зависит от типа переменных при вызове функции.

Это необычная тактика, у которой есть некоторые дополнительные преимущества. Во-первых, это означает, что нет необходимости объявлять функции перед их использованием, например, в C ++ две функции могут вызывать друг друга, например и . В этой ситуации необходимо создать прототип, чтобы объект мог его вызвать. Связывание времени выполнения TScript означает, что функции могут быть объявлены в любом порядке без необходимости прототипирования. Это может значительно упростить написание кода для менее опытных программистов, позволяя им сосредоточиться на логике программного обеспечения, а не на требованиях языка. void Foo(){ Bar();}void Bar(){Bar();}Bar()Foo()

Связывание во время выполнения также позволяет языку поддерживать кодирование во время выполнения с помощью таких методов, как AddMethod и AddDefinedVariable . Это позволяет программам на TScript писать сами. Например, при использовании интерфейса SOAP удаленный WSDL будет закодирован в библиотеку сценариев, что позволит вызывать внутренние функции, как если бы они были закодированы во время разработки. Кроме того, также можно написать код, который может обучаться сам, писать новые функции, когда это необходимо.

Динамически подключаемые библиотеки

TScript входит в небольшую группу языков сценариев, которые обеспечивают функциональность для динамической загрузки и связывания с существующими разделяемыми библиотеками. Java через JNI и VB6 - это два других языка сценариев, которые позволяют писать код, загружающий стороннюю библиотеку и выполняющийся через собственный интерфейс. Это дает TScript возможность использовать множество ранее существовавших функций и кода, написанного на разных языках, и это может быть сделано без каких-либо изменений интерфейса разделяемой библиотеки или компиляции с исходным кодом.

Управление памятью

TScript использует стандартную инкапсуляцию классов C ++ для выделения и освобождения ресурсов памяти. Это означает, что вся выделенная память высвобождается, когда содержащая ее переменная уничтожается и работает иначе, чем модель сборки мусора Java или модель подсчета ссылок языков .NET .

Ресурсы операционной системы, такие как файлы, сокеты и ключи шифрования, управляются с помощью механизма подсчета ссылок, аналогичного .NET, поэтому они будут освобождены, как только не будет переменных, содержащих их значения.

Проактивная безопасность

Имея возможность загружать существующие разделяемые библиотеки, сценарий может получить доступ ко всем привилегиям, предоставленным пользователю, который его выполняет. Для защиты от вредоносного кода каждому сценарию необходимо предоставить все ресурсы, помимо выделения основной памяти. Это также включает в себя возможность использовать окна сообщений для запроса пользователю, доступа для чтения и / или записи к любому файлу или каталогу или с помощью подключения к Интернету.

Эта архитектура безопасности спроектирована так, чтобы позволить запускать сценарии аналогично JavaScript , обеспечивая при этом полезность более мощных языков сценариев, таких как PERL .

использованная литература

внешние ссылки