[RPL/2] RPL/2 4.0.0.prerelease.9

BERTRAND Joel joel.bertrand at systella.fr
Mer 28 Jan 08:58:19 CET 2009


	Hello,

	After a long time and a lot of internal modifications, I announce the 
last prerelease before 4.0.0. Tree is only open for regressions and new 
allocation mechanism. All feedbacks are welcome.

	I'm trying to rewrite documentation with all features (but in French, I 
don't have time enough to translate in english, thus, any helps for 
translation are welcome ;-) )

	I shall try to rewrite as soon as possible RPL/2 web pages (maybe with 
a documentation wiki.).

	New features (and bugs :

- an estimation of future stack elements is added to avoid some costly 
memory allocations. This function has a positive impact on execution speed;
- PSHPRFL and PSHPRFL have been added;
- RPL/2 can be built on Solaris 64 bits with some minor scripts 
alterations. See README for more explanations;
- MTXSTATUS intrinsic is added;
- YIELD intrinsic is added;
- ERRM is fixed. In some cases, ERRM uses some uninitialized pointers;
- SHARED and PRIVATE intrinsics have been added. A shared variable is a
static variable that is shared by multiple threads;
- '->' intrinsic is improved. All object copies have been avoided;
- -n flag is added to catch HUP signal. stderr and stdout are redirected
to a file, stdin is redirected to /dev/null when control process is killed;
- a mutex is added to each object (before this modification,
RPL/2 used a global mutex and performances in multithreaded programs 
were very poor.);
- ALARM is now interruptible;
- both PUT and PUTI intrinsics are improved and do not copy list and 
table when nombre_occurrences == 1;
- COPY intrinsic is added. Argument (that can be pointed from some 
objects) is replaced by a new copy of itself;
- memory leak is fixed in sequenceur(). It only occurs when an execution 
error is caught from interactive mode;
- mutexes have been added (CRMTX, CLRMTX, MTXLOCK, MTXUNLOCK);
- new mutex type is added;
- profile statistics have been added. See -P option;
- major bug is fixed in analyse_syntaxique();
- new SQL type is added;
- due to a trouble in libpq in multithreaded context, SQL intrinsic is 
split in three new intrinsics : SQLCONNECT, SQLQUERY and SQLDISCONNECT. 
Please note that all programs that worked with old SQL intrinsic can now 
work with SQLQUERY. With all new programs, you can open a real 
connection to databases;
- NRPROC is added. This new intrinsic is used to catch error from child
process. Without NRPROC, any errors returned by child process cause
main process to abort;
- SPAWN is added. This new intrinsic is used to launch a new thread 
(DETACH starts a new process). There are no mutexes in RPL/2 because all 
spawned process use specific context. Nevertheless, shared variables and 
associated mutexes should be added;
- -D flag and DAEMONIZE intrinsic have been added;
- REPEAT, THEN, ELSE and ELSEIF intrinsics are rewritten to be more 
efficient;
- autoconf script is modified to handle mysql and postgresql on non 
standard directories;
- -t flag is fixed ('\0' is missing...);
- SWI and SEND pipes have been modified to be more robust on systems 
where getpid() can return (pid_t) -1 or (pid_t) -2 value;
- major bug is fixed in REPEAT intrinsic. Only occurs in compiled mode;
- all but jump variables are removed from source. All signal handlers 
now use encapsulated variables and signals are caught by thread;
- major bug is discovered in ->LCD. Both LCD-> and ->LCD have been fixed;
- NEWPLANE is added;
- LINE is added;
- DGTIZ is added;
- major bug is fixed in ROW-> intrinsic (comes from new garbage collector);
- lot of multiprocessing related bugs have been fixed; That was a huge 
work but it's done. Data integrity is now respected during transmission 
(POKE, SEND and SWI);
- ITRACE is added. This intrinsic is only used to debug internal 
structures and should not be used in regular programs;
- SWISTATUS is written;
- WFACK is written;
- rplcore files are now able to handle compilation errors;
- rplcore files are now able to handle evaluation and interruption errors;
- SORT can now be used on table;
- tables can now be sent by POKE and SEND instrinsics;
- software interrupts do not inherit IFERR controls;
- LOGGER intrinsic is added;
- All WF* intrinsics but WFSOCK are made interruptible;
- ISWI intrinsic is added. Current interrupt is marked as 'interruptible';
- tables can be used with SAME intrinsic;
- minor bug is fixed in recherche_variable(). Only occurs when an error
is caught;
- external functions can now be used in expressions;
- major bug (deadlock) is fixed in WFPOKE intrinsic;
- some mistakes have been fixed under Solaris;
- major bug is fixed in RETURN intrinsic (only occurs when evaluation 
and program modes are mixed);
- major bug (dead lock) is fixed in gestion_processus.c;
- major bug is fixed in WFPROC;
- rplc, rpllink and mkrplso manpages are added;
- rpltags tool and manpage are added;
- WFLOCK is fixed;
- RPL/2 kills now all process on error;
- major bug (segfault) is fixed in REMOVE intrinsic.

	Regards,

	JKB


Plus d'informations sur la liste de diffusion RPL2