9 IDL Compiler Release Notes
9.1 IC 2.5.1, Release Notes
9.1.1 Improvements and new features
- A new backend is added : C-server
This back-ends can be used to create servers, compatible to c-clients, and erlang genserver clients. The code produced is a collection of functions for encoding and decoding messages and a switch that coordinates them. These parts can be used to create other servers as well. All functions are exported to header files.
Own Id: OTP-2713
- The C-client functionality is improved
Own Id: OTP-2712
- The static buffer used for input/output is removed along with the
memset
function that initiated it. The new client is at least 20-30 procent faster.
- The internal structure of the client is changed. The client fuctions are now a collection of encoding and decoding message functions ruled by a specific call function. While the basic client generated is a synchronous client, the exported functions support the implementation of threaded asynchonous clients.
- The static buffer used for input/output is remove along with the
memset
function that initiated it. The new client is at least 20-30 procent faster.
- The code generated is generally improved, warnings are (almost) eliminated, while no unidentified variable errors occur.
- The IDL types unsigned shorts, shorts, floats are supported now.
- All generated functions are exported in client header files..
9.1.2 Changes in compiler usage and code generation.
- A new option is added for the C-server back-end :
c_server
.
- A new option is added :
scoped_op_calls
.
9.1.3 Fixed bugs and malfunctions
- A bug oneway operations on erl_corba and erl_genserv that caused en exit due to internal interface error is fixed.
- A bug on oneway operations on c_genserv back-end that caused several variables to be unidentifined is fixed.
9.1.4 Incompatibilities
- Interface change on the C-client
The client functions are called with two extra variables, a pointer to an array of char - used for storage and an integer - the array size
- The IDL type
attribute
is disabled, due to some implementation problems.
9.1.5 Known bugs and problems
- The same as in version 2.1
9.2 IC 2.1, Release Notes
9.2.1 Improvements and new features
- The compiler now provides more in depth information (outprints) when errors occur.
In some cases the compiler stops compiling due to an abnormal exit or incompatible input. In this situation, a "fatal error" may occur but the compiler will generate information explaining the problem.
Own Id: OTP-2565
9.2.2 Changes in compiler usage and code generation.
- No changes since version 2.0
9.2.3 Fixed bugs and malfunctions
- No changes since version 2.0
9.2.4 Incompatibilities
- The same as in version 2.0
9.2.5 Known bugs and problems
- The same as in version 2.0
9.3 IC 2.0, Release Notes
9.3.1 Improvements and new features
- The IDL compiler is now a separate application and is longer a part of Orber.
- Pragma handling implementation.
Pragma ID, prefix and version are implemented to agree with CORBA revision 2.0. The compiler accepts and applies these on the behavior of the compiled code.
In this implementation, pragmas are accepted by the parser and applied by the use of ic_pragma functions.
All IFR-identity handling now passes through pragma table. As pragma handling in OMG-IDL is affecting the identity of an ifr-object, all identity handling and registration is now controlled by pragma functions. A hash table called "pragmatab" contains vital identity information used under compilation.
There two major pragma categories :
The pragma effect is the same for both scope and basic pragma rules.
- Normal pragmas, are used in the code where basic definitions and statements appear.
- Under certain circumstances, ugly pragmas can now appear inside code, parameter lists, structure definitions ... etc.
It is quite challenging to allow ugly pragmas, but the effects of unlimited ugly pragma implementation on the parser can be enormous. Ugly pragmas can cause the parser source code to become time consuming and user unreadable.
In order to allow ugly pragmas but not destroy the current structure of the parser, the use of ugly pragmas is limited. Multiple pragma directives are allowed inside parameter lists, unions, exceptions, enumerated type, structures... as long as they are do not appear between two keywords or between keywords and identifiers.
When compiling, an IFR-identity must be looked up several times but by storing identity aliases inside the pragma table there this an increase in both speed and flexibility.
Own Id: OTP-2128
- Code for interface inheritance registration for the IFR registration code .
Inherited interfaces can now be registered as a list of interface descriptions by entering code for inherited interface registration under new interface creation. This is achieved by correcting the function reg2/6 and adding two more functions, get_base_interfaces/2 and call_fun_str/2
Own Id: OTP-2134
- IFR registration checks for included IDL files.
All top level definitions (with respect to the scope) - modules, interfaces, constants, types or exceptions - found in an IDL file are either defined inside the compiled IDL file or inside included files. By having an extended registration of all top level definitions it becomes possible to simply produce checks for those included by the current IDL file. A function call include_reg_test/1 is added in all OE_* files that checks for IFR-registration on all included IDL files. The code for that function is added inside the OE_* file, while the function is called under OE_*:OE_register/0 operation.
Own Id: OTP-2138
- Exception registration under IFR-operation creation.
By entering code for exception registration under operation creation, the exceptions of an operation can be checked now. This is done by correcting the function get_exceptions/4 and adding two more functions, excdef/5 and get_EXC_ID/5 ( the last two are cooperating with the first one and all three are defined in the module "ictk" ).
Own Id: OTP-2102
- New back-end to IDL compiler : Plain Erlang.
The new back-end just translates IDL specifications to Erlang module calls. No pragmas are allowed.
Own Id: OTP-2471
- New back-end to IDL compiler : generic server.
A new back-end that translates IDL specifications to a standard OTP generic server.
Own Id: OTP-2482
- New back-end to IDL compiler : c client generation
A new back-end that translates IDL specifications to a C API for accessing servers in Erlang.
Own Id: OTP-1511
- All records in generated files reveal own Erlang modules.
In Erlang related back-ends, every structure which generates definition form is a record, (such as union, struct, exception.... ). These records are held in a generated Erlang files which contain functions that reveal record information.
The Erlang file which contain these functions is named after the scope of the record (similar to the generated module and interface files).
Three functions are available :
Own Id: OTP-2473
- tc/0 - returns the record type code,
- id/0 - returns the record id,
- name - returns the record name.
- Changes in compiler usage and code generation.
Own Id: OTP-2474
- New compilation flags. New flag be ( = back-end ) which is used by the compiler to choose back-end. Default back-end is set to erl_corba.
- Stub files have an extra function oe_dependency/0 indicating file dependency. This helps the user to determine which IDL files should to be compiled beside the compiled file.
- The IDL generation for CORBA is changed so standard gen_server return values can be used from the implementation module. The change is compatible so that old values remain valid.
Own Id: OTP-2485
- It's now possible to generate an API to a CORBA object that accepts timeout values in the calls in the same manner as gen_server. The option to the compiler is "timeout".
Own Id: OTP-2487
9.3.2 Fixed bugs and malfunctions
- Empty file generation problem is fixed. When the IDL module definition did not contain constant definitions, the generated stub file for that module definition was empty. After checking the module body, these files will not be generated anymore.
9.3.3 Incompatibilities
- Changes in generated files.
Stub-files generated by the compiler had prefix "OE_" and those used by Orber had also a register/unregister function called "OE_register"/"OE_unregister" and a directive "OE_get_interface" passed to the gen_server. This made it difficult/irritating to use, for example call to the register function in Orber would appear as shown below:
This is changed by using the prefix "oe_" instead for "OE_" for the above. A registration call in Orber is now written:
- 'OE_filename':'OE_register'().
Own Id: OTP-2440
- oe_filename:oe_register().
9.3.4 Known bugs and problems
- No checks are made to ensure reference integrity. IDL specifies that identifiers must have only one meaning in each scope.
- Files are not closed properly when the compiler has detected errors. This may result in an
emfiles
error code from the Erlang runtime system when the maximum number of open files has been exceeded. The solution is to restart the Erlang emulator when the file error occurs.
- If inline enumerator discriminator types are used, then the name of the enumeration is on the same scope as the name of the union type. This does not apply when the discriminator type is written using a type reference.
- Parser failure with syntax error when "standard" preprocessor directives such as #ifndef and #include (not pragmas) are used in other than top level scope.
9.4 Previous Release Notes
For release notes on previous versions see the release notes on Orber (version previous to 1.0.3).