Documentation:Changes history

From The BABEL Development Site
Revision as of 17:54, 7 September 2010 by Jafma (talk | contribs)

The BABEL Development System has gone through a lot of changes and versions since its beginnings in 1996. Actually, it was not called BABEL, but NEXUS, until August 2000, where the main tools for programming language and operating system neutrality were developed. Older documentation than May 2001 is only available through papers and the main author's thesis, but a thorough record of changes was kept from then on. This section reproduces that record in reverse chronological order (dates are recorded in spanish format: day-month-year):


  • Two applications are now shipped with the free version of BABEL v0.39 Endymion: the kit of simulation of robot+laser and a new kit of simulation of robot+laser+reactive navigator.
  • The new free version of babel includes all the generators developed up to date, indicating which are supported, and which deprecated.


  • Now the "-RemoteMandatory" option for the module makes that the module polls until all the needed remote objects exist in the naming service, eliminating the necessity of a launching order. In the EM, that option has been checked by default.


  • A new structure of directories for the generation of the BABEL tools from their sources has been established, intended for multiplatform development. BABEL can be generated now with gcc, VC6.0 or VC2008, and VB6 for the graphical tools.


  • Now ACE51+TAO11 has been integrated into BABEL, thus CORBA does not have to be installed separately.
  • The MRPT robotics library [1] is also integrated and can be included in each module if the programmer wishes it.
  • Some minor problems with the shutdown aracne atom and the shutdown process has been fixed. A new atom is included: terminateservice, which terminates a service.


  • A new release has been issued in which some code generators have been deprecated and a better management of their list is implemented.


  • A new automatic verification procedure has been included before generating code, which allows the programmer to detect and fix some common mistakes in the use of codification, improving the portability of codifications. This has involved a change in the scripts.


  • Now the author of the module is mandatory, and the date of the module is automatically filled in.


  • A new option is added to export external files.


  • A new experimental generation platform has been added: JAVA+OPENORB


  • A new aracne atom has been added to request (blocking) services dynamically bound.
  • Several minor bugs fixed.


  • A new type of external (passive) is added: external files that are simply copied to the target generation directory.


  • A new command line parameter is added: -KeyInputAtEnd. If present, makes the module to stop requesting a keyboard input just before ending.
  • The aracne atom for requesting services has been enhanced with two new parameters for returning the timestamp set by the requested service at its end.
  • The aracne atom rt-suspend has varied its parameters. Any compilation of the old atom will produce an error.


  • Added a help file for aracne atoms.
  • Now, projects for VC++ are generated in such a way that they permit the programmer to use the Debug configuration.


  • Three new aracne atoms added: getcurrenttime, difftimes, readcommandlineargument


  • Now services and modules priorities can be handled and have an effect.


  • A new aracne atom is added: get-timestamp, which gets the time when the last communication (service request to the current service, f.e.) leaved the requester.
  • Now, when an event defined in another module is sent or received (by an event handler), a special reference is added to the dependencies of the module, indicating a dependency with the external module, but not with any particular service of that module.


  • Changed characteristics: added UNPRIORITIZED, dropped GRAPHICAL and WEB.
  • By default, all requests are served concurrently, except for non-REENTRANT services, which block until no other service is being served and while they are running prevent any other service from running.
  • Now, the logging of "begins" and "ends" includes in its extra field the identifier of the thread and its priority, for distinguishing among concurrent requests of the same service.


  • Released the new BABEL v3.0 and fixed a bug that hanged the module when executed without the -TimeLog option, due to an internal semaphore being used without creating it first.


  • A new version of all the tools of BABEL has been developed. The aspect of the Module Designer interface has been adjusted to the Aracne specification, and the Transformer utility has been integrated in the module designer.
  • New possibilities: to create new directory when generating code; to save and save as.


  • A new feature has been added to modules: the "-TimeLog" command line parameter (by default, it is not set). If it appears, the module will dump a log file with relevant time information that can be read by the BABEL Application Manager. This feature works even if services run concurrently.
  • A bug has been fixed: when a new beta event is introduced in the SendEvent Wizard, and the "Add to event list" checkbox is checked, the name of the event was not added correctly to the list.


  • Now, the close, CTRL+C, etc. events directed to the console application of a module, are catched and produce a graceful shutdown.


  • A new command-line option is available: -h or -help or -?, which shows the possible command-line options of a module, and their default values.


  • A new error message is included in the graphical interface when any parameter of an assistant macro involves "#", ",", "(" or ")". This

