TScript

フリー百科事典ウィキペディアより
ナビゲーションにジャンプ 検索にジャンプ
TScript
開発者エクキーソフトウェア
安定版リリース
1.4 / 2012 年 7 月 1 日[1] ( 2012-07-01 )
で書かれているC++
オペレーティング·システムWindowsLinux
タイプスクリプト言語
ライセンス無料(専有)
Webサイトwww.ekkysoftware.com _ _

TScriptは、C++用のオブジェクト指向の組み込み可能なスクリプト言語であり、階層型の一時的な型付き変数 (TVariable) をサポートしています。その主な設計基準は、C++ と連携してデータを変換し、結果を返すことができるスクリプト言語を作成することです。これにより、インストール後に C++ アプリケーションの機能を変更できます。

Hello world の例

基本的な「Hello World!」TScript の例。

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

TV変数

標準変数[2]は、Boolean、Integer、Decimal などの固定データと、ASCII 文字列、ワイド文字列、バイナリ文字列などの可変長変数として形成できます。データの型を使用して変数を定義したり、型を明示的に宣言したりできます。たとえば、コードvariable myInteger = 0;は myInteger という変数を作成し、値ゼロを割り当てます。整数型は - として宣言することもできInteger myInteger;、そのデフォルト値はゼロに設定されます。

TVariable は本質的に階層的であり、XMLJavaScript、およびPHP変数に非常に似ています。

TVariable 型も一時的です。これは、Integer に文字列値を割り当てるか、変数を AString にキャストすることによって、Integer を AString に変更できるためです。たとえば、整数変数を作成して使用した後、それを AString と等価にすることで再割り当てできます。

TVariables は、TVariables の配列を保持するためにも使用できます。有効な変数が作成されると、配列インデックスの添字表記を使用してそれを配列に変換できます。たとえば、コード -variable list = {0,2,4,6};は 4 つの要素を持つ配列を作成します。「list.type」の TVariable タイプは構造体のタイプになり、の各要素はlist[0].type整数になります。

TScript のクラスは、TVariable での処理方法が配列と似ていますが、文字列を配列スクリプトとして使用します。たとえば、コード -は構造化変数 where list を作成します。Monday は true で、list.Tuesday は false です。ネイティブ C++ コードでは、構造化された TVariable 要素は、C++ で -またはいずれかまたはネイティブ コードでアクセスできます。 variable list = {"Monday" => true, "Tuesday" => false};list["Monday"];list.Mondaylist["Monday"]

定義済み変数 (クラス)

階層変数をサポートする TScript は、プリミティブ変数と複雑な変数の両方を同じ変数構造内に格納できます。[3]これにより、プリミティブと構造化データの間の固有の違いに関する要件が取り除かれるため、クラス構造はデータ ストレージ タイプではなく、機能の論理グループになります。

TScript は、定義された変数を通じて継承とコードのカプセル化の概念を実装します。たとえば、次のコード スニペットは、コンストラクターをサポートする 定義済みの変数FooBarを示しています。

可変バー{ 
   整数の最小値最大値  
   バー(){
      これ最小= 1 ;  
   }
}

変数Foo extends Bar {   
   WString; 
   Foo ( WString){ 
      これ名前=名前;  
      これバー();
   }
}

公開メイン(){ 
   Foo foo ( L "グー" ); 
   システム:: MessageBox ( foo . ToString ());
}

関数宣言

TScript のもう 1 つの顕著な特徴は、関数宣言[4] です。これは、戻り値ではなく出力パラメーターを使用し、これらの構文サポートを提供します。Algol に続く多くの手続き型言語の標準関数は、次の形式です。

[戻り型] <関数名>([入力変数], ...) .

TScript では、このパターンは次の形式に変更されています。

<関数名>([入力変数],... :[出力変数],...) .

この変更により、2 つのことが行われました。1 つ目は、複数の出力変数を許可することです。2 つ目は、return ステートメントをエラー処理関数に変更したことです。

関数が半列「:」で区切られた入力変数と出力変数のリストを持つことを許可することで、関数の呼び出し方法と使用方法の通常の流れが変更されました。これにより、C/C++ で一般的な複数の変数を返すために参照ポインターを使用する必要がなくなります。また、他のほとんどのスクリプト言語での参照の使用は実際には防止されており、構造体または配列を使用して複数の値を返す必要があります。

呼び出し規則に関する 2 番目の注目すべき点は、すべての関数が、 C++ や Java同様の統合されたエラー処理の目的を持っていることです。TScript では、すべての関数がエラーを返すため、return ステートメントは throw ステートメントと同様に動作します。たとえば、ステートメント:- return error = "エラーメッセージがあります"; 関数を終了し、エラー メッセージを返します。または、空白のステートメント;- return; 関数を終了しますが、エラーは返しません。 try{}catch(){}throw new Exception()

複数の戻り値の例

