stringtranslate.com

Guión T

TScript es un lenguaje de programación orientado a objetos integrable para C++ que admite variables transitorias tipificadas jerárquicas (TVariable). Su principal criterio de diseño es crear un lenguaje de programación que pueda interactuar con C++, transformar datos y devolver el resultado. Esto permite que las aplicaciones C++ cambien su funcionalidad después de la instalación.

Ejemplo de Hola mundo

El ejemplo básico de TScript "¡Hola mundo!".

CTScript ts ; ts.SetParameter ( CTScript :: CADENA_DE_ORIGEN , 0 , TEXTO ( " main (){" ) TEXTO ( "System::MessageBox ( L \" ¡Hola mundo! \" );" ) TEXTO ( "}" )); ts.ExecuteStaticMethod ( ) ; 

TVariables

La variable estándar [2] puede estar formada por datos fijos, como un booleano, un entero o un decimal, y una variable de longitud variable, como una cadena ASCII, una cadena de caracteres anchos o una cadena binaria. El tipo de los datos se puede utilizar para definir la variable o el tipo se puede declarar explícitamente, por ejemplo, el código - variable myInteger = 0;creará una variable llamada myInteger y le asignará el valor cero. Un tipo entero también se puede declarar como - Integer myInteger;y su valor predeterminado se establecerá en cero.

Las variables TVariable son de naturaleza jerárquica y son muy similares a las variables XML , JavaScript y PHP .

El tipo TVariable también es transitorio, ya que un entero se puede convertir en un AString asignándole un valor de cadena o convirtiendo la variable en un AString. Por ejemplo, después de que se haya creado y utilizado una variable entera, se puede reasignar equiparándola a un AString.

TVariables también se puede utilizar para almacenar una matriz de TVariables. Una vez que se ha creado una variable válida, se puede utilizar la notación de subíndice de índice de matriz para transformarla en una matriz, por lo que, por ejemplo, el código - variable list = {0,2,4,6};creará una matriz con cuatro elementos. El tipo de TVariable para "list.type" será el de una estructura y cada elemento de list[0].typeserá un entero.

Las clases en TScript son similares a las matrices en cuanto a cómo las maneja TVariable, pero utilizan cadenas como scripts de matriz. Por ejemplo, el código - creará una variable estructurada donde list.Monday es verdadero y list.Tuesday es falso. En el código nativo de C++, los elementos estructurados de TVariable son accesibles en C++ mediante - o mediante o en el código nativo.variable list = {"Monday" => true, "Tuesday" => false};list["Monday"];list.Mondaylist["Monday"]

Variables definidas (clases)

Al admitir variables jerárquicas, TScript puede almacenar variables primitivas y complejas dentro de la misma estructura de variables. [3] Esto elimina cualquier requisito de diferencia única entre primitivas y datos estructurados, lo que hace que la estructura de clase sea una agrupación lógica de funcionalidad en lugar de un tipo de almacenamiento de datos.

TScript implementa conceptos de herencia y encapsulamiento de código a través de variables definidas. Por ejemplo, el siguiente fragmento de código muestra las variables definidas Foo y Bar que admiten un constructor.

variable Bar { Entero mínimo , máximo ; Bar ( ) { this.minimo = 1 ; } }         variable Foo extiende Bar { WString nombre ; Foo ( WString nombre ) { this.nombre = nombre ; this.Bar ( ) ; } }            público principal (){ Foo foo ( L "Goo" ); Sistema :: MessageBox ( foo . ToString ()); }    

Declaraciones de funciones

Otra característica sorprendente de TScript son las declaraciones de funciones [4] , que utilizan parámetros de salida en lugar de valores de retorno y proporcionan soporte sintáctico para estos. La función estándar en muchos lenguajes procedimentales, siguiendo a Algol, tiene la forma:

[ tipo de retorno ] < nombre de función >([ variable de entrada ], ...) .

En TScript este patrón se ha cambiado a la forma:

< nombre de la función >([ variable de entrada ],... :[ variable de salida ],...) .

Este cambio ha hecho dos cosas: primero, permite múltiples variables de salida y, segundo, cambió la declaración de retorno a una función de manejo de errores.

Al permitir que las funciones tengan una lista de variables de entrada y salida separadas por la columna de semitonos :), se modificó el flujo normal de cómo se llaman y se utilizan las funciones. Esto elimina parte de la necesidad de usar punteros de referencia para devolver múltiples variables, algo que es común en C/C++, y se evita el uso de referencias en la mayoría de los demás lenguajes de programación, lo que obliga a usar una estructura o matriz para devolver múltiples valores.

La segunda cosa notable acerca de las convenciones de llamada es que ahora todas las funciones tienen un propósito de manejo de errores integrado similar al de C++ y Java. En TScript, dado que todas las funciones devuelven un error, la declaración return opera de manera similar a la declaración throw. Por ejemplo, la declaración:- return error = "Have an error message"; finalizará la función y devolverá el mensaje de error. Alternativamente, la declaración en blanco;- return; finalizará la función pero no devolverá ningún error.try{}catch(){}throw new Exception()

Ejemplo de valores de retorno múltiples

public TextExtent ( WString texto : entero ancho , entero alto ) { texto = texto.Fragment ( L " \ n " ) ; para ( alto = ancho = 0 ; alto < texto.largo ; alto ++ ) { si ( ancho < texto [ alto ] .largo ) ancho = texto [ alto ] .largo ; } }                          