has been done for avoiding errors, since macros cannot include those characters in their parameters except for particular cases.


  • A new command line option has been added: -ApplicationName "<name>". Now, each ICE module can be given an application name, and will register itself in the nameserver with its own name together with that application name. Also, it will retrieve remote objects from the nameserver using the names of those objects together with the same application name. This gives the programmer a facility for executing the same module several times, in the context of different applications.
  • Applications names can be up to 255 characters.


  • A bug has been fixed: it were not possible to send events from the Module Code (Global code) of the module since the event consumer needed for that was defined as a private member of the implementation class and therefore the code in the Module Code had not access to it.


  • Now it is possible to pass to any module the argument "-RemoteMandatory" in order to fail if there is any remote object reference that cannot be found in the NamingService (the programmer is responsible for checking in the code whether he/she can use those nul references if -RemoteMandatory is not set).


  • Fixed a bug that avoids visual C to read correctly .DSP files if they contain filenames with spaces.


  • The limitation to 160 characters in length on reading lines from .ice files has been eliminated, now lines are not limited in size.
  • The application memorizes the last directory from which an external object was retrieved, and uses it as the next directory location for more external objects.


  • Fixed a bug that led to pasting the macros at the wrong insertion point.
  • Created the BABEL_ROOT environment variable to hold the directory where babel_designer is. The directory $(BABEL_ROOT)\Libs holds the common library and source files for the modules.


  • Now it is necessary to define the variable BABEL_ROOT in the system to point to the directory where it is the BABEL_designer program.
  • Some new macros for communication through local channels (communication with other programs running in the same machine).


  • Now it is possible to compile and link from BABEL, outputting the errors generated by MSVC.
  • A new tool has been added for extracting external code entries from .DSP files.


  • Now both the external data and code are entered as external objects, and the appropriate entries in the project file are included for automatically inserting them in it.
  • Added a new menu option: tools, with a first tool: interpret compacted text, which allows the user to take a compacted string and decompact it.


  • Now the external data is managed as a list of external objects (path+filename).


  • BABEL has been modified to cope with two versions of the ACETAO compiler.
  • Now the edit code buttons and labels are updated with a hint on the language that each piece of code must be written on, depending on the code generation options of the module.


  • The time restriction specification is now possible in any piece of code with timing requirements.


  • Now it is mandatory to enter valid descriptions to generate code or reports. This is an experimental service.
  • Fixed bug that led to generating many carrier return erroneously.


  • Not in all the cases the proper conversion of plain text to HTML was invoked. Now, it is.


  • Now characters "<" and ">" can be used in comments and they appear well in the html report.


  • A bug has been fixed when the "update" command in the general info panel is pressed and any field is left blank (an application exception was produced).


  • The assistant has been activated in the "Global code" text edition, in order to allow the programmer to perform service calls to other modules from the routines written in the global code.


  • Now the HTML code generated translates correctly accented vocals and 'ñ'.


  • Fixed a bug in the code of the main.cpp file of the modules in order to assure that when the monitor services are launched the variable "endorb" is false.
  • Improved the HTML generation for considering end-of-line and tabulators.


  • Now the TABS characters in the text editor are not replaced by sequences of spaces.
  • Changed descriptions of module, groups and services to formatted texts with possibly ends of line. A new format generated for BABEL's files. This allows to use any character in a description.


  • Descriptions' max length has been incremented up to 1024 characters. Names and descriptions are not allowed if they contain '(', ')', '[' or ']'.


  • New feature: automatic generation of HTML web pages for the modules, and inclusion of new information into the module (authoring, etc).


  • Fixed an error in the code of the code generation of BABEL that led to generate more module dependencies than needed.
  • Changed the assistant macros file to reduce the number of spaces that generate when expanding macros.


  • Now the "non-handled beta event" warning message is suppresed by default. To enable it, a new command line option has been added to the modules: -BetaEventWarning 0 (or 1)


  • Added a "shutdown" macro to BABEL in order to shut down gracefully the module from inside.
  • Added a "disable" and "enable" macros to BABEL in order to suspend/resume the thread in charge of the main menu of the module from inside.


  • Recovered the "deactivate menu" option in order to disable the menu and the keyboard input (useful for using the keyboard from the module). As a consequence, once the menu is disabled, the module will not terminate until the user closes its console window, and that is not a gracefully termination.


  • Added an automatic setting of the "-ORBDottedDecimalAddresses" when the user forgets to include it in the command line.
  • Fixed a excessive amount of CPU time consuming due to the use of "work_pending + perform_work" loop instead of "orb->run()" method. As a consequence, the "deactivate the menu" option of the keyboard menu of the module has disappeared.


  • Fixed a run-time error when the code editing window is minimized (due to the fact that it attempts to resize the text editor control, and that produces an error since the size of the window does not exist when it is minimized).


  • Now every module can become a beta event producer. It maintains a list of

