Interface Definition Language Avatar
  1. OMG Specification

Interface Definition Language — Closed Issues

  • Acronym: IDL
  • Issues Count: 33
  • Description: Issues resolved by a task force and approved by Board
Closed All
Issues resolved by a task force and approved by Board

Issues Summary

Key Issue Reported Fixed Disposition Status
IDL4CSP-3 The specification shouldn't preclude vendors from adding additional methods to a class or struct IDL4-CSHARP 1.0a1 IDL4-CSHARP 1.0 Resolved closed
IDL4CSP-2 All generated classes and structs should implement IEquatable IDL4-CSHARP 1.0a1 IDL4-CSHARP 1.0 Resolved closed
IDL4CSP-1 A sequence member in an IDL struct should map to a read-only property IDL4-CSHARP 1.0a1 IDL4-CSHARP 1.0 Resolved closed
IDL4CSP-10 System.Collections.IList interface provides limited functionality IDL4-CSHARP 1.0a1 IDL4-CSHARP 1.0 Resolved closed
IDL4CSP-5 Do the copy and all values constructors make deep copies or shallow copies? IDL4-CSHARP 1.0a1 IDL4-CSHARP 1.0 Resolved closed
IDL4CSP-4 Typos and Inconsistencies IDL4-CSHARP 1.0a1 IDL4-CSHARP 1.0 Resolved closed
IDL4CSP-6 Resolution for name clashes with the Discriminator property name is invalid IDL4-CSHARP 1.0a1 IDL4-CSHARP 1.0 Resolved closed
IDL4CSP-7 Interface argument modifiers IDL4-CSHARP 1.0a1 IDL4-CSHARP 1.0 Resolved closed
IDL4CSP-14 Missing option in @csharp_mapping annotation to document mapping to standalone constant classes IDL4-CSHARP 1.0a1 IDL4-CSHARP 1.0 Resolved closed
IDL4JAV-1 Package prefix specified at the IDL to Java translator IDL4-Java 1.0a1 IDL4-Java 1.0 Resolved closed
IDL4JAV-5 Constants mapping is incomplete/broken IDL4-Java 1.0a1 IDL4-Java 1.0 Resolved closed
IDL4JAV-3 Provide additional flexibility in language mapping IDL4-Java 1.0a1 IDL4-Java 1.0 Closed; No Change closed
IDL4JAV-4 Naming Conventions and Transformation Rules IDL4-Java 1.0a1 IDL4-Java 1.0 Resolved closed
IDL4JAV-2 Address the CORBA specific mapping[s] IDL4-Java 1.0a1 IDL4-Java 1.0 Resolved closed
IDL4JAV-13 Typos and Inconsistencies IDL4-Java 1.0a1 IDL4-Java 1.0 Deferred closed
IDL4JAV-7 Typo fixes IDL4-Java 1.0a1 IDL4-Java 1.0 Deferred closed
IDL41-9 Clarify and perhaps expand where annotations can be applied IDL 4.0 IDL 4.1 Resolved closed
IDL42-10 The description of "simple template types" is incorrect IDL 4.1 IDL 4.2 Resolved closed
IDL42-9 IDL should have aliases/typedefs for integer that disambiguate representation size IDL 4.1 IDL 4.2 Resolved closed
IDL42-15 The text in the "Scope" section provides history rather than scope IDL 4.1 IDL 4.2 Resolved closed
IDL42-13 Building block Templates, Annotations, and Extended Types appear in the wrong location IDL 4.1 IDL 4.2 Resolved closed
IDL42-3 Missing and inconsistently named annotations IDL 4.1 IDL 4.2 Resolved closed
IDL42-2 IDL Lacks Support for 8-bit Signed/Unsigned Integers IDL 4.1 IDL 4.2 Resolved closed
IDL42-1 Rule 174 requires space after opening curly brace IDL 4.0 IDL 4.2 Resolved closed
IDL42-7 Miscellaneous typos and readability improvements IDL 4.1 IDL 4.2 Resolved closed
IDL41-5 The IDL4 spec syntax for bitsets departed from the one used in DDS-XTYPES IDL 4.0 IDL 4.1 Resolved closed
IDL41-6 IDL should support empty structures IDL 4.0 IDL 4.1 Resolved closed
IDL41-3 DL 4.0 Grammar Errors - formal/2016-04-02 IDL 4.0 IDL 4.1 Resolved closed
IDL41-8 Unnecessary paragraph in section 7.4.1.4.4.1 IDL 4.0 IDL 4.1 Resolved closed
IDL41-1 Declarator specification in structures overly strict IDL 4.0 IDL 4.1 Resolved closed
IDL41-11 Kleene star missing from rules 65 and 67 IDL 4.0 IDL 4.1 Duplicate or Merged closed
IDL41-13 Map parameter types too restrictive IDL 4.0 IDL 4.1 Resolved closed
IDL41-17 Bitmask default size IDL 4.0 IDL 4.1 Resolved closed

Issues Descriptions

The specification shouldn't preclude vendors from adding additional methods to a class or struct

  • Key: IDL4CSP-3
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    The generated code for classes and structs should be allowed to override common functions such as GetHashCode and ToString.

    It should also be allowed to implement additional interfaces in addition to IEquatable (see IDL4CSP-1).

    It should also be allowed to add additional methods, such as Clone or copy constructors.

  • Reported: IDL4-CSHARP 1.0a1 — Sun, 22 Mar 2020 20:14 GMT
  • Disposition: Resolved — IDL4-CSHARP 1.0
  • Disposition Summary:

    Allow adding additional methods and interfaces in generated types

    This resolution adds explicit phrasing that allows vendors to add additional methods and interfaces to generated types.

    The resolution of this issue shall be applied after the resolution of IDL4CSP-2.

  • Updated: Mon, 29 Mar 2021 12:23 GMT

All generated classes and structs should implement IEquatable

  • Key: IDL4CSP-2
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    All constructed data types should implement IEquatable:

    The example in section 7.2.4.3.1 would now look as follows:

    public class MyStruct : IEquatable<MyStruct> {
        public MyStruct() {...}
        public MyStruct(int a_long, short a_short, int[] a_long_array) {...} 
        public int a_long { get; set; }
        public short a_short { get; set; }
        public int[] a_long_array { get; set; }
    
        public bool Equals(MyStruct other)
            => a_long == other.a_long 
                 && a_short == other.a_short 
                 && a_long_array.Equals(other.a_long_array)
    }
    
  • Reported: IDL4-CSHARP 1.0a1 — Sun, 22 Mar 2020 20:13 GMT
  • Disposition: Resolved — IDL4-CSHARP 1.0
  • Disposition Summary:

    Add IEquatable interface to all generated classes

    This resoultion mandates the implementation of the IEquatable interface in all generated classes.

  • Updated: Mon, 29 Mar 2021 12:23 GMT

A sequence member in an IDL struct should map to a read-only property

  • Key: IDL4CSP-1
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    The spec indicates that all members of a class or struct are mapped to read-write properties, as shown in 7.2.4.3.1:

    public int a_long { get; set; }
    public short a_short { get; set; }
    public int[] a_long_array { get; set; }
    

    However sequence members (IList) should map to read-only properties.

    public IList<int> a_long_sequence { get; }
    

    Rationale: C# best practices recommend this change: https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2227?view=vs-2019

    For example, a vendor may decide to use an implementation of IList that allows accessing the memory directly (via unsafe code or Span) to optimize its serialization. If end users are allowed to completely replace the list, they may inadvertently provide a different IList| implementation that the vendor code can't serialize optimally or can't handle at all.

    The same could apply to Maps.

  • Reported: IDL4-CSHARP 1.0a1 — Sun, 22 Mar 2020 20:10 GMT
  • Disposition: Resolved — IDL4-CSHARP 1.0
  • Disposition Summary:

    Making sequence members read-only properties

    This resolution transforms properties resulting from mapping IDL sequence and maps struct members into read-only properties, following the C# best practices described in the issue.

    It also introduces setters for Unions, where setting a sequence or a map would need to also update the discriminator value.

  • Updated: Mon, 29 Mar 2021 12:23 GMT