Notación taquigráfica

Para mayor comodidad, TScript ofrece una función abreviada para llamar en situaciones en las que solo se devuelve una variable. Esta notación de sustituirá el caso de . Esta notación corta evita que el código de llamada detecte errores y estos se devolverán automáticamente al código de llamada principal.function(: variable); for variable = function();

Manejo de errores

En muchos otros lenguajes, el manejo de errores se realiza mediante el uso de excepciones . TScript utiliza un proceso similar de manejo de errores, [5] aunque ligeramente diferente. TScript tiene una variable de error global similar al tradicional errno en C, aunque la variable de error en TScript es capaz de contener tanto un código de error como un mensaje de error detallado.

En muchos lenguajes que utilizan la sintaxis, el error se devuelve a través de la declaración catch y esto puede hacer que el flujo operativo del código sea complicado en situaciones en las que algunos errores son recuperables. TScript utiliza la notación que permite que el código de llamada filtre el error, lo que potencialmente permite recuperarse del error y volver a la operación normal, o devolver el error a su propia función de llamada.try{...}catch(...){...}if(...){...} else{...}

Ejemplo de errores de devolución y manipulación

función (){ devolver error = -1 ;}   public main (){ if ( ! function ()){ if ( error != -1 ) return error ; } Sistema :: MessageBox ( L "función ejecutada correctamente" ); }         

Vinculación en tiempo de ejecución

C++ admite la sobrecarga de funciones , lo que permite que las funciones tengan el mismo nombre y se diferencien por sus parámetros de entrada. Esto genera un problema en TScript al admitir variables de tipo flexible , ya que no hay forma de saber cuál es el tipo de una variable hasta que se ejecuta el software.

Para solucionar este problema, TScript se ha escrito con enlaces en tiempo de ejecución, es decir, cuando la función particular llamada depende del tipo de las variables cuando se llama a la función.

Esta es una táctica inusual que tiene algunos beneficios adicionales. En primer lugar, significa que no es necesario declarar funciones antes de usarlas; por ejemplo, en C++, dos funciones pueden llamarse entre sí, como y . En esta situación, es necesario crear un prototipo de para que la función pueda llamarla. La vinculación en tiempo de ejecución de TScript significa que las funciones se pueden declarar en cualquier orden sin necesidad de crear prototipos. Esto puede hacer que escribir código sea mucho más fácil para los programadores con menos experiencia, lo que les permite centrarse en la lógica del software y no en los requisitos del lenguaje.void Foo(){ Bar();}void Bar(){Bar();}Bar()Foo()

La vinculación en tiempo de ejecución también permite que el lenguaje admita la codificación en tiempo de ejecución con métodos como AddMethod y AddDefinedVariable . Esto permite que los programas TScript se escriban a sí mismos. Por ejemplo, al utilizar la interfaz SOAP , el WSDL remoto se codificará en la biblioteca de scripts, lo que permitirá que las funciones que contiene se llamen como si se hubieran codificado en tiempo de diseño. Además, también es posible escribir código que pueda aprender por sí mismo y escribir nuevas funciones cuando lo necesite.

Vinculación dinámica de bibliotecas

TScript se encuentra entre un pequeño grupo de lenguajes de programación que proporcionan la funcionalidad de cargar y vincular dinámicamente bibliotecas compartidas existentes. Java a través de su JNI y VB6 son otros dos lenguajes de programación que permiten escribir código que cargaría una biblioteca de terceros y se ejecutaría a través de su interfaz nativa. Esto le da a TScript la capacidad de utilizar una gran cantidad de funcionalidades preexistentes y código escrito en diferentes lenguajes y esto se puede hacer sin necesidad de cambiar la interfaz de la biblioteca compartida o de compilarlo con el código fuente.

Gestión de la memoria

TScript utiliza la encapsulación de clases estándar de C++ para asignar y desasignar recursos de memoria. Esto significa que toda la memoria asignada se libera cuando la variable que la contiene se destruye y se opera de manera diferente al modelo de recolección de elementos no utilizados de Java o al modelo de conteo de referencias de los lenguajes .NET .

Los recursos del sistema operativo, como archivos, sockets y claves de cifrado, se administran a través de un mecanismo de conteo de referencias similar a .NET, por lo que se liberarán tan pronto como no haya variables que contengan sus valores.

Seguridad proactiva

Con la capacidad de cargar bibliotecas compartidas existentes, el script puede acceder a todos los privilegios otorgados al usuario que lo ejecuta. Para protegerse contra códigos maliciosos, se requiere que se otorguen a cada script todos los recursos más allá de la asignación de memoria básica. Esto también incluye la capacidad de usar cuadros de mensajes para solicitar al usuario acceso de lectura y/o escritura a cualquier archivo o directorio, o usar la conexión a Internet.

Esta arquitectura de seguridad está diseñada para permitir la ejecución de scripts de forma similar a JavaScript y al mismo tiempo habilita la utilidad de lenguajes de scripting más potentes como Perl .

Referencias

  1. ^ Ekky Software Archivado el 29 de septiembre de 2012 en Wayback Machine
  2. ^ Documentación de ayuda de TScript TVariable
  3. ^ Documentación de TScript: Variables definidas
  4. ^ Documentación de TScript: Declaraciones de funciones
  5. ^ Documentación de TScript: Manejo de errores

Enlaces externos