generated beta events (their codes and symbolic names -identifiers-). These event definitions

are included in the .idl file of the module for their use in other modules -for receiving
those events at other modules-. The macro for sending events has been wizardded in order
to send events from the list. The list can be updated from this macro, manually, or
from events generated in other modules -for the case several modules generate the same
event-. BABEL generates code appropriately for dealing with the definitions of beta
events (including external IDL or corbaC files).


  • Now the codes of beta events can be entered as alphanumerical strings, and not
only as numerical values. This does not change the format of .ice files, and allows to
refer to beta event codes declared as named constants in public files.


  • The .ice files have changed their format to the one called "FF200601", which
includes the possibility of holding "Global code" -the one dumped on the implementation
body file in the ACETAO_CPP case-. BABEL designer has been updated to allow the programmer
to edit the global code of the module, and to generate the proper code for ACE_TAO_CPP.
The BABEL Transformer application has been updated with the new format accordingly.


  • The current version of BABEL is capable of loading a module from a file that
contains some info previous to the ICE module definition.


  • The errors when shutting down modules have been fixed: they occurred for declaring
some static global corba objects, instead of declaring them as local object of the main


  • A minimization button has been added to BABEL main window.

  • A bug has been fixed in the extraction of the CORBA parameters of the methods
generated by tao_idl, that prevented from obtaining correct parameters when a method had
a name that was a substring of other method's name.


  • Assistant macros have been added for using critical zones.


  • The problem associated to a variable created by a macro of the
assistant (the one for real-time suspend) is fixed.

  • A new wizard is included in the "request service" macro for requesting services
from the same module.

  • The preending and postending code are now executed properly, that is,
before and after all the pendant requests of services of the module are 
finished, respectively.

  • The code generated for the main and implementation files has been
restructured for compiling efficiency.

  • Now the shutting down process waits for the monitor threads to
finish before shutting down.


  • Now, every permanent service tests for connections termination each pass of the
automatic loop.

  • Added two assistant macros: one for checking if the connection to other objects
is being shutting down (moment to finish everything), and another for effectively returning
from a server routine.

  • The code generated for the main c++ file is now changed to reflect
transient ice objects and gracefully finalization of modules (although the
latter does not completely works due possibly to some error of ACE+TAO).	


  • If it is desired to generate the implementation files but the
stage of compiling the IDL of the module is skipped, BABEL shows a warning.

  • The option for shutting down gracefully is functional now: it

destroys the object (by calling orb->shutdown) and calls its destructor.

  • A destructor is now generated for the implementation corba object,
containing both the pre-ending and the post-ending code of the module.

  • The code generated automatically for implementing infinite loops
in permanent services is now translated to the ACETAO_CPP_code.jms macroscript

file. This has been possible by adding a new type of JMSKeyword to the

macroscript object: conditional-repetition.


  • Now the code generated by BABEL for ACE+TAO and C++ creates an executable that connects the
object to CORBA and then opens a text menu that allows to control the object (shut down it, for example).

  • Now (in C++) in the services that are PERMANENT (even when they are not MONITOR) it is not necessary
to write code for an infinite loop: BABEL generates that code automatically. Thus, the code that is
written for a routine of a PERMANENT service automatically is inserted into a "while (1)" c++ loop.
  • A new mode of edition of the input and output data of a service has been added: the automatic
mode. When it is enabled (by default), both set and discard buttons are disabled, and everything that
is typed in the text panel automatically is updated in the input or output data of the service. When

it is disabled, the set and discard buttons recover their original behaviour.

  • The icon for saving ICE modules has been changed for clarity.

  • Now it is possible to enter empty lines, spaces, etc. in the input and output variables
