Mirror

What's DelphiScript ? (Views: 100)


Problem/Question/Abstract:

There are tools which support DelphiScript. Or other tools are interpreter which implement sort of pascal-scripting. What's the aim of these tools and where you can find it.

Answer:

Maybe you have noticed, that I put the article in the OLE category. So in a short way, DelphiScript is an OLE scripting language, like VBScript or JScript. Depending on the history, the language root is Standard Pascal and not ObjectPascal.

Extensions

There are extensions which supports OLE objects and the OLE variant type. It then deals with all Standard Pascal types as OLEVariant, or it does support them, e.g. not supported are pointers (of course), files, set operators (replaced with procedures), records (but records are replaced by untyped arrays). Therfore you can declare the type of a variable or parameter, it is allowed, but has no effect. Another extension supports exception handling the same way as OPascal does.
Bref, all variables are of the OleVariant type.

Comparison

Delphi Script and VBScript are case insensitive while JavaScript is case sensitive.
Delphi Script is strongly typed while VBScript and JavaScript is loosely typed. This means variable declaration is mandatory in Delphi Script, but variable declaration is not needed in VBScript and JavaScript.
Delphi Script uses square brackets to access data property and round brackets for function calls. VBScripts and JavaScript do not make this distinction. For example, the following statements are equivalent:
(Delphi Script) sum := Data1.Value[0] + tq_min(Data2.Value[0],0);
(VBScript) sum = Data1.Value(0) + tq_min(Data2.Value(0),0)
(JavaScript) sum = Data1.value(0) + tq_min(Data2.Value(0),0);

A Tool Example

The easiest way to begin scripting is to use a recorder. Later you can edit the script and so on. For example DelphiScript support is built into AQTest: www.automatedqa.com
It's a highly recommended tool that comes out of the box with 19 profilers.  The two that we are interested in most, is "listing unused units", and "identifying who calls what method" are included. (The method call profiler display its info through a diagram. fantastic cool.;)
So let's get back to DelphiScript(DS). DS code can be read by Delphi.
DS supports almost all Standard Pascal operators and routines, minus those that deal with type conversion or I/O, type conversion are always implicit.
Interesting is, there are units. But as DS is meant for scripting and selfstanding routines, units are simply groupings of scripts in one file. That means, no unit structure (interface, implementation etc.) is possible.
  
1. Concrete Implementation Dream Scripter

Dream Scripter supports Delphi Script language - the subset of Object Pascal. Before execution the script is compiled to native processor code and that's why Delphi Script is much faster than other scripting languages. Another cool feature - you don't need to have any scripting engine or extra DLLs on the user computer to use Delphi Script.  

Dream Scripter is written entirely with Delphi. You don't need any extra DLLs or OCXs. Source is compatible and tested with Delphi 3, Delphi 4, Delphi 5, C++ Builder 3, C++ Builder 4, and C++ Builder 5
http://www.dream-com.com/scripter.html

2. Conrete Implementation PasScript

PasScript is an interpreter of a vast subset of the OP (ObjectPascal) language which supports all OP data types except interfaces.
This subset was extended by the Poly data type that allows you to operate with dynamic data structures (lists, trees, and more) without using pointers and apply Pascal language in the Artificial Intelligence data domain with the same success.
But what are differences between PasScript and another Pascal scripting engines?
PasScript supports more wide subset of the OP language. You can use such concepts as units, default parameters, overloaded routines, open arrays, records, sets, pointers, classes, objects, class references, events, exceptions, and more in a script. PasScript syntax is 100% compatible
with OP.
All calling conventions register, pascal, stdcall, cdecl, safecall are supported Script-defined handlers for Windows messages Script-defined callback functions.
For example, you can define WindowProc function directly in a script More flexible importing Delphi classes. You can use instances of any Delphi class in a script create new instances of a Delphi class in a script and destroy them create new PasScript class in a script which inherits a Delphi class. More wide possibilities regarding the event handlers. You can create script-defined event handler for Delphi defined event and vice versa. You can pause, resume and terminate scripts and PasScript allows you to control an OLE Automation server.
The TPasScript component allows you to embed the interpreter into your Delphi, Kylix or C++ Builder application, so you can extend and customize the application without having to recompile it. http://users.ints.net/virtlabor/

One of the latest invention is to use OP as a script language for ASP.NET:
Recognizing Delphi as a script language works like this:
The first step in getting support for ASP.NET is making sure it recognizes Delphi as a scripting language, and knows how to invoke the Delphi for .NET compiler for the various ASP file types.

ASP.NET will look for a web.config file in the root of whatever virtual directories you set up for IIS. Here are the contents of this file for using Delphi as a scripting language with ASP.NET.

The first step in getting support for ASP.NET is making sure it recognizes Delphi as a scripting language, and knows how to invoke the Delphi for .NET compiler for the various ASP file types.
ASP.NET will look for a web.config file in the root of whatever virtual directories you set up for IIS. Here are the contents of this file for using Delphi as a scripting language with ASP.NET.


configuration>
  system.web>                            
    compilation debug="true">
       assemblies>
          add assembly="DelphiProvider" />
       assemblies>
       compilers>
          compiler language="Delphi" extension=".pas"
            type="Borland.Delphi.DelphiCodeProvider,DelphiProvider" />  
       compilers>
    compilation>
  system.web>
configuration>

more on that on: http://bdn.borland.com/article/0,1410,28974,00.html

<< Back to main page