This release brings ready-made predicates for reading and writing of XML, stronger text processing on atoms and terms, an easier to program access to blackboard data, long awaited term vectors (index-accessed resizable arrays of terms), timer predicates for fine grained user or process interaction, merge sort on lists, deterministic meta call, a set of predicates for client-server distributed processing, and again some improvements due to customer suggestions which we gratefully acknowledge.
The ExamplePrograms now include the use of JavaScript from within MINERVA.
The documentation on extending MINERVA statically and dynamically underwent a major cleanup.
Input, output, conversion of XML terms to and from Prolog terms. XML as description language matches well with MINERVA as language to implement the semantics of XML terms. Persistent data in XML format provide a convenient way of integrating other XML-aware software components. Predicates offered:
read_xml/2/3, write_xml/1/2, term2xml/3, term2xmldoc/3, xml2term/3, xmldoc2term/3
The text processing library was extended with a few new predicates for frequently used tasks and comprises now:
atom_chars/2, atom_codes/2, atom_concat/3, atom_concat/2, atom_length/2, atom_number/2, atom_lower/2, atom_upper/2, char_code/2, number_chars/2, number_codes/2, parse_atom/2/3, sub_atom/5, write_atom/2, writeq_atom/2
Blackboards, i.e. fast hashed named tables for working data, were extended for more programming flexibility. You can dynamically add/delete single items or whole named data sets. You can create independent name spaces. Offered predicates are now:
bb_clear/1, bb_clear/2, bb_contains/2, bb_contains_key/2, bb_create/1, bb_get/3 , bb_get/4, bb_put/3, bb_put/4, bb_remove/2, bb_keys/2, bb_elements/2
A term vector is a dynamically resizable index-accessed array of terms. It allows efficient indexed access which is clumsy to implement e.g. with lists. It allows destructive assignment of elements. This data structure is very convenient for efficient handling of possibly large well-structured tables of data. Offered predicates are:
tv_add/2, tv_create/1, tv_get/3, tv_list/2, tv_set/3, tv_setsize/2, tv_size/2
A simple programming interface to use multi-threading for asynchronous timing. Timing is an essential element e.g. for fine grained user interfaces and for real time systems. The complexity of multi-threading is abstracted away with the notion of listeners for registered callbacks. Predicates are:
timer_close/1, timer_create/2, timer_is_active/1, timer_start/2, timer_stop/1
Sorts lists without removing doubles.
merge_sort/2
For software engineering reasons added was a meta call that executes its goal only once and throws an exceptions if the goal fails. This construct is needed for robust programs in situations where logic failure does not make sense, e.g. processing of callbacks from user interaction.
fcall/1
A high level programming interface for communication between distributed MINERVA processes over Internet sockets. Allows to send and receive fully structured MINERVA terms e.g. for cooperating agents, delegation, multi-client and/or multi-server systems.
Allows to run server side MINERVA processes in daemon mode.
Please note the relation to XML handling (see above) and asynchronous timing (see above).
client_start/3, client_stop/1, listener_start/3, listener_stop/3, send/2, send/2, server_start/4, server_stop/1
An example of the integration of client side JavaScript into client side MINERVA was added upon customer request. This is sometimes convenient to drive existing JavaScript programs from MINERVA, or, on Microsoft operating systems, COM components. The example given is very simple to understand and compatible across Netscape and Internet Explorer.
Please also re-read the Release Notes of previous versions of MINERVA. You have feedback on this release or requests for the next? Please let us know!
| scroll to top |
|