Proteus (programming language)
Proteus is a fully functional, procedural programming language created in 1998 by Simone Zanella. Proteus incorporates many functions derived from several other
languages: C, BASIC, Assembly, Clipper/dBase;
it is especially versatile in dealing with strings, having hundreds of dedicated functions; this makes it one of the richest languages for text manipulation.
Proteus owes its name to a Greek god of the sea, who took care of Neptune's crowd and gave responses; he was renowned for being able to transform himself, assuming different shapes. Transforming data from one form to another is the main usage of this language.
Introduction
Proteus was initially created as a multiplatform system utility, to manipulate text and binary files and to create CGI scripts. The language was later focused on Windows, byadding hundreds of specialized functions for: network and serial communication, database interrogation, system service creation, console applications, keyboard emulation, ISAPI scripting.
Most of these additional functions are only available in the Windows flavour of the interpreter, even though a Linux
version is still available.
Proteus was designed to be practical, readable and consistent.
Its strongest points are:
- powerful string manipulation;
- comprehensibility of Proteus scripts;
- availability of advanced data structures: arrays, queues, stacks, bit maps, sets, AVL trees.
Language features
At first sight, Proteus may appear similar to Basic because of its straight syntax, but similarities are limitedto the surface:
- Proteus has a fully functional, procedural approach;
- variables are untyped, do not need to be declared, can be local or public and can be passed by value or by reference;
- all the typical control structures are available ;
- new functions can be defined and used as native functions.
Access to advanced data structures takes place by
using handles, i.e. integer numbers returned by item creation functions.
Type declaration is unnecessary: variable type is determined by the function applied – Proteus converts on the fly
every variable when needed and holds previous data renderings, to avoid performance degradation caused by
repeated conversions.
There is no need to add parenthesis in expressions to determine the evaluation order, because the language is fully functional.
Proteus includes hundreds of functions for:
- accessing file system;
- sorting data;
- manipulating dates and strings;
- interacting with the user
- calculating logical and mathematical expressions.
and lookup values.
Two types of regular expressions are supported:
- extended ;
- basic.
The functional approach and the extensive library of built-in functions allow to write very short but powerful scripts;
to keep them comprehensible, medium-length keywords were adopted.
The user, besides writing new high-level functions in Proteus, can add new functions in C/C++ by following the
guidelines and using the templates available in the software development kit; the new functions can be invoked
exactly the same way as the predefined ones, passing expressions by value or variables by reference.
Proteus is an interpreted language: programs are loaded into memory, pre-compiled and run; since the number of
built-in functions is large, execution speed is usually very good and often comparable to that of compiled programs.
One of the most interesting features of Proteus is the possibility of running scripts as services or
ISAPI scripts.
Running a Proteus script as a service, started as soon as the operating system has finished loading, gives many
advantages:
- no user needs to log in to start the script;
- a service can be run with different privileges so that it cannot be stopped by a user.
or to avoid that the operator inadvertently closes a utility.
The ISAPI version of Proteus can be used to create scripts run through Internet Information Services and is
equipped with specific functions to cooperate with the web server.
For intellectual property protection Proteus provides:
- script encryption;
- digital signature of the scripts, by using the development key ;
- the option to enable or disable the execution of a script by using the key of the customer.
the large number of built-in functions, together with the examples in the manual, keep low the learning curve.
The development environment includes a source code editor with syntax highlighting and a context-sensitive guide.
Proteus does not need to be installed: the interpreter is a single executable that
does not require additional DLLs to be run on recent Windows systems.
Synopsis and licensing
The main features of this language are:- fully functional, procedural language;
- multi-language support: Proteus is available in several languages ;
- no data types: all variables can be used as integer numbers, floating point numbers or strings; variables are interpreted according to the functions being applied – Proteus keeps different representations of their values between calls, to decrease execution time in case of frequent conversions between one type and the other;
- no pre-allocated structures: all data used by Proteus are dynamically allocated at execution time; there are no limits on: recursion, maximum data size, number of variables, etc.;
- no operators: Proteus is a completely functional language – there are no operators; thus, there is no ambiguity when evaluating expressions and parenthesis are not needed;
- large library of predefined functions: Proteus is not a toy-language, it comes with hundreds of library functions ready to be used for working on strings, dates, numbers, for sorting, searching and so on;
- advanced data access, pipes, Windows sockets, serial ports: in the Windows version, Proteus includes hundreds of system calls which are operating system-specific;
- clear and comprehensible syntax: the names of the library functions resemble those of corresponding functions in C, Clipper/Flagship and Assembly; by using medium-length keywords, Proteus programs are very easy to understand;
- native support for high-level data structures: arrays, queues, stacks, bit maps, sets, AVL trees are already available in Proteus and do not require additional code or libraries to be used;
- ISAPI DLL and Windows Service versions: Proteus is available as a Windows service or as an ISAPI DLL ;
- user libraries: it is possible to write user defined functions in separate files, and include them inside new programs; UDFs can be referenced before or after the definition; it is also possible to write external functions in Visual C++ and invoke them from a Proteus script;
- native support for Ms-Dos/Windows, Macintosh and Unix text files ;
- three models for dates, with functions to check them and to do calculations according to gregorian calendar;
- epoch setting for 2-digit-year dates;
- support for time in 12- and 24-hour format;
- support for simple and extended regular expressions, in all versions;
- intellectual property protection, by using digital signature and cryptography;
- extensive library of functions to write interactive console programs.
protected by a USB dongle. At the moment, is available as a Windows or Ubuntu package and is distributed by
.
Example programs
Hello World
The following example prints out "Hello world!".CONSOLELN "Hello World!"
Extract two fields
The following example reads the standard input and prints out the first two fields separated by "|":CONSOLELN TOKEN "|" TOKEN
Proteus scripts by default work on an input file and write to an output file; the predefined identifier L gets the
value of every line in input. The function TOKEN returns the requested item of the string; the third parameter represents
the delimiter. String concatenation is implicit.
The same program can be written in this way:
H = TOKNEW
CONSOLELN TOKGET "|" TOKGET
TOKFREE
In this case, we used another function, which builds the list of the tokens in the line; this is more
efficient if we need to access several items in the string.