Documentation:Changes history

From The BABEL Development Site

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):


  • Released BABEL v0.39.1, the same version as v0.39 but with some bugs fixed and a different way of dealing with external libraries, more consisten with the BABEL specification: now the MRPT, OpenCV and wxWidget are no longer included in the download file, and must be installed in the machine that generates the code if they are needed. Also, they must be included in the "non-portable design" part of the module in order for the generator to work properly.


  • Released BABEL v0.39.0, the free version of the BABEL Development System for Win32 platforms that supports the following code generators: Endymion (W32+ACE51TAO11+VC++2008), Hyperion (W32+ACE51TAO11+VC++6), Iapetus (JAVA+OpenORB -experimental-), and Cryo (HTML report generator). It is also shipped with the MRPT toolkit, the WxWidget libraries and the OpenCV libraries, and includes three sample applications. Apart from the new generators, the system is used the same as the Hyperion 0.38 version. IMPORTANT NOTES: Uncompress the files in a path that does not contain spaces or special characters. Do not use spaces or special characters in any of the path you create for generating modules. It has been tested in Windows NT, 2000, XP and Vista. In the latter you must download the msvbvm50.dll and register it in the system with the command line program regsvr32, or maybe just copy it into the BABEL base directory. If you find any other dll missing, the procedure is the same. It has ben tested with VC++6.0 in Win NT and XP. It has been tested with VS2008 Professional and Express in Win XP and Vista.


  • 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.


  • Released BABEL v0.38.0, the most intensively tested configuration of the BABEL tools in our research laboratory: Hyperion (C++, ACE5.1+TAO1.1, Win32). With this version, you can design, implement, and test robotic applications with all the functionality of BABEL.This compilation also includes the MRPT robotic programming library and the ACE5.1+TAO1.1 free implementation of CORBA as the communication platform. The downloadable file contains an installation manual in PDF format. The MRPT version included in this file is v0.5.1. For more information on updating that version to new MRPTs, please follow the left-side link to the MRPT site [1].
  • Released separately the robotics simulation test kit, a zip file containing several modules to test the BABEL free version. These modules simulate a mobile robot and permit the user to command simple movement actions and produce log files. IMPORTANT NOTE: Some problems have been found with this kit in the newer versions of BABEL (v0.39 and later). It is recommended to not use this kit in those versions: they contain their own kits appropriately tested.
  • Thanks to Cipriano Galindo for writing the BABEL Installation Manual, a brief installation manual for the most common configuration of the BABEL tools.


  • Now ACE51+TAO11 has been integrated into BABEL, thus CORBA does not have to be installed separately.
  • The MRPT robotics library [2] 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 function.


  • 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 fixed.


  • 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-05-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.