of a service, and the code generation process gets rid of them.


  • Before, there was impossible to generate code in a different disk drive than
that where BABEL was installed (BABEL did not find its macroscript files). Now this is fixed.

  • The generate button opens now a output directory dialog box that allows the user
to select from different disk drives, and to cancel the generation if desired.

  • BABEL was not capable of calling the TAO_IDL compiler if the path of the IDL
file to compile contained spaces (in that case the IDL file name was missinterpreted as
a set of names -delimited by the spaces- by the operating system). Now this has been


  • NOTE: Environment variables to be set before using tao_idl compiler and the VC++ compiler:

PATH=%PATH%;(path of the ACE_Wrappers\bin\release>;<path of the ACE_Wrappers\bin);

(path of the Visual C++ 98\bin>;<path of the VisualStudio\MSDev98\Bin)

  • In addition, in the VIsual C++ environment, "tools" menu, "Options" option, "Directories" panel,
"executable files" part, the following directories must be added for compiling with the tao_idl:

(path of the ACE_Wrappers\bin\release>) (path of the ACE_Wrappers\bin)


  • The visual space for entering descriptions in BABEL has been augmented.

  • The assistant for "real-time suspend" now takes correctly the
last parameter (there was an error in the assistant.jms file).

  • The assistant is visible in the "External data" button.

  • The SAVE module dialog displays a confirmation message if the
file being used for saving already exists. The LOAD module dialog does not
permit to open inexistent files.

  • Now the parameter for the macro of OutputText accepts both text
and "cout-able" variables; in fact, it accepts complete sequences for the
C++ "cout" statement, for example: "this is pass number " << npass. 

NOTE: the use of " for delimiting text strings is now mandatory.

For achieving this change, the Macroscript class has been updated to 

accept both " and ' as delimiters of the parameters of the macros.

  • Changed completely the compilation options for ACE+TAO,CPP. Now
they include the possibility of activating or skipping each of the stages
of the code generation process. In addition, the old options of forcing
the TAO_IDL to return success and stopping on any of its errors are maintained.

  • Changed the compilation options for ACE+TAO+CPP for including the
possibility of forcing the success of the TAO_IDL compiler, in spite of it
to fail or to work correctly.

  • The definitions of complex IDL types, such as arrays, must be
included in the "Pre-definitions" button of the ICE module panel, they
cannot be entered directly (without a previous typedef) in the input or
output data of any service. (This is the ACE+TAO fault).

  • When the Cacel button is pressed on the "open" or "save" dialogs,
the function "PideFichero" returns false correctly. Before, the function only

returned false if the file name was kept empty, but not if the cancel button

was pressed.

  • When the compilation options are cancelled, the code generation
process is canceled too.

  • Now the code generation process stops (when the compilation options
are set to stop on any error of the TAO_IDL compiler) whenever the spawn of
TAO_IDL does not return "0", displaying both the errno and the result of spawn.


  • When the "generate..." button is pressed, it asks for the compilation
options. Compilation options are a new feature of the compiler objects that

allow them to parameterize some of their work. In the ACE+TAO+CPP case, these

options include forcing the call to the IDL compiler and stopping on any

error of it (displaying the errno variable).

  • Now the code generation button first checks if the code generation
parameters correspond to an implemented compiler object. If not, an error is

displayed. For the same reason, the compiler objects are now derived from

an abstract class that includes a method for checking if a given ICE module

(its code generation parameters) can be compiled with a given compiler.

  • The errors caused by not opening files correctly are fixed. They
appeared because testing for whether a ifstream/ofstream was not open
correctly was done erroneously: by checking whether the Xfstream was 0, and
not by checking the is_open() method of the Xfstream.

  • The warning "only default case in switch statement" generated by
the compiler when an ICE module has no beta event handler routine has been
suppressed. (In that case, the "switch" statement is not generated.)

  • The "external data" introduced through the "external data" button
on the ICE Module panel have been changed to be placed at the beginning of
the implementation header file, instead of the implementation body file. This
has been done for allowing the programmer to define global variables of external
types in the private part of the implementation header file.

28-5-01 and before

  • Released Babel v1.0. Automatic generation of code for the particular
case of C++, Visual C++ 6.0 (with and without MFC support), and ACE+TAO.