PROSE 0.9.1 Release Notes

PROSE is a cross-platform programming environment designed to simplify the development of small and large-scale networked applications. It will comprise of a scripting language which compiles into bytecode and an execution engine that interprets that bytecode. The execution engine will be designed to communicate easily with other PROSE engines across the network. The inter-networking capabilities will be made available at the bytecode level via virtual nodes in a hierarchical object tree (the 'nexus').

This is a pre-alpha POC release, containing a fully functional assembler and disassembler for an evolving assembly language (PAL), which compiles into a platform-independent bytecode. A bytecode interpreter (the PROSE engine) is also included in this release. At this time there is no scripting language.

PROSE can be compiled and run on a variety of UNIX and UNIX-like systems including:

  • Oracle Solaris
  • Red Hat Linux
  • SuSE
  • Ubuntu
  • FreeBSD
  • MacOS
  • DJGPP (MS-Windows/DOS)
  • RaspberryPi (ARM)

The PAL assembly language and associated bytecode has been improved in this release to handle tree arrays, as well as other new features, which are discussed later on. PAL instructions are described in section 5 man pages which are distributed with this release, and HTML versions of these man pages can be viewed online.

This version of PROSE has added the following PAL instructions:

itree/defDefine new imploded tree array object
itree/bdefDefine new imploded tree array object and set psTreeRoot
itree/localDefine new imploded tree array with local scope
itree/blocalDefine new imploded tree array with local scope and set psTreeRoot
itree/staticDefine new imploded tree array with static scope
itree/bstaticDefine new imploded tree array with static scope and set psTreeRoot
itree/globalDefine new imploded tree array with global scope
itree/bglobalDefine new imploded tree array with global scope and set psTreeRoot
itree/addrAddress an object inside an imploded tree array
itree/setSet variable inside an imploded tree array
itree/xconvConvert exploded tree array to imploded tree array
 
xtree/defDefine new exploded tree array object
xtree/bdefDefine new exploded tree array object and set psTreeRoot
xtree/localDefine new exploded tree array with local scope
xtree/blocalDefine new exploded tree array with local scope and set psTreeRoot
xtree/staticDefine new exploded tree array with static scope
xtree/bstaticDefine new exploded tree array with static scope and set psTreeRoot
xtree/globalDefine new exploded tree array with global scope
xtree/bglobalDefine new exploded tree array with global scope and set psTreeRoot
xtree/addrAddress an object inside an exploded tree array
xtree/setSet variable inside an exploded tree array
xtree/iconvConvert imploded tree array to exploded tree array
 
reg/jmpltJump if less than
reg/jmpleJump if less than or equal to
reg/jmpgtJump if greater than
reg/jmpgeJump if greater than or equal to
reg/jsrltBranch if less than
reg/jsrleBranch if less than or equal to
reg/jsrgtBranch if greater than
reg/jsrgeBranch if greater than or equal to
 
attr/addrCopy attribute value as node pointer
reg/rollRoll groups of registers left or right
 

TREE ARRAYS

A powerful new construct that allows for the creation and manipulation of arrays of nodes that are organised hierarchically in exactly the same way as the nexus. Tree arrays may be 'imploded', whereby the tree has its own root whose pointer is stored in an attribute, or 'exploded' where the tree shares the same root as the nexus and is just another branch like any other.

Bytecode instructions for defining, addressing and setting variables within tree arrays make it simple for higher level languages to implement hash tables or chained hash tables.

See the ps_tree(5) man page for further details.

POINTER DE-REFERENCING

A new bytecode instruction 'attr/addr' reduces the steps required to de-reference a pointer variable. See the attr_addr(5) man page.

REGISTER COMPARISON

As well as branching on equality or non-equality, bytecode instructions now exist for branching if less than, less than or equal to, greater than, or greater than or equal to. See the reg_jmpeq(5) man page.

REGISTER ROLL

A new bytecode instruction 'reg/roll' makes it possible to roll values between sets of registers. See the reg_roll(5) man page.

MODULE API

The module API has been cleaned up, introducing jump tables to make it simpler to define module entry-points and supported data types.

The 'vattr' parameter has been added to module configuration files to indicate if a syntax has virtual attribute entry-points. This removes the need to pre-load a module just to determine if it supports virtual attributes.

BOOLEAN TYPE

The 'psBoolean' variable type has been added to allow for 'TRUE' or 'FALSE' values.

NEW ATTRIBUTES ON ROOT NODE

Compiler flags have been added to the top-level '.prose' object using the new attributes 'psEnableExtraDebug', 'psRegScan' and 'psWithMemWatch'.

OPCODES OPTIMISED

Opcodes used by PAL bytecode instructions have been optimised such that there is much greater use of opcode modifiers, freeing up many opcodes for future use.

BUG FIXES

Release 0.9.1 is a minor update to 0.9.0 to fix a core dump that occurred when 'reg/conv' encounters a legitimate processing error, and to update the 'prism' parser to one produced by bison 2.7.

FUTURE RELEASES

Future releases will introduce virtual nodes and branches in the nexus that will allow access to external data using the object manipulation commands already available. This will include navigating filesystems, opening/closing files, querying DNS, opening network connections and manipulating databases. Virtual nodes and branches will be extendable using modules to permit any kind of data to be represented through the nexus.

Also missing at this time is any glimpse of the future PROSE scripting language. This will have to wait until the PAL bytecode provides enough of the required functionality.

COMPATIBILITY

While PROSE remains in pre-alpha, it is not possible to guarantee PAL source or binary compatibility between releases.

PROSE binary files compiled by earlier versions of PROSE will no longer execute on version 0.9.0 or later engines and will need to be recompiled. This is due to many changes to opcodes as described in the OPCODES OPTIMISED section above.

To learn more about the PROSE Programming Language, visit http://prose.sourceforge.net.

PROSE is released with detailed manual pages that describe how PAL operates, and how each instruction is used. These manual pages can be read using the man command, for example man pal_intro or man pal_commands, or from the SourceForge website at http://prose.sourceforge.net/man.


Copyright © 2013, Mark R. Bannister <cambridge@users.sourceforge.net>, all rights reserved.
The contents of this web page may not be reproduced without the author's written permission.
PROSE is distributed free of charge under conditions of the GNU Public Licence <http://www.gnu.org/licenses/gpl.txt>.

Visit SourceForge Support This Project