System.Collections.IList interface provides limited functionality

  • Key: IDL4CSP-10
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    Sequences are currently mapped to System.Collections.IList<T>, which enables vendors to roll out their own sequence implementation while maintaining compatibility with other list implementations users may use in application code. Unfortunately, unlike the interfaces we chose in language mappings like Java, IList lacks support for mechanisms to handle the internal sequence that are important to implement certain patterns. For example, IList lacks methods like AddRange(), which are necessary to implement patterns to repopulate a collections (see https://docs.microsoft.com/en-us/visualstudio/code-quality/ca2227?view=vs-2019 and IDL4CSP-1).

    As discussed in the IDL WG at the September meeting, it would be desirable to map Sequences to an Omg.Types.ISequence<T> interface that extends System.Collections.Generic.IList<T> and adds all the properties and methods in the System.Collections.Generlic.List<T> class.

  • Reported: IDL4-CSHARP 1.0a1 — Wed, 30 Sep 2020 09:37 GMT
  • Disposition: Resolved — IDL4-CSHARP 1.0
  • Disposition Summary:

    Define a more complete interface for Sequence Types

    This resolution introduces Omg.Types.ISequence, an interface to represent sequence types that is more complete than the generic System.Collections.Generic.IList<T>.

    Omg.Types.ISequence provides the same methods and constructors as the standard C# System.Collections.Generic.List<T>.

    The resolution of this issue requires applying the resolution of IDL4CSP-1 first.

  • Updated: Mon, 29 Mar 2021 12:23 GMT

Do the copy and all values constructors make deep copies or shallow copies?

  • Key: IDL4CSP-5
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    The current version of the specification does not specify whether copy constructors and all value constructors do deep copies or shallow copies. The specification should indicate what's expected from an implementation to avoid problems. such as those highlighted here.

  • Reported: IDL4-CSHARP 1.0a1 — Tue, 15 Sep 2020 18:00 GMT
  • Disposition: Resolved — IDL4-CSHARP 1.0
  • Disposition Summary:

    Introduce Clarifications about Copying Behavior in Constructors and Setters

    This resolution clarifies the copy behavior (whether shallow or deep copies must be performed) in constructors and setters. Also, it clarifies how the @external annotations affects such behavior.

    This resolution shall be applied after applying the changes introduced in the resolution of IDL4CSP-1.

  • Updated: Mon, 29 Mar 2021 12:23 GMT

Typos and Inconsistencies

  • Key: IDL4CSP-4
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    In Section 7.2.3.1 "Alternative Mapping", there's a double public in the second paragraph that should be removed: "... the public public partial class shall..."

    Table 7.1 lists the use of the dynamic type, which was part of the original draft but is no longer part of the IDL to C# mapping. Therefore, the row referencing dynamic should be removed.

    The mapping of constants in Section 8.1.2 constants_container Parameter does not match to the mappings defined in Section 7.2.3

  • Reported: IDL4-CSHARP 1.0a1 — Tue, 15 Sep 2020 12:49 GMT
  • Disposition: Resolved — IDL4-CSHARP 1.0
  • Disposition Summary:

    Fix typos and inconsistencies

    This resolution addresses all reported typos and inconsistencies.

  • Updated: Mon, 29 Mar 2021 12:23 GMT

Resolution for name clashes with the Discriminator property name is invalid

  • Key: IDL4CSP-6
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    The proposed conflict resolution rules for union members called Discriminator, which prepend an '@' in front of union member named Discriminator, are invalid. The '@' can only be applied to names that conflict with C# keywords (see https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/identifier-names).

  • Reported: IDL4-CSHARP 1.0a1 — Tue, 15 Sep 2020 19:10 GMT
  • Disposition: Resolved — IDL4-CSHARP 1.0
  • Disposition Summary:

    Add conflict resolution rules for conflicts with identifiers that are not C# keywords

    Currently the specification only defines conflict resolution rules for names that conflict with C# keywords. This resolution introduces a rule to resolve conflicts with names that are not C# keywords.

    The resolution also provides a valid solution to resolve name clashes with the property representing the union discriminator that is consistent with the IDL4 to Java Language Mapping.

  • Updated: Mon, 29 Mar 2021 12:23 GMT

Interface argument modifiers

  • Key: IDL4CSP-7
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    Input interface arguments shouldn't have the "in" modifier.

  • Reported: IDL4-CSHARP 1.0a1 — Tue, 15 Sep 2020 19:18 GMT
  • Disposition: Resolved — IDL4-CSHARP 1.0
  • Disposition Summary:

    Fix mapping of in arguments in interface methods

    As reported in the issue, the mapping of in arguments in interface methods is incorrect. In this resolution, we change the mapping of in arguments so they're mapped to parameters without a modifier.

  • Updated: Mon, 29 Mar 2021 12:23 GMT

Missing option in @csharp_mapping annotation to document mapping to standalone constant classes

  • Key: IDL4CSP-14
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    The @csharp_mapping annotation introduced in Clause 8.1 provides an argument to select the alternative constants mapping and provide a name for the class that scopes a group of contants. However, there current syntax does not allow indicating that mapped constants shall be mapped as standalone classes, which is the other mapping option. Perhaps, we could give a name for the mapping that maps constants to standalone classes, and map that to setting constants_container to an empty string.

    As a side issue with constants, in both mappings the classes that contain the constants are not static. This may confusing as you could create instances of a class that only has constants, which are static. Perhaps, the "Standalone Constants Mapping" should create classes that are "public static" (which are also sealed), and the alternative mapping should create "public static partial" classes.

  • Reported: IDL4-CSHARP 1.0a1 — Fri, 30 Oct 2020 17:01 GMT
  • Disposition: Resolved — IDL4-CSHARP 1.0
  • Disposition Summary:

    Extend constants_container parameter of @csharp_mapping to specify how to map to standalone classes and convert classes containng constants to static classes

    This resolution provides names for the two mapping options for constants and specifies how to select each of them using the @csharp_mapping annotation. It also converts the classes that wrap constants in both mapping options into "static classes".

    The resolution to this issue must be applied after the resolution of IDL4CSP-4.

  • Updated: Mon, 29 Mar 2021 12:23 GMT

Package prefix specified at the IDL to Java translator

  • Key: IDL4JAV-1
  • Status: closed  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Predecessor: https://issues.omg.org/browse/I2JAV13-11

    Many of the IDL to Java translators support an option to specify a Java package prefix for the generated code (e.g. Oracle idlj option -pkgPrefix; JacORB option -i2jpackage; rtiddsgen option -package).
    This is not exactly equivalent to hard coding the prefix as modules in the IDL: When using the translator option, other language mappings do not see the prefix.

    The package prefix provided to the IDL translator may produce a conflict with names in the IDL file.
    Example:

    // file: test.idl
    module test {
    
       enum com_t { zero, one };
    
       struct org_t {
          short foo;
       };
    
       typedef string<16> net_t;
    
       struct structure {
          com_t com;   // "com" is in conflict when providing prefix option such as: com.acme
          org_t org;   // "org" is in conflict when providing prefix option such as: org.acme
          net_t net;   // "net" is in conflict when providing prefix option such as: net.acme
       };
    
    };
    

    Notice that the Java generated for this IDL does not compile but it does compile for other languages (C++, Ada, etc).

    Section 7.1.1.1 (Name Transformation Rules) contains:

    If the mapped name or identifier collides with a reserved name in 7.1.2, the collision is resolved by prepending an underscore ("_") to the mapped name.

    I suggest adding a further sentence:

    This also applies to name collisions caused by a Java package prefix specified at the IDL to Java translator.
    
  • Reported: IDL4-Java 1.0a1 — Tue, 13 Aug 2019 15:34 GMT
  • Disposition: Resolved — IDL4-Java 1.0
  • Disposition Summary:

    Document conflict resolution rules for compiler and vendor-extension settings

    Many IDL to Java translators provide extensions to introduce package prefixes for the generated code. Even though these rules are out of the scope of this specification, in this resolution we add a note indicating that name resolution rules may be also applied to collisions caused by these settings.

  • Updated: Fri, 18 Sep 2020 17:05 GMT

Constants mapping is incomplete/broken

  • Key: IDL4JAV-5
  • Status: closed   Implementation work Blocked
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The constant mapping is prone to namespace collision

  • Reported: IDL4-Java 1.0a1 — Thu, 26 Sep 2019 14:06 GMT
  • Disposition: Resolved — IDL4-Java 1.0
  • Disposition Summary:

    Restructure Constants Mapping to Address all Possible Use Cases

    With this resolution, we introduce a new default mapping for constants that addresses all possible scenarios. The previous mapping, which provided a simpler but partial solution, is now an optional mapping that can be exercised with the @java_mapping annotation.

    NOTE—The example code in the revised text takes into account the names and conventions introduced in the resolution of IDL4JAV-4. For simplicity, the resolution of IDL4JAV-4, which edits all code snippets in the document, applies the new default mapping of constants throughout the document.

  • Updated: Fri, 18 Sep 2020 17:05 GMT

Provide additional flexibility in language mapping

  • Key: IDL4JAV-3
  • Status: closed  
  • Source: Twin Oaks Computing, Inc. ( Mr. Clark Tucker)
  • Summary:

    This issue is a placeholder for any feature request in terms of namespace prefix flexibility, compatibility with CORBA IDL, or possible additions to the java mapping annotation to adjust the language mapping.

    This issue should be closed with no change if no such features or concerned are filed.

  • Reported: IDL4-Java 1.0a1 — Tue, 24 Sep 2019 19:16 GMT
  • Disposition: Closed; No Change — IDL4-Java 1.0
  • Disposition Summary:

    No extra functionality was formally requested as part of FTF

    This placeholder issue was not used to suggest any extra functionality or flexibility in the language mappings. Therefore, we close it with no changes.

    In the future, issues like this should only be created if there's an actual request or concern.

  • Updated: Fri, 18 Sep 2020 17:05 GMT

Naming Conventions and Transformation Rules

  • Key: IDL4JAV-4
  • Status: closed   Implementation work Blocked
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Section 7.1.1.1 provides ambiguous guidance on name mapping from IDL to Java 8.

    We should adopt the solution agreed upon for the IDL to C# Language Mapping.

    On a side note, many Java snippets use semicolons at the end of a class declaration, which is unnecessary in Java.

  • Reported: IDL4-Java 1.0a1 — Thu, 26 Sep 2019 14:02 GMT
  • Disposition: Resolved — IDL4-Java 1.0
  • Disposition Summary:

    Introduce IDL Naming Scheme and Java Naming Schemes

    To address this issue, we are adopting the approach we followed in the IDL to C# Language Mapping specification. In a nutshell, we introduce two naming schemes that can be applied when IDL transforming type identifiers and names to Java.

  • Updated: Fri, 18 Sep 2020 17:05 GMT

Address the CORBA specific mapping[s]

  • Key: IDL4JAV-2
  • Status: closed  
  • Source: Twin Oaks Computing, Inc. ( Mr. Clark Tucker)
  • Summary:

    For example, these building blocks, etc:

    • CORBA specific interfaces
    • "Any" type
    • CORBA specific value-type
    • System Exception
    • Pseudo Objects [may remove]
    • org.omg package
  • Reported: IDL4-Java 1.0a1 — Tue, 24 Sep 2019 18:28 GMT
  • Disposition: Resolved — IDL4-Java 1.0
  • Disposition Summary:

    Define CORBA-Specific Mappings to CORBA in Annex A

    This issue adds all the required CORBA-specific mappings to Annex A.1: CORBA-Specific Mappings. It includes a CORBA-specific mapping for Exceptions, TypeCode, Object, Any, Interfaces, and Value Types. The rest of mappings are derived from applying the generic IDL to Java mapping rules specified throughout the document.

    The resolution of this issue takes into account the changes introduced with IDL4JAV-4 to provide an IDL Naming Scheme and a Java Naming Scheme.

  • Updated: Fri, 18 Sep 2020 17:05 GMT

Typos and Inconsistencies

  • Key: IDL4JAV-13
  • Status: closed  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    The revised submission contains a number of typos and inconsistencies that should be fixed:

    • In Clause 7.2.4.2.1.1, Sequence of Basic Types, IntarfaceName should be InterfaceName.
    • In Clause 7.2.4.2.1.2, Sequence of non Basic Types, the text describing when to throw an exception is somewhat repetitive.
    • In Clause 7.2.4.3.2 Unions, the requirement for implementing java.io.Serializable is repeated.
  • Reported: IDL4-Java 1.0a1 — Sat, 21 Mar 2020 13:43 GMT
  • Disposition: Deferred — IDL4-Java 1.0
  • Disposition Summary:

    This Issue was not resolved in this Task Force and was automatically deferred to the next Task Force

  • Updated: Tue, 14 Jul 2020 20:04 GMT

Typo fixes

  • Key: IDL4JAV-7
  • Status: closed  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    In section 7.2.4.2.1.1 on page 13 top of page after end of fixed font Java code:

    Where:
    • <IntarfaceName> is the interface name indicated in Table 7.4.

    <IntarfaceName> should be <InterfaceName>

    In Clause 7.2.4.2.1.2, Sequence of non Basic Types, the text describing when to throw an exception is somewhat repetitive.

    In Clause 7.2.4.3.2 Unions, the requirement for implementing java.io.Serializable is repeated.

    In section 7.2.4.3.2 on page 16 paragraph before the union U1 example:

    [...] The first modifier method shall
    take no arguments, return void, and setsthe discriminant to the first available default value starting from a 0 index of the
    discriminant type.

    setsthe should be set the.

    In section 8.1.3 table 8.2 column "IDL Construct", repeated typo:
    Accesor should be Accessor.
    In particular, on page 32:

    Structure Member Name in
    Accesor/Modifier Methods

    Union Member Name in
    Accesor/Modifier Methods

    and on page 33:

    Interface Attribute Name in
    Accesor/Modifier Methods

    Exception Member Name in
    Accesor/Modifier Methods

    Bitfield Name in Bitset
    Accesor/Modifier Methods

    Throughout the document URIs starting with "http://" should start with "https://" instead.

  • Reported: IDL4-Java 1.0a1 — Mon, 30 Dec 2019 12:49 GMT
  • Disposition: Deferred — IDL4-Java 1.0
  • Disposition Summary:

    This Issue was not resolved in this Task Force and was automatically deferred to the next Task Force

  • Updated: Tue, 14 Jul 2020 20:04 GMT

Clarify and perhaps expand where annotations can be applied

  • Key: IDL41-9
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The specification should allow application of annotations to:
    declarations, members, function parameters, union discriminator, enumerator literals, typedefs, sequence parameter, array parameter.

    Some examples:

    struct SS {
        @MemberAnnotation(value)  MyType  m1;
    };
    
    emum EE {
        @Value(value)  Enum1;
    };
    
    union MyUnion switch ( @key long ) {
       case 1:
           @CaseMemberAnn MT1 m1;
       defalt:
           long l;
    };
    struct SS {
        @shared sequence< MyType, 3>   m1;
        sequence<@shared  MyType, 3>   m1;
    
        @shared MyType m1[3];
        MyType @shared m1[3];
    
        @shared MyMatrix mm[3][4];
        MyMatrix @shared mm[3][4];
    };
    
    
    typedef MyType @shared MyTypeArray3[3];
    typedef @shared MyType MyTypeArray3[3];
    
  • Reported: IDL 4.0 — Wed, 14 Sep 2016 21:27 GMT
  • Disposition: Resolved — IDL 4.1
  • Disposition Summary:

    Clarify application rules for annotations

    An annotation can be placed on any IDL constructs or sub-constructs.
    Stating that in the grammar rules complicates dramatically all the rules and creates a dependency issue between building-blocks.
    The proposed solution is therefore:

    1. to remove from the grammar any reference towards where annotations can be placed – cf. rule (202), as it wrongly gave the impression that annotations could only be placed on first-level definitions.
    2. to state more clearly in the text that annotations can be placed on any IDL constructs and sub-constructs.

    (Note that the format for applying annotation remains defined by EBNF rules as it was).

  • Updated: Wed, 5 Dec 2018 16:54 GMT

The description of "simple template types" is incorrect

  • Key: IDL42-10
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The IDL specification uses the term "simple template types" to refer to string, sequence, map, and fixed-point types. The reason being because they can be parameterized by the type of the element and/or length.

    The first problem is that there are no "complex template types" anywhere in the spec so this "simple" term is confusing.

    In addition to this, section 7.4.1.4.4.1 (Simple Types) provides the following definition:

    Simple types are types whose definition more or less pre-exists to any IDL specification. They can be split in two categories:
    • Basic types that basically represent numbers and characters and fully pre-exist any IDL specification.
    • Simple template types whose generic definition pre-exists any IDL specification but need to be instantiated with parameters, to become actual types.

    But later on it includes "sequences" as one of the "simple template types" . This may be OK for strings and fixed-point types as they are parameterized with just integer "lengths", or even sequences of primitive types. However this is not correct because soem sequences require prior definition of the underlying element type thus do not "pre-exists to any IDL specification".

    Section 7.4.1.4.4.1.2 (Simple Template Types) provides the following definition:

    Simple template types are template types whose generic definition pre-exists any IDL specification. To be used as an actual type, such a generic definition must be instantiated, i.e., given configuration parameters, whose nature depends on the template type.

    Note that the categories "Simple Types" and "Simple Template Types" were introduced in IDL4. It was not present in IDL 3.5 and earlier.

    These issues should be resolved.

  • Reported: IDL 4.1 — Mon, 14 Aug 2017 04:10 GMT
  • Disposition: Resolved — IDL 4.2
  • Disposition Summary:

    Reorganize section 7.4.1.4.4.1 and provide more accurate definitions

    Section 7.4.1.4.4.1 is not about declaring types but referencing types so it should be renamed to something like "Referencing Types" and the description changed accordingly. It should also be moved to be before 7.4.1.4.4 (Data Types).

    The current subsections 7.4.1.4.4.1.1 (Basic Types ) and 7.4.1.4.4.1.2 (Simple Template Types) should be moved out to the same level.

    The section "Simple Template Types" should e renamed "Template Types" and references to "simple template types" changed to "template types"

    The definition of "template types" should be improved.

  • Updated: Tue, 19 Dec 2017 20:04 GMT

IDL should have aliases/typedefs for integer that disambiguate representation size

  • Key: IDL42-9
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    IDL uses the keywords short, long, and long long to designate integer types of sizes 16, 32, and 64 bits, respectively.

    In IDL the size of these integer types is well specified. However these names confuse users familiar with languages such as C and C++ where the size of these integers is platform specific. As a result many users end-up defining their own typedefs for different size integers (e.g. INT16, or Int16) resulting in IDLs that are non-uniform do not leverage the built-in types.

    To avoid this, IDL should follow the approach taken in C/C++ and introduce typedefs whose name unambiguously indicates the size of the representation.

    Proposed "builtin typedefs" would be:

    typedef               short              int16; 
    typedef               unsigned short     uint16;
    typedef               long               int32;
    typedef               unsigned long      uint32;
    typedef               long long          int64;
    typedef               unsigned long long uint64;
    
  • Reported: IDL 4.1 — Mon, 14 Aug 2017 00:33 GMT
  • Disposition: Resolved — IDL 4.2
  • Disposition Summary:

    Add new keywords for the integer types

    Add new keywords for int16, int32, int64, uint16, uint32, and uint64. This should go in the "Building Block Extended Data Types" so that it does not impact existing applications.

  • Updated: Tue, 19 Dec 2017 20:04 GMT

The text in the "Scope" section provides history rather than scope

  • Key: IDL42-15
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The content "Scope" section appears to have been copied from the original RFC motivation. As a result it reads more as a "history" of the specification rather than defining the scope.

    The history of how the specification came about is useful and should be stated somewhere. However the main focus of the scope section would be to define the boundaries and goals for the specification.

  • Reported: IDL 4.1 — Wed, 16 Aug 2017 18:43 GMT
  • Disposition: Resolved — IDL 4.2
  • Disposition Summary:

    Rewrite Scope and move historical background text to section 6

    Most of the current text in Section 1 "Scope" is about the history of the specification. This text should be moved to section 6 "Additional Information"

    A paragraph describing the goals and boundaries for the IDL specification should be written and placed in section 1. "Scope"

  • Updated: Tue, 19 Dec 2017 20:04 GMT

Building block Templates, Annotations, and Extended Types appear in the wrong location

  • Key: IDL42-13
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The building blocks BB Templates, BB Annotations, BB Anonymous Types, and BB Extended Types are both basic (dealing just with data types) and general purpose (independent of platform CORBA, DDS, CCM).

    They also have no dependencies on other building blocks other than the BB Core Data Types. Even if the BB Interfaces does not depend on them (i.e. some specification can comply with the BB Interfaces without complying wth the aforementioned modules), it is still possible to define interfaces that use these type extensions and annotations.

    For this reason these should me moved to appear in the specification ahead of the BB Interfaces and platform- specific BBs.

    The most natural place would be following the BB Core Data Types.

  • Reported: IDL 4.1 — Wed, 16 Aug 2017 18:16 GMT
  • Disposition: Resolved — IDL 4.2
  • Disposition Summary:

    Reorder Building Blocks

    Reorder building blocks, as suggested in the issue description.
    The Building Blocks for Extended Data Types, Anonymous Types, Annotations, and Template Modules should be placed following the Building Block for "Core Data Types".

  • Updated: Tue, 19 Dec 2017 20:04 GMT

Missing and inconsistently named annotations

  • Key: IDL42-3
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Extensibility Annotation

    Section 8.3.1.6 defines the @extensibility annotation as follows:

    @annotation extensibility {
        enum ExtensibilityKind {
            FINAL,
            APPEND,
            MUTABLE
        };
        ExtensibililtyKind value;
    };
    

    However, section 7.2.3 of DDS-XTYPES specifies that the types of extensibility and mutability are the following:

    • FINAL
    • APPENDABLE
    • MUTABLE

    For consistency, the IDL specification should use "APPENDABLE" instead of "APPEND".

    Shortcut Annotations

    In Section 8.3.1 the IDL specification defines the annotations @final as a shorcut for @extensibility(FINAL) (Section 8.3.1.7) and @mutable as a shortcut for and @extensibility(MUTABLE) (Section 8.3.1.8).

    For consistency, the IDL specification should introduce @appendable as a shortcut for @extensibility(APPENDABLE).

    Default Literal Annotation

    DDS-XTYPES Section 7.3.1.2.1.10 (Default Literal for Enumeration) defines the annotation @default_literal as:

    @annotation default_literal {};

    This is a general purpose annotation that marks an element of an enumeration as the default one for that enumeration.

    For consistency with similar generic annotations it should be added to IDL section 8.3.2 (Group of Annotations Data Modeling)

  • Reported: IDL 4.1 — Wed, 26 Jul 2017 15:39 GMT
  • Disposition: Resolved — IDL 4.2
  • Disposition Summary:

    Modify annotations as suggested in issue description

    Perform the suggested modifications

  • Updated: Tue, 19 Dec 2017 20:04 GMT

IDL Lacks Support for 8-bit Signed/Unsigned Integers

  • Key: IDL42-2
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    As of version 4.1, IDL lacks explicit support for 8-bit signed/unsigned integers. While, there are two data type with 1-byte size, these are not suitable for encoding 8-bit integers:

    • char => 8-bit quantity that:
      • encodes a single-byte character from any byte-oriented code set, or
      • in an array, encodes a multi-byte character from a multi-byte code set
    • octet => opaque 8-bit. guaranteed not to undergo any change by the middleware.

    Unfortunately, reference programming languages don't have consistent behavior:

    • Java: byte => signed 8-bit
    • C#
      • byte => unsigned 8-bit
      • sbyte => signed 8 bit
    • C (C90 and later)
    • C++
      • char => recommended for chars only. Allowed for numbers but unspecified sign
      • signed char => signed 8-bit number
      • unsigned char => unsigned 8-bit number

    Other dialects of IDL provide support for 8-bit signed/unsigned integers as follows:

    • MIDL (Microsoft's IDL)
      • Introduces the small keyword to represent 8-bit integers (see MIDL documentation). Additionally, it uses the hyper keyword to represent 64-bit integers (i.e., a long long in OMG IDL).
      • The integer types in MIDL are:
        • [unsigned] small (8-bit integer)
        • [unsigned] short (16-bit integer)
        • [unsigned] long (32-bit integer)
        • [unsigned] hyper (64-bit integer)
      • This IDL dialect introduces also the signed keyword and therefore numeric values can be marked as signed or unsigned (if unspecified they default to signed).
      • Web IDL
        • Introduces byte keyword to represent a signed 8-bit integer and treats octets as an unsigned 8-bit integer (see documentation).
        • The integer types in Web IDL are:
          • byte (signed 8-bit integer)
          • octet (unsigned 8-bit integer)
          • [unsigned] short (16-bit integer)
          • [unsigned] long (32-bit integer)
          • [unsigned] long long (64-bit integer)
    • XPIDL
  • Reported: IDL 4.1 — Wed, 26 Jul 2017 14:28 GMT
  • Disposition: Resolved — IDL 4.2
  • Disposition Summary:

    Add support for 8-bit Integers

    We have identified four possible candidate solutions listed below. See the end for the decision on the adopted solution.

    1. Introduce a new keyword in IDL to indicate an 8-bit integer.

    This would preserve the current semantic and mapping of octet (opaque, do not use it as a number). If we do this it would be like the other integers in IDL where it is signed unless we qualify it with "unsigned."

    This solution has three alternatives depending on the keyword selected. We have considered byte, small, and tinyint:

    Alternative 1.1: Add new byte keyword

    byte  ==> signed 8-bit integer
    unsigned byte  ==> unsigned 8-bit number
    

    This approach is clean and consistent but we are concerned with using the keyword "byte" because of the ambiguity with the definitions in C# and Java. It also does not sound like a number. It sounds like "octet". In fact it means exactly that.

    Alternative 1.2: Add new small keyword (following MIDL's model)

    small  ==> signed 8-bit integer
    unsigned small  ==> unsigned 8-bit number
    

    Alternative 1.3: Add new tinyint keyword (following SQL model)

    tinyint  ==> signed 8-bit integer
    unsigned tinyint  ==> unsigned 8-bit number
    

    *Alternative 1.4: Add new int8 and

    {uint8}

    keywords (following new C/C++ standard names)*

    int8    ==> signed 8-bit integer
    uint8  ==> unsigned 8-bit number
    

    Solution 2: Use annotations on "octet" to indicate use as integer

    This would mean that we could have "octet" type used three different ways:

    octet                        -- current meaning (opaque 8-bit) not a number
    @signed octet       -- signed 8-bit number
    @unsigned octet  -- unsigned 8-bit number
    

    This approach seems less clean than Approach 1 but it has the advantage of being less ambiguous and backwards compatible. Having said that, having both a keyword and an annotation called unsigned is a bit ambiguous. Also this would be the only use of the @unsigned annotation which is confusing. For example, someone may be tempted to use @unsigned short as a type.

    Solution 3: Leverage the existing @bit_bound annotation

    IDL4 says this about the @bit_bound annotation:

    "it may be used to force a size, smaller than the default one to members of an enumeration or to integer elements."

    So it seems if we used:

    struct MyStruct {
         @bit_bound(8)  short             member1;
         @bit_bound(8)  unsigned short    member2;
    };
    

    The @bit_bound(8) would affect the serialization and also the language mapping.

    For example in Java member1 could be typed as byte whereas member2 would be short in order to accommodate values between 128 and 255.

    The advantage of Solution 3 is that it reuses the concepts already present without new keywords and annotations in a manner consistent with the intended purpose.

    There are two alternative ways to do this:

    Alternative 3.1
    Just explain in the IDL 4 spec that this is the pattern used to model 8-bit integer types.

    Alternative 3.2 (providing typedef for all integer types)

    Expand the IDL 4 to define typedefs for all integer types making the size of the representation more obvious (similar to the new standard integer types in C99 and C++).

    typedef @bit_bound(8) short              int8;
    typedef @bit_bound(8) unsigned short     uint8;
    typedef               short              int16; 
    typedef               unsigned short     uint16;
    typedef               long               int32;
    typedef               unsigned long      uint32;
    typedef               long long          int64;
    typedef               unsigned long long uint64;
    

    Solution 4: Allow the existing keyword "unsigned" to be used with octet

    There are two alternative ways to implement this.

    Alternative 4.1 Add also a signed keyword

    Add signed as a keyword, which overcomes the ambiguity of solution (2). With the signed keyword, we could specify whether an octet (or a char) is signed or unsigned and follow C/C++ convention.

    octet                   -- current meaning (opaque 8-bit) not a number
    signed octet       -- signed 8-bit number
    unsigned octet   -- unsigned 8-bit number
    

    Alternative 4.2 Redefine “octet” to mean signed int

    With this approach we would have:

    octet opaque 8-bit. guaranteed not to undergo any change by the middleware.
    Able to hold signed integer values within the range -128 to 127 In the language it is mapped to type that can handle signed integer values within the range -128 to 127
    unsigned octet As octet also opaque 8-bit. guaranteed not to undergo any.
    Able to hold unsigned integer values within the range 0 to 255

    Thus in C we would map IDL octet to C90 "signed char" and IDL "unsigned octet" to C90 unsigned char.

    This mapping may break API portability with previous mappings, or break application code where the "char" was mapped to an unsigned value (e.g. in ARM processors).

    To workaround it we could provide some way to prevent the mapping to "signed char". Maybe this is some command-line option to rtiddsgen, like "-nosignedchar"

    Adopted solution

    The chosen solution is 1 with alternative 4 (int8, uint8).
    The reason to prefer introducing new keywords rather than relaying on annotations is that using an annotation (e.g. @bit_bound(8) opens the door for that annotation to be used in unexpected context and with un-expected parameters. For example the user could annotate not just a short, but also a long or long long. Or they could use a different value other than 8. All these cases would have to be described and handled resulting in more complexity for the user and tools. The "keyword" approach is simpler, more constrained, and better aligned with what the user expects.

    The reason to choose int8 and uint8 is to align it with the resolution of IDL42-9. So we save having to add another keyword like "small
    or "tiny" which would not be intuitive to the user.

  • Updated: Tue, 19 Dec 2017 20:04 GMT
  • Attachments:

Rule 174 requires space after opening curly brace

  • Key: IDL42-1
  • Status: closed  
  • Source: Vanderbilt University (ISIS) ( Spencer Crosswy)
  • Summary:

    Rule 174 requires a space after the open brace:
    (174) > <porttype_def ::= "porttype" <identifier> "

    { " <port_body> "}

    "

    This has the following consequence:
    Valid:
    porttype TESTPORT

    { provides FOO BAR; }

    ;

    Invalid:
    porttype TESTPORT

    {provides FOO BAR; }

    ;

    I expect this was just an oversight, because it's the only instance in the grammar that requires a space after an opening curly brace.

  • Reported: IDL 4.0 — Wed, 12 Apr 2017 15:23 GMT
  • Disposition: Resolved — IDL 4.2
  • Disposition Summary:

    Fix grammar for Rule 174

    Perform the change suggested in the issue resolution

  • Updated: Tue, 19 Dec 2017 20:04 GMT

Miscellaneous typos and readability improvements

  • Key: IDL42-7
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    This issue gathers a number of typographical error and grammatical improvements that woudl enhance the readability of the specification.


    In section 8.3.3 (Group of Annotations: Units and Ranges) in the declaration of struct Foo it uses the keyword "Struct". It should be "struct" instead.



    Section 2 (Conformance Criteria) edit the first sentence of the first paragraph as shown below:

    This document defines IDL such that it can be referenced by for other specifications to reference and . It contains no independent conformance points.



    Section 2 (Conformance Criteria) edit the 3rd sentence of the first paragraph as shown below:

    However, the general organization of the clauses (by means of atomic building blocks and profiles that group them as detailed afterwards) is intended to ease conformance description and scoping.



    Section 2 (Conformance Criteria) edit the bullets as shown below:

    1. Future specifications that use Any future specification using IDL shall reference this IDL standard or a future revision thereof.
    2. Future revisions of current specifications using that use IDL may reference this IDL standard or a future revision thereof.
    3. Reference to this standard must shall result in a selection of building blocks possibly complemented by groups of annotations.
    a. All selected building blocks shall must be supported entirely.
    b. Selected annotations shall must be either supported as described in ‎8.2.2 Rules for Using Standardized Annotations, or fully ignored. In the latter case, the IDL-dependent using specification shall not define a specific annotation, either with the same name and another meaning or with the same meaning and another name.



    Section 7.1 (Overview) edit the 2rd paragraph as shown below:

    OMG IDL is a language that allows unambiguously specifying unambiguous specification of the
    interfaces that client objects may use and (server) object implementations provide as well as all needed related constructs such as exceptions or and data types. Data types are needed to specify parameters and return value of interfaces' operations. They can be used also as first class constructs.



    Section 7.1 (Overview) edit the 3rd paragraph as shown below:

    IDL is a purely descriptive language. This means that invoking operations, implementing them or creating and accessing data actual programs that use these interfaces or create the associated data-types cannot be written in IDL, but in a programming language, for which mappings from IDL constructs have been defined. The mapping of an IDL construct constructs to a programming language construct will depend on the facilities available in the that programming language. For example, an IDL exception might be mapped to a structure in a language that has no notion of exception exceptions, or to an exception in a language that does. The binding of IDL constructs to several programming languages is described in separate specifications.



    In Section 7.1 (Overview) edit the 4th paragraph as shown below:

    A source file containing specifications written in IDL must shall have a ".idl" extension.



    In Section 7.1 (Overview) edit the 5th paragraph as shown below:

    The description of IDL grammar uses a syntax notation that is similar to Extended Backus-Naur Format (EBNF). However, to allow composition of specific parts of the description, while avoiding redundancy; a specific new operator (::+) has been added. This operator allows adding alternatives to an existing definition (assuming x ::= y, x ::+ z means actually x ::= y | z). For example, assuming the rule x ::= y, the rule x :: z shall be interpreted as x ::= y | z.



    In Section 7.2.6.2.1 (Wide and Non-wide Characters) modify the last sentence as shown below:

    Attempts to assign a wide character literal to a non-wide character constant, or to assign a non-wide character literal to a wide character constant, shall be treated as an error result in a compile-time diagnostic.



    In Section 7.2.6.2.2 (Escape Sequences to Represent Character Literals) change the two occurrences of "must" to "shall" as shown below:

    Nongraphic characters shall must be represented using escape sequences as defined below in Table ‎7 9. Note that escape sequences shall must be used to represent single quote and backslash characters in character literals.



    In Section 7.4.1.1 (Purpose) edit the first paragraph as shown below:

    This building block constitutes the core of any IDL specialization (all other building blocks assume that this one is included). It gathers all contains the syntax rules that allow defining most data types with what allows and the syntax rules that allow IDL basic structuring (i.e., modules). and, because Since it is the only mandatory building block which is mandatory, it also contains the root nonterminal <specification> for the grammar itself.



    In Section 7.4.1.4.3 (Constants) first paragraph, change "must" to "shall" as shown below.

    Well-formed constants must shall follow the following rules:



    In Section 7.4.1.4.3 (Constants)
    Perform edits changing:
    "which must" to "which shall",
    "rules are applied" to "rules shall be applied",
    "are applicable" to "shall be applicable",
    "are evaluated" to "shall be evaluated",
    "are considered" to "shall be considered",
    "are not considered" to "shall not be considered",
    "is considered" to "shall be considered",
    "are discarded" to "shall be discarded",
    "are multiplied" to "shall be multiplied",
    "is divided" to "shall be divided",
    "are added" to "shall be added",
    "is subtracted" to "shall be subtracted",

    "is not performed" to "shall not be performed"
    "can combine" to "may combine",
    "using the imputed type" to "based on"
    "If either argument is ... use" to "If either argument is ... it shall use"
    "an error shall be flagged by the compiler" "it shall be treated as an error"
    "shall be flagged as a compile time error" to "shall be treated as an error"
    "shall cause a compile-time error" to "shall be treated as an error"

    "has no effect" to "shall have no effect"

    "should be shifted" to "shall be shifted"
    "should be generated" to "shall be generated"



    In section 7.4.1.4.4 (Data Types) Change "can" to "may" in the first sentence as shown below:

    A data type can may be either a simple type or a constructed one. Those different kinds are detailed in the following clauses.



    In section 7.4.1.4.4.1 (Simple Types) replace the first bullet:

    • Basic types that basically represent numbers and characters and fully pre-exist any IDL specification.
    With:
    • Basic types representing primitive builtin types such as numbers and characters.


    In the same section replace: "Those two categories" with "These two categories"


    In the same section edit 3rd paragraph as shown below

    Note – Within this building block, anonymous types, that is, types actual the type resulting from an instantiation of a template type cannot be used directly as is (anonymously). Instead, prior to any use, template types must it needs to be given a name through a typedef declaration prior to any use. Therefore, as expressed in the following rules, referring to a simple type can be done either using directly its name, if it is a basic type, or using through a scoped name, in all other cases:



    In section 7.4.1.4.4.1.1 (Basic Types) Edit the first paragraph as shown below:

    Basic types are pre-existing types that represent numbers or characters. The set of basic types is They are defined by the following rules:



    In section 7.4.1.4.4.2.4 (Constructed Recursive Types and Forward Declarations) change the 3 occurences of the sentence

    Compilers shall issue a diagnostic if this rule is violated.
    With:
    If this rule is violated it shall be treated as an error


    In section 7.4.1.4.4.4 (Native Types) modify the second paragraph as shown below:
    As stated in the following rules, declaring a native type consist in just is done prefixing the type name (<simple_declarator>) with the native keyword:


    In section 7.4.2.4 (Explanations and Semantics) edit the second paragraph as shown below:
    An any logically contains a value and some means that specifies to specify the actual type of the value. This means However, the specific way in which the actual type is defined is middleware-specific . Each IDL language mapping provides operations that allow ‎programmers to insert and access the value contained in an any as well as the actual type of that value.‎


    In section 7.4.3.4.2 (Exceptions) change "is" with "shall be" as shown below:
    If an exception is returned as the outcome to an operation invocation, then the value of the exception identifier is shall be accessible to the programmer for determining which particular exception was raised.


    In the same section, 3rd paragraph, change "will" with "shall be" ab "is" with "shall be" as shown below:

    If an exception is declared with members, a programmer shall be will be able to access the values of those members when such an exception is raised. If no members are specified, no additional information shall be is accessible when such an exception is raised.


    In the same section, last paragraph, remove the word "thereafter"


    In section 7.4.3.4.3 (Interfaces) modify the last sentence of the 2nd paragraph as shown:
    An interface may also be declared with no definition with using a forward declaration (<interface_forward_dcl>).


    In section 7.4.3.4.3.1 (Interface Header) modify the last paragraph as shown below:
    A parameter or structure member which is of an interface type is actually semantically as a reference to an object implementing that interface. Each language binding describes how the programmer must represent such interface references.


    In section 7.4.3.4.3.3 (Interface Body) modify the first paragraph as shown below:
    As stated in the following rules, within an interface body, can be defined operations and attributes can be defined. Those constructs are defined in the scope of the interface and exported (i.e., accessible outside the interface definition using through their name scoped by the interface name).


    In section 7.4.3.4.3.3.1 (Operations) replace "must" with "shall" in:
    Operations that do not return a result shall must specify void as return type.
    In the same section edit the paragraph below as shown:
    The absence of a raises expression on an operation implies that there are no operation-specific exceptions. Invocations of such an operation may are still liable to receive raise one of the middleware-specific standard exceptions.


    In section 7.4.3.4.3.3.2 (Attributes) replace "can" with "may" in the first sentence as shown:
    Attributes may can also be declared within an interface.

    In the same section edit the bullet below as shown:
    • For plain attributes, raises expressions allow to indicate which of the potential user-defined exceptions may be raised are when the attribute is read (getraises) and which the ones are when the attribute is written (setraises). A plain attribute may have a getraises expression, a setraises expression or both of them. In the latter case, the getraises expression must be declared in first place.

    In the same section edit the paragraph below as shown:
    The absence of a raises expression (raises, getraises or setraises) on an attribute implies that there are no attribute-specific exceptions. Accesses to such an attribute may are still raise liable to receive middleware-specific standard exceptions.


    In section 7.4.4.4 (Explanations and Semantics) modify the 1st paragraph as shown below:
    This building block adds the possibility to embed inside an interface declaration, declarations of types, constants and exceptions inside an interface declaration.

    In the same section modify the paragraph as shown below:
    All those elements are exported (i.e., visible under the scope of their enclosing hosting interface). In contrast As opposed to attributes and operations, they may be redefined in a derived interface, which has the following consequences:

    In the same section modify the last sentence in the paragraph as shown below:
    An attempt to use an ambiguous name without qualification produces a compilation shall be treated as an error.


    In section 7.4.5.1 (Purpose) modify the 2nd paragraph as shown below:
    In contrast As opposed to interfaces which are merely groups of operations , values carry also state contents. A value type is, in some sense, half way between a "regular" IDL interface type and a structure.

    In the same section modify the second bullet as shown below:
    Supports a single Single interface support.


    In section 7.4.5.4.1.3.1 (State Members) modify the last sentence in the first paragraph as shown below:
    While its public part is exposed to all, the private part of the state is only accessible to the implementation code and the marshaling routines.


    In section 7.4.5.4.2 (Forward Declarations) modify the first sentence in the first paragraph as shown below:
    Similar to Like interfaces, value types may be forward-declared, with the following syntax:


    In section 7.4.9.4 (Explanations and Semantics) change "must" to "shall" in teh first bullet as shown below:
    • A home declaration must shall specify exactly one component type that it manages. Multiple homes may manage the same component type.


    In section 7.4.12.1 (Purpose) modify the first paragraph as shown:
    The purpose of this building block is to allow embedding constructs in template modules. Template modules may be parameterized by a variety of parameters (called formal parameters), which by transition transitively makes all the embedded constructs parameterized by the same parameters. Before using it, a template module needs to be instantiated with values suited for the formal parameters. A template module instantiation results in a de facto instantiation of all its Instantiation of the template module instantiates all the embedded constructs.


    In section 7.4.15.4.1 (Defining Annotations) edit the last two notes as shown below:
    Note – Annotations may be user-defined, using this syntax. They can also be implicitly defined by the IDL-processing tools a compiler. In the latter case, the behavior should be as if the related definitions were included at the beginning of the IDL specification.

    Note – Annotations should not cause more compile IDL-processing errors than strictly needed. Therefore, in case of multiple definitions of the same annotation in one IDL specification , the the IDL-processing tools compiler should accept them, provided that they are consistent. In contrast, malformed definitions shall be treated as an error In return, compilers should raise an error in case of malformed definitions.


    In section 7.4.15.4.2 (Applying Annotations) modify the first bullet as shown below:
    • The annotation name (<scoped_name>) prefixed with the at symbol commercial at (@), also known as commercial at.

    In the same section modify the second note as shown below:
    Note – Annotations should not cause more compile IDL-processing errors than strictly needed. Therefore, in case an unknown annotation is encountered, it should be simply ignored by the IDL-processing tools compiler. In contrast, malformed definitions shall be treated as an error In return, compilers should raise an error in case of malformed annotations.


    In section 7.5.1 (Qualified Names) modify the last paragraph as shown below:
    The declaration of attribute Title in interface C is ambiguous, since the compiler IDL-processor does not know which string_t is desired. Ambiguous declarations shall be treated as yield compilation errors.


    In section 8.2.2 (Rules for Using Standardized Annotations) modify the bullets as shown below:
    Shall Must respect totally the standardized annotation syntax.

    • May clarify the actual meaning of the annotation in the specific targeted context. That actual meaning may be more precise than, but shall must remain compliant with, the general one expressed here.

    Shall Must indicate the default behavior when no annotation is placed on an element that may be annotated. Note that this default is never identical to not the same as the default values defined provided for the annotation members (when these default values exist). This is because as the later values are just intended to be the most logical values when the annotation is present.

  • Reported: IDL 4.1 — Sun, 13 Aug 2017 23:16 GMT
  • Disposition: Resolved — IDL 4.2
  • Disposition Summary:

    Fix the typos and make the improvements suggested in the issue description.

    Apply the changes suggested in the issue description.

  • Updated: Tue, 19 Dec 2017 20:04 GMT

The IDL4 spec syntax for bitsets departed from the one used in DDS-XTYPES

  • Key: IDL41-5
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    TITLE:

    The IDL4 spec syntax for bitsets departed from the one used in DDS-XTYPES.

    DESCRIPTION:

    In DDS XTYPES a bitset is defined like an enumeration with some extra annotations. For example:

    
    @BitSet @BitBound(16)
    
         enum MyBitSet {
    
           FLAG_0,
    
           FLAG_1,
    
           @Value(7) FLAG_7
    
           @Value(15) FLAG_LAST
    
    };
    
    

    This defined the total number of bits in the bitset (16) as well provided symbolic names for the bits (FLAG_0), ... It also allowed the bit assignment to be defaulted (e.g. FLAG_0, FLAG_1) or explicitly assigned.

    It is unclear how to do this in IDL4.

    On the one hand one could write

    
    struct MyBitSet {
    
        bitset<1> FLAG_0;
    
        bitset<1> FLAG_1;
    
        bitset<1> FLAG_7
    
        bitset<1> FLAG_LAST;
    
    };
    
    

    This would indicate each flag uses one bit. But it would not constrain the size of the overall bitset, nor the bit values for the flags.

    One could also say:

    
    struct MyBitSet {
    
        bitset<1, 16> FLAG_0;
    
        bitset<1, 16> FLAG_1;
    
        bitset<1, 16> FLAG_7
    
        bitset<1, 16> FLAG_LAST;
    
    };
    
    

    According to 7.2.8.6.3.2 the second integer would specify that the representation should use a 16-bit integer. But nowhere it is stated that all these will be reusing the same 16-bit integer...

    Also bitsets can appear inside other structures as in (see 7.2.8.6.3.2):

    
    struct MyStruct {
    
                bitset<1>        foo1;
    
                bitset<3>        foo2;
    
                bitset<4>        foo3;
    
                long                 anotherMember;
    
                bitset<1>        bar1;
    
                bitset<1>        bar2;
    
    };
    
    

    Where it is stated that bitsets that appear sequentially should be put together. This seems non-intuitive and brittle... In fact the spec recommends not to mix bitsets with other types for readability...

    This syntax seems a bit arbitrary and also hard to process by IDL compiler. The XTYPES approach was simpler. If the goal was to avoid "re-purposing" the "enum" then IDL4 could have defined a new keyword, but yet use similar syntax/approach as XTYPES as in:

    
    @bound(16) 
    
    bitset {
    
        @value(0) FLAG_0;
    
        @value(1) FLAG_1;
    
        @value(7) FLAG_7;
    
        @value(15) FLAG_LAST;
    
    };
    
     
    
    // OR
    
    @bound(16) 
    
    bitset {
    
        FLAG_0 = 0;
    
        FLAG_1 = 1;
    
        FLAG_7 = 7;
    
        FLAG_LAST = 15;
    
    };
    
    

    This is less ambiguous as it separates clearly the size of the bitset from the actual flags-names used for each bit. It also allows the user to not bother assigning explicit values to each bit. Finally the syntax is closer to that of enumeration so it is much easier for IDL parsers to handle it.

  • Reported: IDL 4.0 — Wed, 10 Aug 2016 15:15 GMT
  • Disposition: Resolved — IDL 4.1
  • Disposition Summary:

    Redesign of bitsets

    In the previous version of IDL4, bit sets were created to serve two main purposes in a single construct, namely::

    • Bit fields (à la C/C++)
    • Named accesses to individual bits (as in XTypes)

    Rationale for that "all-in-one" approach was to avoid introducing too many new IDL keywords. However, the result was deemed difficult to understand and to implement (notably because a struct had then different meanings and implementation depending if it contains or not bit fields) and not fully compliant with what was designed in XTypes.

    The proposal is thus to separate those two things and to design accordingly two different constructs.
    The consequence is that it introduces 2 new keywords (bitfield and bitmask) in addition to the existing one (bitset), which is not that annoying as they should not collide too often with existing identifiers (and if they do, IDL provides a mechanism to mitigate the collision).

  • Updated: Thu, 6 Apr 2017 13:50 GMT

IDL should support empty structures

  • Key: IDL41-6
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Supporting empty structures is desired to facilitate the mapping from other data-models that may contain them. In addition the type system in XTYPES already supports them but it is not possible to express it in IDL.

    We have found many practical situations where people create empty structures. It may be used these are temporary place holders. Or they can be used as markers for specialized classes that represent different types all inheriting from a common base class.

    In all these cases when going to IDL it becomes necessary to add a dummy member like:

    struct MyEmptyStruct {
        octet __dummy_member;
    };
    

    Note that C and C++ support empty structures. So this should not create problems in the language mappings.

  • Reported: IDL 4.0 — Thu, 11 Aug 2016 07:38 GMT
  • Disposition: Resolved — IDL 4.1
  • Disposition Summary:

    Change <struct_def> in BB Extended Data-types

    In BB Extended Data-types, structure definition is already modified to support single inheritance (cf. rule (195)). Complement that extension with the ability of defining void structures.

  • Updated: Thu, 6 Apr 2017 13:50 GMT

DL 4.0 Grammar Errors - formal/2016-04-02

  • Key: IDL41-3
  • Legacy Issue Number: 19894
  • Status: closed  
  • Source: Vanderbilt University ( Mr. William Otte)
  • Summary:

    We’re trying to implement a simple parser based on a subset of the IDL 4.0 BBs, and we’re coming across a number of oversights/mistakes in the language definition. For example, template module instances are required to end with two semicolons.

    Invalid:
    Typed<FOO> BAR;

    Valid:
    Typed<FOO> BAR;;

    Rule 184 requires a semicolon after a template_module_inst:
    (184) <definition> ::+ <template_module_dcl> ";"

    <template_module_inst> ";"

    Rule 194 defines template_module_inst as ending with a semicolon:
    (190) <template_module_inst> ::= "module" <scoped_name> "<" <actual_parameters> ">" <identifier> ";"

    There were one or two additional ones that I submitted through the OMG issue process, but never received the customary note from Juergen that it had been received. (unless it went to spam).

    I’ll have to dig through my email for specifics of the other, but I believe it was:

    Invalid:

    struct foo

    { int bar; }

    Valid

    struct foo

    { int bar, baz; }

    Invalid:

    struct foo

    { int bar, baz, qux; }

    At the moment, we are proceeding under the assumption that such errors are fixed with the intuitive solution in each case, e.g., correct the grammar to allow similar behavior in such cases to IDL 3.5.

    I’d like to make sure that our internal resolutions are correct before we invest too much time going down this rabbit hole.

  • Reported: IDL 4.0 — Wed, 8 Jun 2016 04:00 GMT
  • Disposition: Resolved — IDL 4.1
  • Disposition Summary:

    Remove the extra ";" from rule (190)

    This is an obvious mistake (the general strategy is that all the ending ";" are specified when adding items to <definition>).
    The solution is just to remove that supernumerary piece at the end of rule (190).

  • Updated: Thu, 6 Apr 2017 13:50 GMT

Unnecessary paragraph in section 7.4.1.4.4.1

  • Key: IDL41-8
  • Status: closed  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    In section 7.4.1.4.4.1 Simple Types, section on Char Types the paragraph that follows is redundant with what is already explained in other sections and moreover does not apply to the section. This causes confusion and therefore it should be removed.

    The ISO Latin-1 (8859-1) character set standard defines the meaning and representation of all possible graphic characters used in IDL (i.e., the space, alphabetic, digit, and graphic characters defined in Table 7-2 on page 15, Table 7-3 on page 16 and Table 7-4 on page 16). The meaning and representation of the null and formatting characters (see Table 7-5 on page 18) is the numerical value of the character as defined in the ASCII (ISO 646) standard. The meaning of all other characters is implementation-dependent.

  • Reported: IDL 4.0 — Wed, 14 Sep 2016 21:24 GMT
  • Disposition: Resolved — IDL 4.1
  • Disposition Summary:

    Suppress the unnecessary paragrap in section 7.4.1.4.4.1.3

    This paragraph overspecifies what is a char. It should be removed.
    Note that there is not such a paragraph for wchar.

  • Updated: Thu, 6 Apr 2017 13:50 GMT

Declarator specification in structures overly strict

  • Key: IDL41-1
  • Status: closed   Implementation work Blocked
  • Source: Vanderbilt University ( William Otte)
  • Summary:

    Consider the following from the standard, which defines a struct:

    ```
    (45) <struct_dcl> ::= <struct_def> | <struct_forward_dcl>
    (46) <struct_def> ::= "struct" <identifier> "

    {" <member>+ "}

    "
    (47) <member> ::= <type_spec> <declarators> ";"
    (67) <declarators> ::= <declarator>

    { "," <declarator> }
    (68) <declarator> ::= <simple_declarator>
    ```

    Note rule 67. As stated, the following is valid:

    ```
    struct Foo { int bar, baz; }
    ```

    But neither of the following:

    ```
    struct Foo { int bar; }

    struct Foo { int bar, bad, qux; }
    ```

    If rule 67 is amended thusly:
    ```
    (67) <declarators> ::= <declarator> { "," <declarator> }

    *
    ```

    then all thee above are valid. Is this intended?

    Also, rules 65 and 124 appear to suffer the same deficiency:

    ```
    (65) <any_declarators> ::= <any_declarator>

    { "," <any_declarator> }

    (124) <context_expr> ::= "context" "(" <string_literal>

    { "," <string_literal> }

    ")"
    ```

  • Reported: IDL 4.0 — Tue, 31 May 2016 13:15 GMT
  • Disposition: Resolved — IDL 4.1
  • Disposition Summary:

    Add the missing '' in the rules 65,67 and 124*

    This is just typos resulting from an unfortunate cut and paste.

    Rules 65, 67 and 124 should be:
    (65) <any_declarators> ::= <any_declarator>

    { "," <any_declarator> }

    *
    (67) <declarators> ::= <declarator>

    { "," <declarator> }

    *
    (124) ‎<context_expr>‎ ‎::=‎ ‎"context" "(" <string_literal>

    { "," <string_literal> }

    * ")"‎

    Nothing else has to be changed in the specification.

  • Updated: Thu, 6 Apr 2017 13:50 GMT

Kleene star missing from rules 65 and 67

  • Key: IDL41-11
  • Status: closed   Implementation work Blocked
  • Source: Georgia Tech Research Institute ( Joshua Anderson)
  • Summary:

    <declarators> is defined as <declarator>

    { "," <declarator>}
    <any_declarators> is defined as <any_declarator> { "," <any_declarator>}
    This requires all declarators to be used in pairs.
    Recommended change
    <declarators> := <declarator> { "," <declarator>}

    *
    <any_declarators> := <any_declarator>

    { "," <any_declarator>}

    *

    This better aligns with IDL 3.5 and likely the intention of the standard

  • Reported: IDL 4.0 — Tue, 27 Sep 2016 16:12 GMT
  • Disposition: Duplicate or Merged — IDL 4.1
  • Disposition Summary:

    Same issue as #1

    Mistakes already reported in issue #1

  • Updated: Thu, 6 Apr 2017 13:50 GMT

Map parameter types too restrictive

  • Key: IDL41-13
  • Status: closed  
  • Source: THALES ( Virginie Watine)
  • Summary:

    Currently maps are defined to be parameterized only by "simple types". This means that anonymous types cannot be provided even if they are supported in the profile.
    This is not consistent with sequence definition where anonymous types can be used (provided that BB Anoymous Types be part of the profile)
    => In rule (198), <simple_type_spec> should be replaced with <type_spec>

  • Reported: IDL 4.0 — Thu, 29 Sep 2016 08:54 GMT
  • Disposition: Resolved — IDL 4.1
  • Disposition Summary:

    Change <simple_type_spec> to <type_spec> in map definition

    With this modification, maps will accept anonymous types in parameters (provided that BB Anonymous Types is included)
    This is more consistent with sequences (as said in the text).

  • Updated: Thu, 6 Apr 2017 13:50 GMT

Bitmask default size

  • Key: IDL41-17
  • Status: closed  
  • Source: THALES ( Virginie Watine)
  • Summary:

    Currently the default size of a bitmask is 64.
    32 is actually used much more often and would be a more suitable default value

  • Reported: IDL 4.0 — Thu, 24 Nov 2016 09:45 GMT
  • Disposition: Resolved — IDL 4.1
  • Disposition Summary:

    Set default value of bitmask size to 32

    Amend resolution of issue #5 to set 32 as default value for a bitmask size, instead of 64.

  • Updated: Thu, 6 Apr 2017 13:50 GMT