TScript - TScript
![]() | |
| Utvikler (er) | Ekky Software |
|---|---|
| Stabil utgivelse | 1.4 / 1. juli 2012
|
| Skrevet inn | C ++ |
| Operativsystem | Windows og Linux |
| Type | Skriptspråk |
| Tillatelse | Gratis (proprietær) |
| Nettsted | www |
TScript er et objektorientert innebygd skriptspråk for C ++ som støtter hierarkiske forbigående typede variabler (TVariable). Hoveddesignkriteriet er å lage et skriptspråk som kan grensesnitt med C ++, transformere data og returnere resultatet. Dette gjør at C ++ - applikasjoner kan endre funksjonaliteten etter installasjon.
Hei verdenseksempel
Den grunnleggende "Hei verden!" TScript -eksempel.
CTScript ts;
ts.SetParameter(CTScript::SOURCE_STRING,0,TEXT("main(){")
TEXT(" System::MessageBox(L\"Hello World!\");")
TEXT("}"));
ts.ExecuteStaticMethod();
TVariables
Standardvariabelen kan dannes som faste data som en boolsk, heltall eller desimal og en variabel lengdevariabel som en ASCII -streng, bred tegnstreng eller en binær streng. Datatypen kan brukes til å definere variabel eller typen kan eksplisitt deklareres, så for eksempel koden - variable myInteger = 0;vil opprette en variabel som heter myInteger og tildele den verdien null. En heltallstype kan også deklareres som - Integer myInteger;og standardverdien blir satt til null.
TVariable er hierarkiske og ligner veldig på XML- , JavaScript- og PHP -variabler.
Den TVariable typen er også forbigående ettersom et heltall kan endres til en AString ved å tilordne den en strengverdi eller ved å kaste variabelen til en AString. For eksempel, etter at en heltallsvariabel er opprettet og brukt, kan den tilordnes på nytt ved å likestille den med en AString.
TVariables kan også brukes til å holde en rekke TVariables. Når en gyldig variabel er opprettet, kan matrisindeksens abonnementsnotasjon brukes til å transformere den til en matrise, så for eksempel koden - variable list = {0,2,4,6};vil opprette en matrise med fire elementer. Den TVariable typen for "list.type" vil være den for en struktur og hvert element av list[0].typevil være et heltall.
Klasse i TScript ligner på array i hvordan TVariable håndterer dem, men bruker strenger som array -skrifter. For eksempel vil koden - opprette en strukturert variabel hvor listen. Mandag er sann og liste. Tirsdag er usann. I den opprinnelige C ++ - koden er strukturerte TVariable - elementer tilgjengelige i C ++ - eller enten eller i den opprinnelige koden.
variable list = {"Monday" => true, "Tuesday" => false};list["Monday"];list.Mondaylist["Monday"]
Definerte variabler (klasser)
TScript støtter hierarkiske variabler og kan lagre både primitive og komplekse variabler innenfor den samme variabelstrukturen. Dette fjerner ethvert krav til enhver unik forskjell mellom primitiver og strukturerte data, og gjør derfor klassestrukturen til en logisk gruppering av funksjonalitet i stedet for datalagringstype.
TScript implementerer begreper om arv og kodeinnkapsling gjennom definerte variabler. For eksempel viser følgende kodebit en definerte variabler Foo og Bar som støtter en konstruktør.
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());
}
Funksjonserklæringer
Et annet slående trekk ved TScript er funksjonserklæringene, som bruker utdataparametere i stedet for returverdier , og gir syntaktisk støtte for disse. Standardfunksjonen på mange prosedyrespråk, etter Algol, har formen:
- [ returtype ] < funksjonsnavn > ([ inndatavariabel ], ...) .
I TScript er dette mønsteret endret til skjemaet:
- < funksjonsnavn > ([ input -variabel ], ...: [ output -variabel ], ...) .
Denne endringen har gjort to ting, først tillater den flere utgangsvariabler og for det andre endret den returoppgaven til en feilhåndteringsfunksjon.
Ved å tillate funksjoner å ha en liste over input- og output -variabler som er atskilt med semikolonnen ":", endret den normale strømmen av hvordan funksjonen kalles og brukes. Dette fjerner noe av behovet for å bruke referansepekere for å returnere flere variabler som er vanlig i C/C ++, og bruk av referanser i de fleste andre skriptspråk er faktisk forhindret, noe som tvinger bruk av en struktur eller matrise til å returnere flere verdier.
Den andre merkbare tingen om kallekonvensjonene er at nå har alle funksjonene et integrert feilhåndteringsformål som ligner på og for C ++ og Java. I TScript siden alle funksjoner returnerer en feil, fungerer retursetningen på samme måte som kast -setningen. For eksempel setningen:- return error = "Have an error melding"; vil avslutte funksjonen og returnere feilmeldingen. Alternativt den tomme uttalelsen;- retur; vil avslutte funksjonen, men ikke returnere noen feil.
try{…}catch(…){…}throw new Exception()
Eksempel på flere returverdier
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;
}
}
Stenografi notasjon
For enkelhets skyld tilbyr TScript en stenografifunksjon i situasjonen der det bare er en returnert variabel. Denne notasjonen vil erstatte saken med . Denne korte notasjonen forhindrer ringekoden i å fange opp eventuelle feil, og de vil automatisk gå tilbake til foreldrekallekoden.
function(: variable); for variable = function();
Feilhåndtering
Feilhåndtering på mange andre språk gjøres ved bruk av unntak . TScript bruker en lignende feilhåndteringsprosess, men litt annerledes. TScript har en global feilvariabel som ligner på den tradisjonelle errno i C, selv om feilvariabelen i TScript er i stand til å inneholde både en feilkode og en detaljert feilmelding.
På mange språk som bruker syntaksen returneres feilen via fangstuttalelsen, og dette kan gjøre operasjonsflyten for koden vanskelig i situasjoner der noen feil kan gjenopprettes. TScript bruker notasjonen som lar ringekode filtrere feilen, potensielt gjenopprette fra feilen og gå tilbake til normal drift, eller returnere feilen til sin egen ringefunksjon.
try{...}catch(...){...}if(...){...} else{...}
Eksempel på retur- og håndteringsfeil
function(){return error = -1;}
public main(){
if(!function()){
if(error != -1) return error;
}
System::MessageBox(L"function executed correctly");
}
Kjøringstid
C ++ støtter funksjonsoverbelastning , som gjør at funksjoner kan ha samme navn mens de differensieres av inngangsparametrene. Dette forårsaker TScript et problem mens du støtter løse typevariabler , ettersom det ikke er mulig å fortelle hva typen variabel er før programvaren kjøres.
For å imøtekomme dette problemet har TScript blitt skrevet med kjøring i løpetid. Dette er når den spesifikke funksjonen som kalles, er avhengig av typen variabler når funksjonen kalles.
Dette er en uvanlig taktikk som har noen ekstra fordeler. Først betyr det at det ikke er nødvendig å deklarere funksjoner før de brukes, for eksempel i C ++ kan to funksjoner kalle hverandre, som og . I denne situasjonen må behovene prototypes for å kunne kalle det. TScripts kobling for kjøretid betyr at funksjonene kan deklareres i hvilken som helst rekkefølge uten å måtte prototype. Dette kan gjøre skriving av koder mye lettere for mindre erfarne programmerere, slik at de kan fokusere på logikken til programvaren og ikke kravene til språket.
void Foo(){ Bar();}void Bar(){Bar();}Bar()Foo()
Run-time linking gjør det også mulig for språket å støtte run-time-koding med metoder som AddMethod og AddDefinedVariable . Dette gjør at TScript -programmer kan skrive selv. For eksempel, når du bruker SOAP -grensesnittet, vil den eksterne WSDL bli kodet inn i skriptbiblioteket, slik at funksjonene i kan kalles som om de var kodet på designtidspunktet. I tillegg er det også mulig å skrive kode som kan lære seg selv, skrive nye funksjoner når den trenger det.
Koble biblioteker dynamisk
TScript er blant en liten gruppe skriptspråk som gir funksjonalitet til dynamisk å laste inn og koble til eksisterende delte biblioteker. Java gjennom JNI og VB6 er to andre skriptspråk som gjør det mulig å skrive kode som vil laste et tredjepartsbibliotek og kjøre gjennom sitt opprinnelige grensesnitt. Dette gir TScript muligheten til å bruke et vell av eksisterende funksjonalitet og kode skrevet på forskjellige språk, og dette kan gjøres uten behov for å endre det delte bibliotekets grensesnitt eller å bli kompilert med kildekoden.
Minnehåndtering
TScript bruker standard C ++-klasseinnkapsling for å tildele og fjerne allokering av minne ressurser. Dette betyr at alt tildelt minne frigjøres når variabelen som inneholder det, blir ødelagt og operert annerledes enn Garbage Collection -modellen til Java eller referansetellingmodellen for .NET -språk.
Operasjonssystemressurser som filer, sockets og krypteringsnøkler administreres via en referansetellemekanisme som ligner på .NET, så de vil bli utgitt så snart det ikke er noen variabler som inneholder verdiene.
Proaktiv sikkerhet
Med muligheten til å laste inn eksisterende delte biblioteker, kan script få tilgang til alle privilegier som er gitt til brukeren som utfører det. For å beskytte mot ondsinnet kode må alle ressurser utover den grunnleggende minnetildelingen gis til hvert skript. Dette inkluderer også muligheten til å bruke meldingsbokser for å be brukeren, lese og/eller skrive tilgang til en fil eller katalog eller bruke Internett -tilkoblingen.
Denne sikkerhetsarkitekturen er designet for å tillate kjøring av skript på lignende måte som JavaScript, samtidig som det muliggjør nytten av kraftigere skriptspråk som PERL .