public TextExtent ( WString text :整数整数高さ){       
   テキスト=テキスト. フラグメント( L " \n " );  
   for (高さ== 0 ;高さ<テキスト.長さ;高さ++ ){        
      if (<テキスト[高さ].長さ)=テキスト[高さ]. 長さ;     
   }
}

省略記法

便宜上、TScript には、返される変数が 1 つしかない状況での簡易関数呼び出しが用意されています。の表記は の場合を代用します。この短い表記により、呼び出し元のコードがエラーをキャッチするのを防ぎ、エラーは親の呼び​​出し元のコードに自動的に返されます。 function(: variable); for variable = function();

エラー処理

他の多くの言語でのエラー処理は、例外を使用して行われます。TScript は同様のエラー処理プロセスを使用しますが[5]、わずかに異なります。TScript には、C の従来のerrnoに似たグローバル エラー変数がありますが、TScript のエラー変数は、エラー コードと詳細なエラー メッセージの両方を保持できます。

この構文を使用する多くの言語では、catch ステートメントを介してエラーが返されます。これにより、一部のエラーが回復可能な状況で、コードの操作フローが厄介になる可能性があります。TScript は、呼び出しコードがエラーをフィルタリングできるようにする表記法を使用し、エラーから回復して通常の操作に戻るか、独自の呼び出し関数にエラーを返す可能性があります。 try{...}catch(...){...}if(...){...} else{...}

返品と取り扱いエラーの例

関数(){リターンエラー= -1 ;}   

公開メイン(){ 
   if ( !関数()){
      if (エラー!= -1 )エラーを返します    
   }
   System :: MessageBox ( L "関数は正しく実行されました" );
}

実行時リンク

C++ は関数のオーバーロードをサポートしています。これにより、入力パラメーターによって区別されながら関数を同じ名前にすることができます。ソフトウェアが実行されるまで変数の型が何であるかを知る方法がないため、 ルーズ型変数をサポートしている間、これは TScript に問題を引き起こします。

この問題に対処するために、TScript は実行時リンクで記述されています。これは、呼び出される特定の関数が、関数が呼び出されたときの変数の型に依存する場合です。

これは、いくつかの追加の利点を持つ珍しい戦術です。まず、関数を使用する前に関数を宣言する必要がないことを意味します。たとえば、C++ では、 と のように 2 つの関数を互いに呼び出すことができますこの状況では、がそれを呼び出すために、 のプロトタイプを作成する必要があります。TScript のランタイム リンクは、プロトタイプを作成する必要なく、関数を任意の順序で宣言できることを意味します。これにより、経験の浅いプログラマーにとってコードの記述がはるかに簡単になり、言語の要件ではなく、ソフトウェアのロジックに集中できるようになります。 void Foo(){ Bar();}void Bar(){Bar();}Bar()Foo()

実行時リンクにより、言語はAddMethodAddDefinedVariableなどのメソッドを使用して実行時コーディングをサポートすることもできます。これにより、TScript プログラムは自分で記述できます。たとえば、SOAPインターフェイスを使用する場合、リモートWSDLはスクリプト ライブラリにエンコードされ、設計時にコード化されたかのように内部の関数を呼び出すことができます。さらに、必要に応じて新しい関数を作成し、それ自体で学習できるコードを作成することもできます。

ライブラリの動的リンク

TScript は、既存の共有ライブラリを動的に読み込んでリンクする機能を提供するスクリプト言語の小さなグループの 1 つです。JNIを介した JavaVB6は、サード パーティのライブラリをロードし、そのネイティブ インターフェイスを介して実行するコードを記述できるようにする 2 つの他のスクリプト言語です。これにより、TScript はさまざまな言語で記述された豊富な既存の機能とコードを使用できるようになり、共有ライブラリのインターフェイスを変更したり、ソース コードでコンパイルしたりする必要がなくなります。

メモリ管理

TScript は、標準の C++ クラス カプセル化を使用して、メモリ リソースの割り当てと割り当て解除を行います。これは、それを含む変数が破棄され、Java のガベージ コレクション モデルまたは.NET言語 の参照カウント モデルとは異なる方法で操作されると、割り当てられたすべてのメモリが解放されることを意味します。

ファイル、ソケット、暗号化キーなどのオペレーティング システム リソースは、.NET と同様の参照カウント メカニズムを介して管理されるため、値を含む変数がなくなるとすぐに解放されます。

プロアクティブなセキュリティ

既存の共有ライブラリをロードする機能により、スクリプトはそれを実行するユーザーに付与されたすべての権限にアクセスできます。悪意のあるコードから保護するために、基本的なメモリ割り当てを超えるすべてのリソースを各スクリプトに付与する必要があります。これには、メッセージ ボックスを使用してユーザーにプロンプ​​トを表示する機能、任意のファイルまたはディレクトリへの読み取りおよび/または書き込みアクセス、またはインターネット接続を使用する機能も含まれます。

このセキュリティ アーキテクチャは、JavaScriptと同様の方法でスクリプトを実行できるようにする一方で、 PERLなどのより強力なスクリプト言語の有用性を有効にするように設計されています

参考文献

外部リンク