Interface Definition Language Avatar
  1. OMG Specification

Interface Definition Language — All Issues

  • Acronym: IDL
  • Issues Count: 217
  • Description: All Issues
Open Closed All
All Issues

Issues Summary

Key Issue Reported Fixed Disposition Status
IDL4CPP11-24 cpp_mapping? IDL4-CPP 1.0b2 open
IDL4CPP11-27 Use IDL::traits IDL4-CPP 1.0b2 open
IDL4CPP11-26 Change enum mapping IDL4-CPP 1.0b2 open
IDL4CPP11-25 Example not matching text IDL4-CPP 1.0b2 open
IDL43-106 Definition of constructed types IDL 4.2 open
IDL43-105 Maximum size of a bitset IDL 4.2 open
IDL4CPP11-23 Operators missing IDL4-CPP 1.0b2 open
IDL4CPP11-22 MyBitMaskBits should be _flags IDL4-CPP 1.0b2 open
IDL4CPP11-21 Text has issue IDL4-CPP 1.0b2 open
IDL4CPP11-20 Problems in code example IDL4-CPP 1.0b2 open
IDL4CPP11-19 Typo biset IDL4-CPP 1.0b2 open
IDL4CPP11-18 Using types which use @default/@default_literal IDL4-CPP 1.0b2 open
IDL4CPP11-17 Destructor should be virtual IDL4-CPP 1.0b2 open
IDL43-101 Using annotations for typedef allowed? IDL 4.2 open
IDL4CPP11-16 Definition of value_type IDL4-CPP 1.0b2 open
IDL43-102 May optional be applied to a typedef IDL 4.2 open
IDL4CPP-45 int8/uint8 mapping IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Closed; No Change closed
IDL4CPP-11 Bitmask mapping IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-12 Alternative struct mapping not complete IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-53 The text in the C++ mapping document for bitmasks appears to contradict the text in the IDL4 specification. IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Closed; No Change closed
IDL4CPP-36 Issue with mapping of bounded string and traits IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-38 what argument of exception constructor? IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-52 Typo fixes IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-13 Add bit_bound/underlying_type for enum IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-51 Bitmask chapter should describe argument passing rules IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Closed; No Change closed
IDL4CPP-30 @default on string and wstring? IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Closed; No Change closed
IDL4CPP-87 No type from omg::types available for arrays IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-85 Mapping of constants within an interface not correct, not compilable C++ code IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-10 bitset mapping IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-55 is_bounded/bound for none string/sequence types IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-56 @value annotation used for enum is ambiguously defined IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Closed; Out Of Scope closed
IDL4CPP-48 External mapping IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-44 enum_prefix/enum_postfix required IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Closed; No Change closed
IDL4CPP-41 Example VT1 not correct IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-35 String mapping IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Closed; No Change closed
IDL4CPP-42 Visibility destructor and constructors IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-29 Conflicting annotation application IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Closed; Out Of Scope closed
IDL4CPP-40 Example VT2 not correct IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-43 Map IDL struct to class? IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-31 Section A.1.2.4 needs to include maps as a potential bounded type. IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-49 Missing reference IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-47 Table 7.11 infers inheritance with something from the standard template library IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Closed; No Change closed
IDL4CPP-37 Map to fixed? IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-39 an_attribute not in IDL IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-33 long in C++ code IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-5 a_short in example code IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-6 Destructors should be override instead of virtual IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-7 Specify bounds checking IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-9 @value annotation does not fully specify its behavior IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Closed; Out Of Scope closed
IDL4CPP-2 Availability of IDL Type traits for anonymous types IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-3 bound type IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Closed; No Change closed
IDL4CPP-14 underlying_type traits IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Duplicate or Merged closed
IDL4CPP-8 Use of @range is inconsistent with IDL4 grammar IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Resolved closed
IDL4CPP-4 Mapping to string_view IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Closed; No Change closed
IDL4CPP-15 Clarify constructor IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Closed; Out Of Scope closed
IDL4CPP-28 Can multiple annotations be contained on a type? IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Closed; Out Of Scope closed
IDL4CPP-26 Annotations do not discuss how they interact with language mapped constructs. IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Closed; Out Of Scope closed
IDL4CPP-54 CORBA or non CORBA usage results in non compatible exceptions code IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Deferred closed
IDL4CPP-32 Implicit default and constructor IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Deferred closed
IDL4CPP-20 Add Example Transformation IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Deferred closed
IDL4CPP-50 std::shared_ptr should be passed by value IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Deferred closed
IDL4CPP-34 range/min/max underspecified IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Deferred closed
IDL4CPP-46 Remove IDL to C++11 spec extensions IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Deferred closed
IDL4CPP-27 Using floating point types to instantiate pre C++20 templates IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Deferred closed
IDL4CPP-1 Specify how IDL maps compare their keys IDL4-CPP 1.0a1 IDL4-CPP 1.0b2 Deferred closed
IDL4CPP-86 Use consistant initialization IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Deferred closed
IDL4CPP-16 Add mapping for C++20 modules IDL4-CPP 1.0b1 IDL4-CPP 1.0b2 Deferred closed
IDL43-46 extensibility underspecified IDL 4.2 open
IDL43-47 Mutable and changing annotations IDL 4.2 open
IDL43-48 any value of annotations underspecified IDL 4.2 open
IDL43-70 Restrict key element type for maps IDL 4.2 open
IDL43-77 bitmask/bitvalue scoping IDL 4.2 open
IDL43-73 bitfield identifiers IDL 4.2 open
IDL4CPP11-15 constexpr constructors missing IDL4-CPP 1.0b1 open
IDL4CPP11-14 Mapping to std::shared_ptr allows to much IDL4-CPP 1.0b1 open
IDL4CPP11-13 Don't require operator ==/!= IDL4-CPP 1.0b1 open
IDL4CPP11-12 CORBA::CustomerMarshal typo IDL4-CPP 1.0b1 open
IDL43-100 Spec should describe to which element types @optional should be possible IDL 4.2 open
IDL4CPP11-11 What is the default value of an annotated numeric type whose range does not include the value 0? IDL4-CPP 1.0a1 open
IDL4CPP11-9 CORBA or non CORBA usage results in non compatible exceptions code IDL4-CPP 1.0b1 open
IDL4CPP11-8 std::shared_ptr should be passed by value IDL4-CPP 1.0b1 open
IDL4CPP11-10 Use consistant initialization IDL4-CPP 1.0b1 open
IDL4CPP11-6 range/min/max underspecified IDL4-CPP 1.0b1 open
IDL4CPP11-7 Remove IDL to C++11 spec extensions IDL4-CPP 1.0b1 open
IDL4CPP11-3 Add Example Transformation IDL4-CPP 1.0a1 open
IDL4CPP11-4 Using floating point types to instantiate pre C++20 templates IDL4-CPP 1.0a1 open
IDL4CPP11-2 Add mapping for C++20 modules IDL4-CPP 1.0b1 open
IDL4CPP11-1 Specify how IDL maps compare their keys IDL4-CPP 1.0a1 open
IDL4CPP11-5 Implicit default and constructor IDL4-CPP 1.0b1 open
IDL43-95 Identify the types that numeric annotations can be applied to IDL 4.2 open
IDL43-53 Clarify meaning of array and sequence annotations IDL 4.2 open
IDL43-80 No clarification when annotation is used at various levels IDL 4.2 open
IDL43-79 Ambiguous use of numeric annotation on a typedef IDL 4.2 open
IDL43-91 Setting Floating-point Literals to NaN and infinity not covered under the specification IDL 4.2 open
IDL43-90 Allow true/false as boolean values IDL 4.2 open
IDL43-94 Behavior of default union member not properly specified IDL 4.2 open
IDL43-93 @value annotation used for enum is ambiguously defined IDL 4.2 open
IDL43-50 optional should be a keyword, not an annotaton IDL 4.2 open
IDL43-92 The definition of annotation_body grammar allows typedef IDL 4.2 open
IDL43-89 Missing relationship between min/max/range/default IDL 4.2 open
IDL43-88 IDL 4.2 i.e. the version published as ISO/IEC 19516 is full of broken references IDL 4.2 open
IDL43-87 destructor/raise of exception IDL 4.2 open
IDL43-86 Error! Reference source not found. IDL 4.2 open
IDL43-85 Add support for binary constant default IDL 4.2 open
IDL43-84 bitset memory layout IDL 4.2 open
IDL43-83 Add multimap IDL 4.2 open
IDL43-82 Spec should define defaults for all basic types IDL 4.2 open
IDL43-81 Dead link IDL 4.2 open
IDL43-66 Add ruby as language IDL 4.2 open
IDL43-72 signed_tiny_int should just extend octet_type IDL 4.2 open
IDL43-24 inheritance of unions and enumerations IDL 4.2 open
IDL43-75 Typo: Missing units IDL 4.2 open
IDL43-74 bitset mapping IDL 4.2 open
IDL43-33 Need builtin annotations that can be used to document the IDL IDL 4.2 open
IDL43-71 formal_parameter_type not extended IDL 4.2 open
IDL4CSP11-10 Problem with member accessor IDL4-CPP 1.0b1 open
IDL4CSP11-9 Spec should specify behaviour IDL4-CPP 1.0b1 open
IDL43-69 Additional details needed in definition of maps IDL 4.2 open
IDL43-35 Importing a name scope recursively imports all name scopes nested within it IDL 4.2 open
IDL43-25 Annotation @hashid should be added to 8.3.1 'Group of Annotations General Purpose' IDL 4.2 open
IDL4JAV11-3 Sequences are not concretized IDL4-Java 1.0a1 open
IDL43-4 Syntax and scoping when applying annotations requires clarification IDL 4.2b1 open
IDL43-32 Table formatting IDL 4.2 open
IDL43-21 Constants for Core Data Types IDL 4.2b1 open
IDL43-56 Clarify recursive/forwarded rules for maps IDL 4.2 open
IDL43-49 Add c++11 as language IDL 4.2 open
IDL43-54 Allow nested module definitions IDL 4.2 open
IDL4JAV11-20 Definition of CORBA specific Any (A.1.4 Any) needs to align with 7.3 Any IDL4-Java 1.0b2 open
IDL43-27 Specify where annotations can be applied IDL 4.2 open
IDL4JAV11-1 @java_mapping promote_integer_width does not mention octet IDL4-Java 1.0 open
IDL4CSP11-7 The class shall implement the IEquatable interface, where T is the corresponding class name. IDL4-CSHARP 1.0 open
IDL4CSP11-8 Use of annotations as part of IDL example do not provide a clean example IDL4-CSHARP 1.0 open
IDL4CSP11-6 Use of anonymous array type in array section IDL4-CSHARP 1.0 open
IDL43-52 Remove the bifuration of basic and full inetrfaces IDL 4.2 open
IDL43-51 Behaviour when nested is not present should be standardized IDL 4.2 open
IDL4CSP11-5 Sections mapped to naming schemes complicates the document IDL4-CSHARP 1.1b1 open
IDL4CSP11-4 A canonical example for sequences is missing IDL4-CSHARP 1.0 open
IDL4CSP11-3 Basic types include extended types IDL4-CSHARP 1.1b1 open
IDL43-45 Missing hyperlinks for CORBA speficiations IDL 4.2 open
IDL4JAV11-19 Missing extended basic types section IDL4-Java 1.0 open
IDL4JAV11-18 Mapping to alternative identifier formats IDL4-Java 1.0 open
IDL4JAV11-17 Application of Non-Standard Annotations IDL4-Java 1.0 open
IDL4JAV11-16 Annotation usage IDL4-Java 1.0 open
IDL4JAV11-15 Anonymous types sections needs text IDL4-Java 1.0 open
IDL4JAV11-14 Annotations should not be used for examples in a canonical mapping IDL4-Java 1.0 open
IDL4JAV11-13 Union exmple uses octet which is not allowed as a discrimant IDL4-Java 1.0 open
IDL4JAV11-12 Table 7.2 IDL4-Java 1.0 open
IDL4JAV11-11 Document Review: Table 7.1 IDL4-Java 1.0 open
IDL43-44 Feature macros to guard building blocks IDL 4.2 open
IDL43-43 Ability to add annotations by reference IDL 4.2 open
IDL43-9 Missing bullet "Integers restricted to holding 8 bits of information" IDL 4.2b1 open
IDL43-42 Annotation for union discriminator name IDL 4.2 open
IDL43-41 Restrict bitshifts IDL 4.2 open
IDL43-40 Allow enumerator value to be set without using @value IDL 4.2 open
IDL4CSP11-2 Union implicit default IDL4-CSHARP 1.1b1 open
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
IDL43-39 Use of Omg.Types IDL4-CSHARP 1.1b1 open
IDL4CSP11-1 Partial classes cannot span assemblies IDL4-CSHARP 1.1b1 open
IDL43-38 Allow empty IDL modules IDL 4.2 open
IDL43-37 Explain how to handle when an annotation appears in attributes with multiple declarators IDL 4.2 open
IDL43-36 clarify forwarding rules related to structure inheritance IDL 4.2 open
IDL43-34 Need the concept of a "using namespace" directive to simplify IDL files IDL 4.2 open
IDL43-31 Rules for Qualified Names need to take into account other Building Blocks IDL 4.2 open
IDL43-30 current IDL4 grammar breaks backward compatibility with respect to short hand notations IDL 4.2 open
IDL43-29 References to a Template Module: Syntax doesn't match example IDL 4.1 open
IDL43-28 Extended structs that are both inheriting and empty IDL 4.2 open
IDL43-26 Some standardized annotations use keywords as identifiers IDL 4.2 open
IDL43-23 Incorrect rule number on connector_inherit_spec IDL 4.2 open
IDL43-22 Typos in 8.2.2 enumerated list IDL 4.2b1 open
IDL4JAV11-10 Bitset inheritance IDL4-Java 1.0b2 open
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
IDL4JAV11-8 Typo fixes IDL4-Java 1.0a1 open
IDL4JAV11-9 Typos and Inconsistencies IDL4-Java 1.0a1 open
IDL4JAV11-5 Provide strong abstraction for arrays IDL4-Java 1.0a1 open
IDL4JAV11-7 Anonymous types are a separate Building Block IDL4-Java 1.0a1 open
IDL4JAV-13 Typos and Inconsistencies IDL4-Java 1.0a1 IDL4-Java 1.0 Deferred closed
IDL4JAV11-6 Union mapping IDL4-Java 1.0a1 open
IDL4JAV-7 Typo fixes IDL4-Java 1.0a1 IDL4-Java 1.0 Deferred closed
IDL4JAV11-4 Interfaces - Full should define a FooOperations interface IDL4-Java 1.0a1 open
IDL41-9 Clarify and perhaps expand where annotations can be applied IDL 4.0 IDL 4.1 Resolved closed
IDL43-11 Unicode apostrophe in source code IDL 4.2b1 open
IDL43-10 Mapping int8/uint8 in absence of target language native support IDL 4.2b1 open
IDL43-12 Incorrect rule number on IDL 4.2b1 open
IDL43-3 Typo in title of 7.4.1.4.1 IDL 4.2b1 open
IDL43-5 Typo in Annex A: Consolidated IDL Grammar IDL 4.2b1 open
IDL43-8 Copy/paste problem at IDL 4.2b1 open
IDL43-7 Apparently incomplete phrase IDL 4.2b1 open
IDL43-2 Formatting error in title of 7.4.13.4 IDL 4.2 open
IDL43-1 Typo in section 7.4.1.4.4.4.3 Enumerations IDL 4.2 open
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

cpp_mapping?

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The text talks about struct_mapping, but shouldn't the text refer to cpp_mapping and say that the default is STRUCT_WITH_PUBLIC_MEMBERS, the internal struct_mapping with the default is just an internal thing (maybe rename struct_mapping to just value), when I look at IDL4.2, it has in 8.3.1.2 the autoid annotation, there AutoidKind is just not mentioned and the user uses @autoid, and not @AutoidKind

  • Reported: IDL4-CPP 1.0b2 — Thu, 24 Oct 2024 11:08 GMT
  • Updated: Thu, 31 Oct 2024 10:31 GMT

Use IDL::traits

  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    IDL to C++11 defines a set of IDL::traits, but this spec uses the old CORBA::traits, section A has to be updated/cleaned to use IDL::traits

  • Reported: IDL4-CPP 1.0b2 — Mon, 28 Oct 2024 13:52 GMT
  • Updated: Mon, 28 Oct 2024 14:57 GMT

Change enum mapping

  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The proposed enum mapping makes it harder to migrate from C+03 to C11 or newer, why not map this to a class with a _flags enum as member (same as bitmask does). The _flags enum contains the enum elements as defined in IDL, this way user code can use AnEnum::zero independent whether C03 or C+11 is used

  • Reported: IDL4-CPP 1.0b2 — Mon, 28 Oct 2024 13:48 GMT
  • Updated: Mon, 28 Oct 2024 14:57 GMT

Example not matching text

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The example has the following operations for a_long (same issue happens with the others)

    void a_long(int32_t value)

    {...}
    int32_t& a_long() {...}

    int32_t a_long() const

    {...}

    a_long is a basic type, so according to the text it should have:

    <MemberType> <MemberName>()
    <MemberType> <MemberName>() const;

    Both return by value, but the example has one returning by reference.

    Also the setter for a_struct doesn't match the text, seems this chapter needs some review and tweaks

  • Reported: IDL4-CPP 1.0b2 — Mon, 28 Oct 2024 13:21 GMT
  • Updated: Mon, 28 Oct 2024 14:57 GMT

Definition of constructed types

  • Key: IDL43-106
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Constructed types are types that are created by an IDL specification.

    All types are created by an IDL specification, this is not a characterization that distinguishes constructed types.

    I propose
         Constructed types are types that have members.

    This would provide distinction from other types.

  • Reported: IDL 4.2 — Mon, 28 Oct 2024 05:17 GMT
  • Updated: Mon, 28 Oct 2024 14:53 GMT

Maximum size of a bitset

  • Key: IDL43-105
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec defines that a bitfield can be a maximum of 64bits, but it doesn't say anything about the maximum size of the bitset, can we create a bitset with 1000 fields of each 64bits? Is that legal, or is there some limit to the maximum size of a bitset

  • Reported: IDL 4.2 — Mon, 21 Oct 2024 12:47 GMT
  • Updated: Mon, 28 Oct 2024 14:50 GMT


MyBitMaskBits should be _flags

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The text says that the code should use a _flags enum, but the example usees MyBitMaskBits

  • Reported: IDL4-CPP 1.0b2 — Tue, 8 Oct 2024 13:41 GMT
  • Updated: Fri, 11 Oct 2024 14:38 GMT

Text has issue

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The text says

    An implementation of the !=, &=, and ^= bitwise operators

    But that should use operator |= and not !=

  • Reported: IDL4-CPP 1.0b2 — Tue, 8 Oct 2024 13:39 GMT
  • Updated: Fri, 11 Oct 2024 14:38 GMT

Problems in code example

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The struct MyBitMask as example code has the following buts:

    • After `flag1 = 0x01 <<` the 1 is missing
    • operator|= has an incorrect first implementation line, should be `_value |= other;`
    • operator&= has a wrong argument , should be `std::uint32_t other`
    • operator uint32_t() can be const
  • Reported: IDL4-CPP 1.0b2 — Tue, 8 Oct 2024 13:38 GMT
  • Updated: Fri, 11 Oct 2024 14:37 GMT

Typo biset

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    This section has:

    IDL biset types shall be mapped as defined in Clause 7.14.3.2 of this specification.

    Notice the typo, biset should be bitset

  • Reported: IDL4-CPP 1.0b2 — Tue, 8 Oct 2024 13:22 GMT
  • Updated: Fri, 11 Oct 2024 14:37 GMT

Using types which use @default/@default_literal

  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec is not clear when a type annotated with @default/@default_literal will really use these annotations

    For example when I have in IDL the following:

    @default(5) typedef long mylong;

    When I now use in C++

    mylong myvalue {};

    What would be the value of myvalue, would it be 5 (the default I specified), or will it be 0?

    Also when I have in IDL

    enum Color

    { GREEN, @default_literal RED, BLUE }

    ;

    And in C++ I have

    Color mycolor {};

    What is the value of mycolor, RED or GREEN?

    RTI support says these annotations are only used when the IDL type is used within a complex type (struct/union/exception), but if that is the case the IDL spec should mention this.

    Some other related questions/thinking points

    • What when using array/sequences/map of these types?
    • what about @range?
  • Reported: IDL4-CPP 1.0b2 — Fri, 4 Oct 2024 11:48 GMT
  • Updated: Fri, 11 Oct 2024 14:36 GMT

Destructor should be virtual

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    As the class ValueFactoryBase has no base class the destructor should be virtual and not override, same error is made in more examples

  • Reported: IDL4-CPP 1.0b2 — Thu, 26 Sep 2024 11:32 GMT
  • Updated: Fri, 27 Sep 2024 19:37 GMT

Using annotations for typedef allowed?

  • Key: IDL43-101
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Some text for the annotations refers to element, but the introduction in 8.3.1 says "They may be applied on almost all kinds of elements", but what is an element. It looks for example logical that optional/value/min/max/unit/range can also be applied to a typedef, for example "@optional typedef boolean opt_bool1;". In a DDS world these annotations are mostly only used for types, but with CORBA/LwCCM adding them to a typedef could also mean that for example a optional is passed with a method call.

    The spec should be more precise whether applying annotations to a typedef is legal.

  • Reported: IDL 4.2 — Fri, 9 Aug 2024 12:33 GMT
  • Updated: Fri, 27 Sep 2024 18:28 GMT

Definition of value_type

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The definition of value_type says `Defines type - Type to be used as return C++ type.`, but in what context is return handled. For example in the struct class mapping for type T a const and non-const accesor is defined. Shouldn't be value_type defined as `The template parameter T.`, just as A.1.1 does?

  • Reported: IDL4-CPP 1.0b2 — Thu, 26 Sep 2024 11:25 GMT
  • Updated: Fri, 27 Sep 2024 14:03 GMT

May optional be applied to a typedef

  • Key: IDL43-102
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec is not clear where optional may be applied, I wanted to use it with a typedef, see the test below, but it seems DDS XTypes disallowed it but IDL4 does seem to allow it, it says "This annotation may be used to set optionality on any element that makes sense to be optional.", my example makes sense about it. The spec should be more precise where this annotation (and others) maybe used

    module Test {
    @optional
    typedef long OptLongFoo;
    struct Bar

    { OptLongFoo f; };
    struct Z
    { OptLongFoo f; }

    ;
    };

  • Reported: IDL 4.2 — Fri, 6 Sep 2024 13:00 GMT
  • Updated: Fri, 27 Sep 2024 13:59 GMT

int8/uint8 mapping

  • Key: IDL4CPP-45
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Given this is the old CORBA style, wouldn't it be more consistent to use CORBA::TinyShort and CORBA::UTinyShort, that matches the other types as defined in D.2.1.5

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:50 GMT
  • Disposition: Closed; No Change — IDL4-CPP 1.0b2
  • Disposition Summary:

    General consensus is to maintain the current mapping

    The general consensus is to maintain CORBA::Int8 and CORBA::UInt8 for mapping the int8 and uint8 types, instead of renaming them to CORBA::TinyShort and CORBA::UnsignedTinyShort.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Bitmask mapping

  • Key: IDL4CPP-11
  • Status: closed   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The bitmask mapping allows misuse and is not really a modern API. At least for the users who map a struct to a class the bitmask mapping could for example use a strong enum (mappping now two bitmasks with the same member name will result in non compiling C++ code), but provide the operators ~, |, &, ^, |=, &=, and ^= to make it safe.

  • Reported: IDL4-CPP 1.0b1 — Mon, 31 Jul 2023 11:42 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Mapping Bitmasks to structs containing an enum and several operators

    As suggested in the issue, mapping bitmasks to structs containing the former enum and several operators improves the usability of the mapped type.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Alternative struct mapping not complete

  • Key: IDL4CPP-12
  • Status: closed   Implementation work Blocked
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    The mapping for alternative struct mapping is lacking the constructors, member initialization, non-const accessors, description of how it works when using IDL4 struct inheritance, etc, see the IDL to C++11 language mapping for a full description

  • Reported: IDL4-CPP 1.0b1 — Thu, 3 Aug 2023 07:30 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Add additional constructors and accessors to alternative mapping for structs

    Clause 8.1.1 provides an alternative mapping for structs using the @cpp_annotation and setting struct_mapping to CLASS_WITH_PUBLIC_ACCESSORS_AND_MODIFIERS. In this resolution, we provide extra constructors and accessor methods for usability purposes.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

The text in the C++ mapping document for bitmasks appears to contradict the text in the IDL4 specification.

  • Key: IDL4CPP-53
  • Status: closed  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The IDL 4 spec states the default bit_bound is 32 bits the C++ mapping document states:
    IDL bitmask declarations shall be mapped to two C++ type names:

    • An unscoped enum named <Bitmask>Bits with an explicitly defined underlying type. That underlying type
      is the smallest mapped unsigned integer type that has sufficient bits for the bit_bound of the bitmask:
      uint8_t, for values between 1 and 8; uint16_t for bit_bound values between 9 and 16; uint32_t, for
      values between 17 and 32; and uint64_t for values between 33 and 64. The <Bitmask>Bits enumerators
      are the values defined in the scope of the IDL bitmask, with each enumerator explicitly initialized to its
      corresponding integer value.
  • Reported: IDL4-CPP 1.0a1 — Fri, 1 Mar 2024 22:17 GMT
  • Disposition: Closed; No Change — IDL4-CPP 1.0b2
  • Disposition Summary:

    IDL4 specifies the default size for Bitmasks

    Clause 7.4.13.4.3.3 of IDL 4.2 states that "By default, the size of a bit mask is 32." Therefore, if @bit_bound is unspecified, we should assume the underlying type is uint32_t. It also states that "Two annotations can be used to amend a bit mask definition:" @bit_bound and @position. While an explicit @bit_bound would change the size of the bit mask, as stated in IDL 4.2, "Possible positions range from 0, which corresponds to the less significant bit, up to (size – 1), which corresponds to the most significant one." Because this specification specifies the mapping for all possible values of @bit_bound, there is no need to specify the underlying type for the default as it is 32 per IDL 4.2.

    Future versions of this specification or IDL RTFs may include further clarifications to facilitate the understanding of default behaviors.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Issue with mapping of bounded string and traits

  • Key: IDL4CPP-36
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec says for bounded strings " For interoperability purposes, implementers shall always define omg::types::bounded_string<N>, which may be declared as an alias to std::string". There is a problem when a bounded string is mapped to just a typedef/using of a std::string. At that moment it is not a distinct type so the traits will not work, as example, when defining this IDL

    typedef string<5> bounded_bar1;
    typedef string<5> bounded_bar2;

    And both map to just std::string, the following code will not work correctly

    if (traits<Test::bounded_bar>::is_bounded ()) {}
    if (traits<Test::bounded_bar>::bound () == 5) {}

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:15 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Clarify that omg::types::bounded_<type><N> shall always be defined for potential trait specializations

    With this resolution, the specification makes it clear that implementers shall always define omg::types::bounded_string<N> for potential use of trait specializations.

    Future versions of this spec may explore different avenues for mapping bounded strings.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

what argument of exception constructor?

  • Key: IDL4CPP-38
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In the example code it lists "AnException(int32_t error_code, const char* what)

    {...}

    ", but the what argument is not described anywhere, it is not in IDL, where is it coming from?

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:21 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    *Add requirement for implementation of what() method in exceptions *

    Specify that the mapped Exception class shall implement the virtual what() method declared by std::exception, which the mapped Exception inherits from, and at a minimum provide a mechanism to provide such explanatory information in the explicit constructor that provides a mechanism to set the value of all exception members.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Typo fixes

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

    1.
    In table 7.1 5th row (struct is_bounded) right column:

    Indicates whether a type is bounded or not.,

    → Remove comma at end.

    2.
    In section A.1.7.4 TypeCode Replacement, there is a small typo,

    Omg::types::ref_type<CORBA::TypeCode> type() const;

    The beginning should be omg:: not Omg::.

    3.
    Section title,
    D.2.1.3.3 Bitmask Tye

    → Bitmask Type

    4.
    In section D.3.1.3.2 Bitsets,

    IDL biset types shall be mapped as defined in Clause 7.14.3.2 of this specification.

    bitset types

  • Reported: IDL4-CPP 1.0b1 — Tue, 27 Feb 2024 14:15 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Fix typos identified in this issue

    This issue addressed all reported typos.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Add bit_bound/underlying_type for enum

  • Key: IDL4CPP-13
  • Status: closed  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    The bit_bound annotation can also be applied to an enum, so add bit_bound/underlying_type also to the enum traits

  • Reported: IDL4-CPP 1.0b1 — Sat, 5 Aug 2023 14:49 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Add bit_bound and underlying_type traits to enums

    This issue adds the bit_bound and underlying_type traits to enums consistently to the traits we have added to bitmasks.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Bitmask chapter should describe argument passing rules

  • Key: IDL4CPP-51
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec should be describe that bitmasks do follow the same argument passing rules as a enum/basic type, for an in argument they should be passed by value. Also for union accessors it should describe that they follow the enum rules

  • Reported: IDL4-CPP 1.0b1 — Fri, 2 Feb 2024 13:39 GMT
  • Disposition: Closed; No Change — IDL4-CPP 1.0b2
  • Disposition Summary:

    No longer an issue with resolution of IDL4CPP-11

    Per the resolution of IDL4CPP-11, Bitmasks no longer result on built-in types or enums, so the rules for the rest of types apply.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

@default on string and wstring?

  • Key: IDL4CPP-30
  • Status: closed  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Can a default annotation be applied to string types (bounded and unbounded)?

  • Reported: IDL4-CPP 1.0a1 — Wed, 10 Jan 2024 19:45 GMT
  • Disposition: Closed; No Change — IDL4-CPP 1.0b2
  • Disposition Summary:

    @default on string and wstring are allowed

    While there is no example indicating how to use @default with strings or wstrings, there's nothing in the IDL4 specification or its C++ language mapping that prevents its use. No changes in the spec are necessary.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

No type from omg::types available for arrays

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

    Section 7.2.4.2 Template Types makes available types in namespace omg::types that may be used as substitutes for the native C++ types.

    The same does not apply to section 7.2.4.4 for arrays.
    Please change the first phrase in 7.2.4.4 to:

    IDL arrays shall be mapped to a C++ std::array<T>, or to a type named omg::types::array<T> that delivers std::array<T> semantics.

  • Reported: IDL4-CPP 1.0b1 — Mon, 6 May 2024 13:31 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Add omg::types::arrays for consistency

    This issue adds the definition of omg::types::arrays, for consistency with other types that are mapped to either std:: equivalents or omg::types.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Mapping of constants within an interface not correct, not compilable C++ code

  • Key: IDL4CPP-85
  • Status: closed   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec maps a constant within an IDL interface to a constexpr member, but this doesn't compile:

    i.cpp:8:1: error: non-static data member ‘PI’ declared ‘constexpr’
    8 | constexpr double PI = 3.14;

    ^~~~~~~~~
  • Reported: IDL4-CPP 1.0b1 — Fri, 12 Apr 2024 09:41 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Constants declared in the context of an interface shall be marked as static

    To avoid build errors, constants declared in the context of an interface (full) shall be mapped to static constexpr.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

bitset mapping

  • Key: IDL4CPP-10
  • Status: closed   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    For anyone using the class mapping of a structure the spec should also provide a class mapping for a bitset, that way they have a consistent API. Also why is a inherited bitset not mapped to C++ inheritance, by removing the inheritance the inheritance relation can't be used in C++ also

  • Reported: IDL4-CPP 1.0b1 — Mon, 31 Jul 2023 11:36 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Change bitset inheritance behavior

    This issue replaces the inheritance behavior for bitsets, which was based on adding inherited members to the struct, to a C++ inheritance scheme.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

is_bounded/bound for none string/sequence types

  • Key: IDL4CPP-55
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    it is not clear what the traits is_bounded/bound are for non string/sequence types, for example a long. The spec says the trait is empty, but it is there, what is the value then. When looking at the std traits, it seems better that is_bounded returns false_type (follows https://en.cppreference.com/w/cpp/types/is_bounded_array) and bound returns 0 (follows https://en.cppreference.com/w/cpp/types/rank)

  • Reported: IDL4-CPP 1.0b1 — Sun, 3 Mar 2024 07:31 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Remove is_bounded and bound traits from the list of common type traits

    This resolution removes is_bounded and bound traits from the list of common type traits, as they only applied to types that can may have bounds, such as strings, sequences, or maps.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

@value annotation used for enum is ambiguously defined

  • Key: IDL4CPP-56
  • Status: closed  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Should the C++ mapping document specify that @value annotations, if specified for one field, MUST be used on all fields.

  • Reported: IDL4-CPP 1.0a1 — Mon, 18 Mar 2024 20:10 GMT
  • Disposition: Closed; Out Of Scope — IDL4-CPP 1.0b2
  • Disposition Summary:

    This issue shall be addressed in IDL 4.3 RTF

    We have filed IDL43-93 to address this issue in the IDL 4.3 RTF. The IDL to C++ Language Mapping specification does not need to define the syntax or scope of @value at this moment.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

External mapping

  • Key: IDL4CPP-48
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The mapping of external in this section is not similar to 7.17.4. In 7.17.4 it is a std::shared_ptr, so a pointer to something which is shared, when copying the struct where the external is a member of the external data will not be copied, just a refcount increment, but in D2.3.4 it is descriibed that when the struct which contains the external member is copied a deep copy is done. Also what is exactly "copy functions", is that the copy constructor or something else? This looks very unspecified, the user doesn't know the exact API and the semantics should be the same as in 7.17.4

  • Reported: IDL4-CPP 1.0b1 — Fri, 26 Jan 2024 07:39 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Add extra restriction to the mapping of @external

    For consistency purposes, this resolution adds an extra restriction to the mapping of @external.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

enum_prefix/enum_postfix required

  • Key: IDL4CPP-44
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    As far as I understand it enum_prefix/enum_postfix are a way to change the enum mapping but I don't understand why, because the enums itself are added to the enclosing module, so the following IDL is already illegal, red can't be defined twice
    scope. For example the following IDL is illegal

    enum Colors { red, green, blue };
    enum Colors2 { red, green, blue };
    

    See IDL4.2, chapter 7.5.2, search for "Enumeration value names are introduced into the enclosing scope and then are treated like any other declaration in that

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:48 GMT
  • Disposition: Closed; No Change — IDL4-CPP 1.0b2
  • Disposition Summary:

    Enum prefixes and postfixes prevent conflicts with external C++ code

    In C++ 98, the mapping of IDL enums does not prevent conflicts of IDL-defined literals with the C++ code a user might be mixing or linking against. That's why even though the IDL grammar does not allow conflicts in literals within the same IDL code (such conflicts are illegal in IDL), an end user might have conflicts in the generated code, which can only be prevented adding prefix or postfix enum literal names. Mapping enums to enum classes does address this issue, but such functionality is unavailable in C++ 98.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Example VT1 not correct

  • Key: IDL4CPP-41
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    For IDL type VT1 the example code is not correct:

    • virtual is missing for all pure virtual methods
    • a_long_attr is an attribute, so "int32_t& a_long_attr() = 0;" should be removed
  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:30 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Fix mapping of VT1 in example mapping of Clause 7.6 "Value Types"

    The C++ mapping for VT1 in Clause 7.6 contains a number of errors, this resolution addresses such errors providing the correct code snippet.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

String mapping

  • Key: IDL4CPP-35
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The mapping says "IDL strings shall be mapped to C++ std::string, or to a type named omg::types::string that delivers std::string semantics", but when I now have CORBA and use an interface with operation "void set_string (in string text);", what is now the C++ signature I have to override in my servant implementation, it could be "void set_string(const std::string& text) override;", or "void set_string(const omg::types::string& text) override;" which could lead to portability issues when some vendor uses std::string and another omg::types::string. For defining data it doesn't make a real difference, but it is a problem when using CORBA

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:07 GMT
  • Disposition: Closed; No Change — IDL4-CPP 1.0b2
  • Disposition Summary:

    Question has been addressed in Jira Issue

    There is nothing to change in the specification. Future versions of the specification could add further instructions on how to deal with various implementations of omg::types::strings.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Visibility destructor and constructors

  • Key: IDL4CPP-42
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The text describes that the destructor and other constructors are protected, but the example code shows them all public, the C++ code should be updated to match the text

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:37 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Fix indentation of protected and replace use of std::string with omg::types::string

    This issue fixes the indentation of protected and replaces the use of std::string with omg::types::string in clause A.1.10.2.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Conflicting annotation application

  • Key: IDL4CPP-29
  • Status: closed  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    What happens when the following is present in an IDL file:

    typedef @min(2) @max(1) long Huh;

  • Reported: IDL4-CPP 1.0a1 — Wed, 10 Jan 2024 19:42 GMT
  • Disposition: Closed; Out Of Scope — IDL4-CPP 1.0b2
  • Disposition Summary:

    Issue to be addressed in IDL 4.3 RTF

    This issue refers to the IDL grammar, rather than the language mapping. Therefore, it will be addressed in the IDL 4.3 RTF.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Example VT2 not correct

  • Key: IDL4CPP-40
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The valuetype VT2 is defined in IDL, but the example C++ code is not correct, it says

    class VT2 : public virtual VT1 {
    public:
    virtual void op() = 0;
    virtual int32_t third_long() const = 0;
    virtual int32_t& third_long() const = 0;
    virtual void third_long(int16_t value) = 0;
    };
    

    But it should be

    class VT2 : public virtual VT1 {
    public:
    virtual void op() = 0;
    virtual int32_t third_long() const = 0;
    virtual int32_t& third_long() = 0;
    virtual void third_long(int32_t value) = 0;
    };
    
  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:27 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Fix mapping of VT2 in Clause 7.6 "Value Types"

    Clause 7.6 "Value Types" contains a typo in the mapping of a long, this issue fixed the typo mapping the IDL long to int32_t instead of int16_t.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Map IDL struct to class?

  • Key: IDL4CPP-43
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Why does this example code for "C.2.1.2.4 Naming Data Types" map the IDL struct to a C++ class, that is the alternative mapping, but as far as I understand it the mapping prefers to map a IDL struct to a C++ struct by default

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:40 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Fix mapping of naming data types in C.2.1.2.4

    In clause C.2.1.2.4, IDL struct MyType is mapped to a class, instead of a struct, which is the correct mapping. This issue addresses that mistake.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Section A.1.2.4 needs to include maps as a potential bounded type.

  • Key: IDL4CPP-31
  • Status: closed  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The section is silent on maps.

  • Reported: IDL4-CPP 1.0b1 — Wed, 17 Jan 2024 16:32 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Refer to Maps in clause A.1.2.4

    Clause A.1.2.4, which addresses the exception type for bounded types shall refer to strings, wstrings, sequences, and maps.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Missing reference

  • Key: IDL4CPP-49
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    A link is broken, it mentions:

    Maps shall provide the following specializations for the type traits defined in Clause Error: Reference source not found:

  • Reported: IDL4-CPP 1.0b1 — Fri, 26 Jan 2024 07:41 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Fix broken cross references

    The specification includes a number of broken cross references. This issue replaces broken cross references with the appropriate sections.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Table 7.11 infers inheritance with something from the standard template library

  • Key: IDL4CPP-47
  • Status: closed  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The text:
    "Inherits std::integral_constant<uint32_t, b> where b indicates
    the bit_bound of the bitmask."

    should instead state

    Defines value - Where the value is mapped as the underlying bit_bound of the bit mask.

  • Reported: IDL4-CPP 1.0a1 — Thu, 1 Feb 2024 19:12 GMT
  • Disposition: Closed; No Change — IDL4-CPP 1.0b2
  • Disposition Summary:

    Type traits may be inherited

    Type traits may be inherited, and it is indeed a common practice, so the mapping should remain as is. The restriction would be to inheritance of classes that have a state, such as std::vector or std::string.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Map to fixed?

  • Key: IDL4CPP-37
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    As all types in the spec are lower case, shouldn't IDL fixed be mapped to C++ fixed (all lower case)

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:16 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Renaming Fixed to fixed for consistency purposes

    This specification defines common C++ types using lowercase names, such as bounded_string, bounded_sequence, etc. Therefore, for consistency purposes, the Fixed class shall be renamed to fixed.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

an_attribute not in IDL

  • Key: IDL4CPP-39
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The example for interfaces full lists in IDL the attribute "an_attribute", but the cod example uses "attribute", which is not correct

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:23 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Fix example mapping of attribute in Interfaces - Full

    The example for Interfaces - Full contains an error in the mapped name of an attribute.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

long in C++ code

  • Key: IDL4CPP-33
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In the example code there is "using Length = long;", but long is not portable, shouldn't be this be int32_t?

  • Reported: IDL4-CPP 1.0b1 — Tue, 16 Jan 2024 09:46 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Replace use of C++ long in example code with int32_t

    IDL longs are mapped to C++ int32_t, the example in clause 7.2.4.6 makes the mistake of mapping a typedef long to a using of long instead of int32_t.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

a_short in example code

  • Key: IDL4CPP-5
  • Status: closed  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    In the example code it lists
    const int16_t& a_short()

    {...}
    but shouldn't that be
    int16_t a_short() const {...}

    This should be a return by value, using `const int16_t` will lead to a compiler warning, so it should be 'int16_t', all accessors should be checked.

  • Reported: IDL4-CPP 1.0b1 — Thu, 23 Mar 2023 14:10 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Update mapping of a_short in example code

    Accessors for members of the union for which the mapped type results in primitive types and enums shall return by value. Therefore, the updated example reflects that:

    // ...
    void a_long(int32_t value) {...}
    int32_t a_long() const {...}
    // ...
    

    The updated example also includes members that result in non-primitive types like strings or structs.

    As part of the resolution of this issue we also provide a method to set the discriminator to a specific legal value when the union definition has an implicit default member (the current mapping only provides a _default() that sets the discriminator to a legal default value).

    We also mandate that non-primitive members provide two getters:

    const Foo& a_foo() const {}
    Foo& a_foo() {}
    

    and primitive members the following two getters:

    int16_t a_long() const {}
    int16_t& a_long() {}
    

    If the getter selects a branch that does not match the discriminator value, the getter should throw an error.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Destructors should be override instead of virtual

  • Key: IDL4CPP-6
  • Status: closed  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    In the example code the destructors in classes that derive from a base should be marked override, not virtual, this applies to

    • 6.18.4: Change "virtual ~Example();" to "~Example() override;" and "virtual ~OBV_Example();" to "~OBV_Example() override;"
    • 6.20: Change "virtual ~Exception();" to "~Exception() override;" and "virtual ~SystemException();" to "~SystemException() override;"
    • 6.25: Change "virtual ~MyLocalIF();" to "~MyLocalIF() override;"
    • 6.26.6: Change "virtual ~A_skel ();" to "~A_skel () override;" and "virtual ~A_impl ();" to "~A_impl () override;"
    • 6.26.8: Change "virtual ~TIE() = default;" to "~TIE() override = default;"
  • Reported: IDL4-CPP 1.0b1 — Thu, 23 Mar 2023 14:18 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Convert virtual destructors in overrides

    To resolve this issue, all virtual destructors are converted to overrides.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Specify bounds checking

  • Key: IDL4CPP-7
  • Status: closed  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    Reporting this for bounded sequences, but very likely this has to be addressed for all bounded types. The spec says "NOTE—In any case, bound checking on bounded sequences may be performed at serialization time, raising an
    exception or reporting an error if necessary", but this should be more strict to my idea, the bounds check must be performed, and the spec should specify which exception is raised when the bound is not respected

  • Reported: IDL4-CPP 1.0b1 — Sat, 25 Mar 2023 10:41 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Specify that middleware implementations may mandate specific bound checking mechanisms

    This issue tries to convey that middleware implementations may introduce more explicit bound checking mechanisms.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

@value annotation does not fully specify its behavior

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

    The @value annotation does not fully specify the behavior. That includes:

    • The behavior for unannotated values.
    • The behavior for repeated values. Is it possible like in C++?

    DDS-XTYPES does specify the behavior of @value and such description should be added to IDL:

    7.3.1.2.1.5 Enumerated Literal Values
    Prior to this specification, it was impossible to indicate that objects of enumerated types could be stored using an integer size other than 32 bits. This specification uses the @bit_bound annotation defined in Sub Clause 8.3.4.1 of [IDL] for this purpose.

    It is important to note that the value member of the annotation may take any value from 1 to 32, inclusive, when this annotation is applied to an enumerated type. Furthermore, prior to this specification, it was impossible to provide an explicit value for an enumerated literal. The value was always inferred based on the definition order of the literals. That behavior is still supported. However, additionally, this specification allows enumerated literals to be given explicit custom values, just as they can be in the C and C++ programming
    languages. This can be done by means of the @value annotation defined in Sub Clause 8.3.1.5 of [IDL], which may be applied to individual literals.
    It is permitted for some literals in an enumerated type to bear the @value annotation while others do not. In such cases, as in C and C++ enumerations, implicit values are assigned in a progression starting from the most-recently specified value (or an implicit value of zero for the first literal, if there is no previous specified value) and adding one with each successive literal.

  • Reported: IDL4-CPP 1.0a1 — Tue, 20 Jun 2023 17:54 GMT
  • Disposition: Closed; Out Of Scope — IDL4-CPP 1.0b2
  • Disposition Summary:

    Issue to be addressed in IDL4.

    This issue should be addressed in the IDL 4.3 RTF.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Availability of IDL Type traits for anonymous types

  • Key: IDL4CPP-2
  • Status: closed  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    This new spec seems to try to support anonymous types (at least it doesn't disallow them like IDL to C++11), but how are then the type traits provided for anonymous types. For example the type

    struct TopicA

    { sequence<long, 5> l5s; }

    ;

    Is there a way for the user to get the IDL traits for bound/is_bounded for the l5s member? If that is not possible for anonymous types this language mapping should make that clear, that anonymous types don't have a type trait.

  • Reported: IDL4-CPP 1.0b1 — Thu, 23 Mar 2023 14:02 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Add a note to clause 7.15 to illustrate type traits for anonymous types

    This resolution adds an example that shows how to aquire acquire the declared type of a struct member and use it in a traits declaration.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

bound type

  • Key: IDL4CPP-3
  • Status: closed  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    This mapping defines the bound as std::integral_constant<size_t, b> but in most compilers size_t is 64bit where sequences/strings are bound to 32bit by IDL, so shouldn't size_t be replaced by uint32_t. If this is changed here, also check all other size_t types in this mapping

  • Reported: IDL4-CPP 1.0b1 — Thu, 23 Mar 2023 14:04 GMT
  • Disposition: Closed; No Change — IDL4-CPP 1.0b2
  • Disposition Summary:

    IDL Language Mappings Should Not Impose Bound Limits

    Limits on bound sizes are imposed by the serialization format of middleware such as CORBA and DDS (e.g., CORBA specifies the behavior for the serialization for sequences bigger than uint32_t, and that should be enough for the middleware implementer). IDL and the corresponding IDL language mappings need not impose such limits.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

underlying_type traits

  • Key: IDL4CPP-14
  • Status: closed  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    The underlying_type traits is maybe something to remove, std::underlying_type does the same at the moment bitmask is implemented using an enum. Also I am doubting whether an enum or enum class is the best mapping, have you tried to implement some user code, there is no operator bool() for example, some for checking if a bit is set we always have to cast. Maybe mapping to a class with operator is easier for the user, or use an enum class with operators.

  • Reported: IDL4-CPP 1.0b1 — Mon, 7 Aug 2023 11:21 GMT
  • Disposition: Duplicate or Merged — IDL4-CPP 1.0b2
  • Disposition Summary:

    This issue will be addressed in IDL4CPP-11

    The resolution of this issue will be addressed in IDL4CPP-11.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Use of @range is inconsistent with IDL4 grammar

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

    According to IDL4, annotations like range need to specify the arguments that are set. However, in the example we include for the mapping of @range we don't specify min and max in the arguments.

    We need to address that as follows:

    struct StructureOfRangedValues {
        @range(min=-10, max=10) long x;
    };
    
  • Reported: IDL4-CPP 1.0a1 — Tue, 20 Jun 2023 17:54 GMT
  • Disposition: Resolved — IDL4-CPP 1.0b2
  • Disposition Summary:

    Fix @range example

    This issue fixes the use of @range in the examples.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Mapping to string_view

  • Key: IDL4CPP-4
  • Status: closed  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    As there is no conversion implicit from a std::string_view to a std::string there is no possibility to easily pass now a IDL defined string to an operation expecting an IDL string input, will this mapping proposal work for the users?

  • Reported: IDL4-CPP 1.0b1 — Thu, 23 Mar 2023 14:06 GMT
  • Disposition: Closed; No Change — IDL4-CPP 1.0b2
  • Disposition Summary:

    Middleware Implementations Should Deal with Conversions

    Solving conversion issues would be a task for the specific middleware implementation. If the mapping were to use char*, implementers would have to deal with the same issue.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Clarify constructor

  • Key: IDL4CPP-15
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec says " In addition to the methods as described in 6.14, the class has an explicit constructor accepting values for each struct member in the order they are specified in IDL.", all values should be by value, so better it is to day " In addition to the methods as described in 6.14, the class has an explicit constructor accepting values for each struct member by value in the order they are specified in IDL."

  • Reported: IDL4-CPP 1.0b1 — Mon, 14 Aug 2023 14:46 GMT
  • Disposition: Closed; Out Of Scope — IDL4-CPP 1.0b2
  • Disposition Summary:

    This issue is referring to a different specification

    This issue is actually pointing to the IDL to C++11 specification.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Can multiple annotations be contained on a type?

  • Key: IDL4CPP-28
  • Status: closed  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    For instance is this legal:

    struct S

    { @min(2) @max(5) @default(3) long f1; }

    ;

    typedef @min(2) long MyMin;
    typedef @max(5) MyMin MyMinMax;
    typedef @default(3) MyMinMax defaultedMyMinMax;

  • Reported: IDL4-CPP 1.0a1 — Wed, 10 Jan 2024 19:38 GMT
  • Disposition: Closed; Out Of Scope — IDL4-CPP 1.0b2
  • Disposition Summary:

    Issue Refers to IDL Grammar

    This issue will be addressed in the IDL 4.3 RTF, as it refers to the IDL grammar rather than the language mapping.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Annotations do not discuss how they interact with language mapped constructs.

  • Key: IDL4CPP-26
  • Status: closed  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Each annotation specified, either pre-defined or user-defined/custom, should discuss how it interacts with the IDL4 grammar such that the annotation has the desired effect (e.g. @range on a union).

  • Reported: IDL4-CPP 1.0a1 — Wed, 10 Jan 2024 19:29 GMT
  • Disposition: Closed; Out Of Scope — IDL4-CPP 1.0b2
  • Disposition Summary:

    This issue belongs in the IDL4 RTF.

    This issue should be addressed in IDL4.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

CORBA or non CORBA usage results in non compatible exceptions code

  • Key: IDL4CPP-54
  • Status: closed   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec describes that with CORBA an invalid usage of union can result in a CORBA::BAD_PARAM exception, for bounded string/vector also a CORBA::BAD_PARAM, but when not using CORBA when IDL4CSP11-9 is resolved a different exception is thrown for an union (for vector it seems this still has to be added also). When a user now has appliation code that uses IDL defined data types with and without CORBA their exception code is different. In order to achieve portability of user code I think the spec should define a omg::bad_param alias type which maps to CORBA::BAD_PARAM or the selected std exception. That way user code can be written portable when the user has data types defined by IDL and wants to support use cases with and without CORBA

  • Reported: IDL4-CPP 1.0b1 — Sun, 3 Mar 2024 07:23 GMT
  • Disposition: Deferred — IDL4-CPP 1.0b2
  • Disposition Summary:

    Error handling and exceptions will be treated in feature versions of the spec

    By design, the current version of this specification does not specify explicit mechanisms to report errors (e.g., which exception should be thrown or whether exceptions should be thrown at all). The intention was to be able to support both environments where exceptions are valid and are allowed, as well as environments where applications may not throw or handle exceptions.

    Future versions of this specification may define explicit mechanisms to report errors, and will aim to harmonize them across middleware implementations.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Implicit default and constructor

  • Key: IDL4CPP-32
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Spec says:

    If the union has a default case, the default constructor shall initialize the discriminator, and the selected
    member field following the initialization rules described in Clause 7.2.4.3.1. If it does not, the default
    constructor shall initialize the union to the first discriminant value specified in the IDL definition.

    But when there is an implicit default member, that should be selected, for example, the example below (

      enum DataType
      {
        dtEmpty,
        dtLong,
        dtShort,
        dtString,
        dtPoint,
        dtTrack,
        dtGlobal
      };
    
      union Data switch (DataType)
        {
          case dtLong: long longData;
          case dtShort: short shortData;
          case dtString: string stringData;
          case dtPoint: string pointData;
          case dtTrack: string trackData;
          case dtGlobal: string globalData;
          // by default (implicit), empty union
        };
    
  • Reported: IDL4-CPP 1.0b1 — Tue, 16 Jan 2024 09:36 GMT
  • Disposition: Deferred — IDL4-CPP 1.0b2
  • Disposition Summary:

    Defer the resolution of this issue to the resolution of the related IDL RTF issue

    This issue is deferred until the resolution IDL43-94.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Add Example Transformation

  • Key: IDL4CPP-20
  • Status: closed  
  • Source: Dassault Systemes ( Mr. Daniel Brookshier)
  • Summary:

    Not sure where (not necessarily in the noted paragraph) should include a reference to an electronic mapping file as an example. Could also include test sample IDL and corresponding C++ output. This should probably be informational and could also be in an Annex. The key reason is to show the actual transformation as well as a test/verification of the mappings. Perhaps also include versions of tools/compiler used in which the transformations were validated. In addition unit tests could be referenced or included as informative content to the spec.

  • Reported: IDL4-CPP 1.0a1 — Thu, 28 Sep 2023 20:50 GMT
  • Disposition: Deferred — IDL4-CPP 1.0b2
  • Disposition Summary:

    Example Transformations To Be Incoporated in Future Versions of the Standard

    We think this is an interesting concept, but it hasn't been addressed in the existing IDL4 to Language Mappings. To better align version 1.0 with the existing mappings, we think this proposal should be addressed in subsequent RTFs.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

std::shared_ptr should be passed by value

  • Key: IDL4CPP-50
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec in 7.4 says that only basic types/enum should be passed by value for an in argument, but that should also include all shared_ptr types, see https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/ for some information (more can be found on the internet).

  • Reported: IDL4-CPP 1.0b1 — Fri, 2 Feb 2024 13:36 GMT
  • Disposition: Deferred — IDL4-CPP 1.0b2
  • Disposition Summary:

    Passing shared_ptr by value could introduce certain issues

    If we pass by value we could introduce certain issues, like locking (having to increase the reference counter). It's unclear to us whether this would be beneficial. If we pass it by const reference, we're guaranteeing that the object won't be destroyed until the end of the function.

    After a discussion within the IDL WG, we agreed on leaving the mapping as it currently is and reevaluate improvements to the mapping in future RTFs.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

range/min/max underspecified

  • Key: IDL4CPP-34
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    A few remarks on 7.17.3:

    • formatting of code in text is not done
    • what is the impact of range when applied to a typedef of a basic type on all argument passing rules when that typedef is passed with a function, stored in an union or exception?
    • how should min/max be implemented, shouldn't also omg::types::ranged be used?
    • what should be done when min/max but also range are used as annotation?
  • Reported: IDL4-CPP 1.0b1 — Wed, 24 Jan 2024 08:58 GMT
  • Disposition: Deferred — IDL4-CPP 1.0b2
  • Disposition Summary:

    Defer until the resolution of the related IDL RTF issue

    The IDL RTF must address some of the underlying issues when applying @min, @max, @range, and @default annotations (e.g., see IDL43-89). Therefore, we are deferring the implementation of an updated mapping until the IDL RTF tackles the underlying issue.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Remove IDL to C++11 spec extensions

  • Key: IDL4CPP-46
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    I find it not very maintainable to extend in this spec silently the IDL to C++11 language mapping. In the v1.7 revision I think all is already mapped, so I propose to remove D.3 completely from this spec

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:53 GMT
  • Disposition: Deferred — IDL4-CPP 1.0b2
  • Disposition Summary:

    Defer to future versions of this specification

    Future versions of this specification may remove Clause D.3 or replace its content with pointers to the appropriate clauses in the IDL to C++11 v1.7 specification. However, because this specification originally targeted v1.6 of such specification, it will require some research and agreement on the best path forward within the MARS IDL WG.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Using floating point types to instantiate pre C++20 templates

  • Key: IDL4CPP-27
  • Status: closed  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Prior to C++20, the following template cannot be instantiated:

    template <typename T, const T thingy>
    class MyTemplate {};

    MyTemplate<double, 5.0> x;

  • Reported: IDL4-CPP 1.0a1 — Wed, 10 Jan 2024 19:33 GMT
  • Disposition: Deferred — IDL4-CPP 1.0b2
  • Disposition Summary:

    Mapping for min, max, and ranged remains the same

    In this case, an alternative implementation would introduce too much complexity. For that reason, we propose to defer this issue to future RTFs. State of the art compilers supporting C++20 work with the proposed mapping. Future RTFs may add additional information for implementers that require compatibility with earlier compilers.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Specify how IDL maps compare their keys

  • Key: IDL4CPP-1
  • Status: closed  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Keys of maps can be any IDL type. How should the generated C++ code support key comparison of any type?

  • Reported: IDL4-CPP 1.0a1 — Tue, 21 Mar 2023 17:53 GMT
  • Disposition: Deferred — IDL4-CPP 1.0b2
  • Disposition Summary:

    List of Valid Key Types for Maps Will Be Provided in IDL 4.3

    This issue is tightly coupled with IDL43-70, which aims to determine the list of valid key types for IDL maps. Because the current IDL4 to C++ Language mapping targets IDL 4.2 (which does not specify the list of valid types), this FTF will no't be adding further restrictions.

    Future versions of the IDL4 to C++ Language mapping may add key map type restrictions compliant with the resolution of IDL43-70.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Use consistant initialization

  • Key: IDL4CPP-86
  • Status: closed  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    the code examples use = and {} to initialize the constants, recommend to make this consistent by always using {}

  • Reported: IDL4-CPP 1.0b1 — Fri, 12 Apr 2024 09:55 GMT
  • Disposition: Deferred — IDL4-CPP 1.0b2
  • Disposition Summary:

    Defer to future revisions of the specification

    In this case, we chose to use {} only when necessary, and use = instead for when both options were possible. Having said that, given the current trend leaning towards the use of {}, future versions of this specification may change this coding convention.

  • Updated: Mon, 16 Sep 2024 14:15 GMT

Add mapping for C++20 modules


extensibility underspecified

  • Key: IDL43-46
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    extensibility is heavily under specified in IDL4.2. It is listed as a general purpose annotation but it says nothing at the moment for the case appendable/mutable is specified and types are evolved. What are at that moment the rules for assignability/compatibility. Someone who just looks at IDL4 lacks a lot of required information

  • Reported: IDL 4.2 — Thu, 19 Aug 2021 07:54 GMT
  • Updated: Tue, 10 Sep 2024 20:45 GMT

Mutable and changing annotations

  • Key: IDL43-47
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The specification is unclear of what the user can expect when using mutable and annotations like range, what when the old version of the type has a range of 1-10 and the new one range of 1-5. An old version is send with value 6, what does the receiver get? Very likely more annotations need to be extended in their description related to mutable

  • Reported: IDL 4.2 — Thu, 19 Aug 2021 08:05 GMT
  • Updated: Tue, 10 Sep 2024 20:31 GMT

any value of annotations underspecified

  • Key: IDL43-48
  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The specification just lists any as value for the min/max/default annotations, but that tells nothing about what is allowed as value, are for what about hex/octet values, floats, etc. Maybe make this more precise by referring to the value_expression rules `<const_expr>` as specified in 7.4.1.4.3 constants

  • Reported: IDL 4.2 — Thu, 19 Aug 2021 08:18 GMT
  • Updated: Tue, 10 Sep 2024 19:39 GMT

Restrict key element type for maps

  • Key: IDL43-70
  • Status: open   Implementation work Blocked
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    Currently the key element type for maps is the same as the value element type, but that looks to be open, this allows for example a union, struct, reference, or other complex type as key type, all of them lack a comparison operator, very likely it is better to define a special map_key_type_spec just as we have for the union as switch_type_spec

  • Reported: IDL 4.2 — Tue, 21 Mar 2023 07:21 GMT
  • Updated: Tue, 10 Sep 2024 19:06 GMT

bitmask/bitvalue scoping

  • Key: IDL43-77
  • Status: open   Implementation work Blocked
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    The spec doesn't say anything about bitmask bit_value scoping. I think the spec currently allows

    bitmask MyBitMask

    { flag0, flag1 };
    bitmask MyBitMask2 { flag0, flag1 }

    ;

    This is problematic when a bitmask maps to an enum in C++. As a bitmask is pretty similar to an enum I do ask the following, in section 7.5.2 it says:

    Enumeration value names are introduced into the enclosing scope and then are treated like any other declaration in that scope.

    What about a bitvalue, shouldn't this also be done for a bitvalue (the members of a bitmask), that would allow a safe mapping to an enum in C++.

    The spec should be clear about where bitmasks are introduced, within the bitmask scope itself, or in the enclosing scope

  • Reported: IDL 4.2 — Mon, 7 Aug 2023 14:31 GMT
  • Updated: Tue, 10 Sep 2024 16:11 GMT

bitfield identifiers

  • Key: IDL43-73
  • Status: open   Implementation work Blocked
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    The spec says for bitfield " list of identifiers (<identifier>*).", shouldn't this be 1 or 0 identifiers, what if the user specifies 4 identifiers, how to separate them, what is the meaning?

  • Reported: IDL 4.2 — Tue, 18 Jul 2023 09:31 GMT
  • Updated: Tue, 10 Sep 2024 15:43 GMT

constexpr constructors missing

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In user code I want to use constexpr for IDL fixed values, for example

    constexr F pi

    {3.142857}

    ;

    But in order for that to work a constexpr constructor has to be available, the spec should define that

  • Reported: IDL4-CPP 1.0b1 — Wed, 4 Sep 2024 07:19 GMT
  • Updated: Wed, 4 Sep 2024 14:18 GMT

Mapping to std::shared_ptr allows to much

  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    In the context of CORBA it is not legal to just compare object references with operator==/!= which are both provided by std:;shared_ptr. The fact that the local client proxy is different doesn't mean the called CORBA servant is different, in IDL to C+11 comparing two interfaces is illegal (see 6.7.2 of IDL to C+11). This specification should make it clear that omg::types::ref_type<T> should not be comparable

  • Reported: IDL4-CPP 1.0b1 — Wed, 21 Aug 2024 07:15 GMT
  • Updated: Wed, 4 Sep 2024 14:14 GMT

Don't require operator ==/!=

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec says for structured types "A set of comparison operators, including at least "equal to" and "not equal to."", but that is not possible when the structure contains interfaces, valuetypes, valueboxes, abstract, all special types don't provide a operator==/!= so they can't be required when a structure contains any of these. This requirement has to be removed. CORBA doesn't provide equal for these special types because a local != doesn't mean that the references are not pointing to the same servant, object identity is not done through local pointers

  • Reported: IDL4-CPP 1.0b1 — Mon, 19 Aug 2024 07:14 GMT
  • Updated: Wed, 4 Sep 2024 14:10 GMT

CORBA::CustomerMarshal typo

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    CORBA::CustomerMarshal should be CORBA::CustomMarshal

  • Reported: IDL4-CPP 1.0b1 — Mon, 19 Aug 2024 07:09 GMT
  • Updated: Wed, 4 Sep 2024 14:09 GMT

Spec should describe to which element types @optional should be possible

  • Key: IDL43-100
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec doesn't describe exactly to which element types @optional should be possible, leaving it to the vendor implementation. The spec should describe to which element type this annotation (but also the others) should be applied, struct members sounds logical, but what about union members, attributes, exception members?

  • Reported: IDL 4.2 — Tue, 11 Jun 2024 09:13 GMT
  • Updated: Mon, 1 Jul 2024 15:13 GMT

What is the default value of an annotated numeric type whose range does not include the value 0?

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    If the numeric type is annotated by range:

        @range(min=1, max = 10) long f1;
    

    or min

        @min(1) long f1;
    

    or max

        @max(-1) long f1;
    

    but does not specify a default, what is the default value since it cannot be 0.

  • Reported: IDL4-CPP 1.0a1 — Wed, 12 Jun 2024 15:54 GMT
  • Updated: Fri, 21 Jun 2024 17:37 GMT

CORBA or non CORBA usage results in non compatible exceptions code

  • Status: open   Implementation work Blocked
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec describes that with CORBA an invalid usage of union can result in a CORBA::BAD_PARAM exception, for bounded string/vector also a CORBA::BAD_PARAM, but when not using CORBA when IDL4CSP11-9 is resolved a different exception is thrown for an union (for vector it seems this still has to be added also). When a user now has appliation code that uses IDL defined data types with and without CORBA their exception code is different. In order to achieve portability of user code I think the spec should define a omg::bad_param alias type which maps to CORBA::BAD_PARAM or the selected std exception. That way user code can be written portable when the user has data types defined by IDL and wants to support use cases with and without CORBA

  • Reported: IDL4-CPP 1.0b1 — Sun, 3 Mar 2024 07:23 GMT
  • Updated: Fri, 21 Jun 2024 17:37 GMT


Use consistant initialization

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    the code examples use = and {} to initialize the constants, recommend to make this consistent by always using {}

  • Reported: IDL4-CPP 1.0b1 — Fri, 12 Apr 2024 09:55 GMT
  • Updated: Fri, 21 Jun 2024 17:37 GMT

range/min/max underspecified

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    A few remarks on 7.17.3:

    • formatting of code in text is not done
    • what is the impact of range when applied to a typedef of a basic type on all argument passing rules when that typedef is passed with a function, stored in an union or exception?
    • how should min/max be implemented, shouldn't also omg::types::ranged be used?
    • what should be done when min/max but also range are used as annotation?
  • Reported: IDL4-CPP 1.0b1 — Wed, 24 Jan 2024 08:58 GMT
  • Updated: Fri, 21 Jun 2024 17:37 GMT

Remove IDL to C++11 spec extensions

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    I find it not very maintainable to extend in this spec silently the IDL to C++11 language mapping. In the v1.7 revision I think all is already mapped, so I propose to remove D.3 completely from this spec

  • Reported: IDL4-CPP 1.0b1 — Thu, 25 Jan 2024 12:53 GMT
  • Updated: Fri, 21 Jun 2024 17:37 GMT

Add Example Transformation

  • Status: open  
  • Source: Dassault Systemes ( Mr. Daniel Brookshier)
  • Summary:

    Not sure where (not necessarily in the noted paragraph) should include a reference to an electronic mapping file as an example. Could also include test sample IDL and corresponding C++ output. This should probably be informational and could also be in an Annex. The key reason is to show the actual transformation as well as a test/verification of the mappings. Perhaps also include versions of tools/compiler used in which the transformations were validated. In addition unit tests could be referenced or included as informative content to the spec.

  • Reported: IDL4-CPP 1.0a1 — Thu, 28 Sep 2023 20:50 GMT
  • Updated: Fri, 21 Jun 2024 17:37 GMT

Using floating point types to instantiate pre C++20 templates

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Prior to C++20, the following template cannot be instantiated:

    template <typename T, const T thingy>
    class MyTemplate {};

    MyTemplate<double, 5.0> x;

  • Reported: IDL4-CPP 1.0a1 — Wed, 10 Jan 2024 19:33 GMT
  • Updated: Fri, 21 Jun 2024 17:37 GMT


Specify how IDL maps compare their keys

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Keys of maps can be any IDL type. How should the generated C++ code support key comparison of any type?

  • Reported: IDL4-CPP 1.0a1 — Tue, 21 Mar 2023 17:53 GMT
  • Updated: Fri, 21 Jun 2024 17:37 GMT

Implicit default and constructor

  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Spec says:

    If the union has a default case, the default constructor shall initialize the discriminator, and the selected
    member field following the initialization rules described in Clause 7.2.4.3.1. If it does not, the default
    constructor shall initialize the union to the first discriminant value specified in the IDL definition.

    But when there is an implicit default member, that should be selected, for example, the example below (

      enum DataType
      {
        dtEmpty,
        dtLong,
        dtShort,
        dtString,
        dtPoint,
        dtTrack,
        dtGlobal
      };
    
      union Data switch (DataType)
        {
          case dtLong: long longData;
          case dtShort: short shortData;
          case dtString: string stringData;
          case dtPoint: string pointData;
          case dtTrack: string trackData;
          case dtGlobal: string globalData;
          // by default (implicit), empty union
        };
    
  • Reported: IDL4-CPP 1.0b1 — Tue, 16 Jan 2024 09:36 GMT
  • Updated: Fri, 21 Jun 2024 17:37 GMT

Identify the types that numeric annotations can be applied to

  • Key: IDL43-95
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    There are currently a number of numeric annotations presented in the spec. These are annotations that impact the numerical behavior of a type (like its allowed ranges). Right now, the spec doesn't clearly specify where these annotations may be applied and where they may not be applied. It would be wise to extend the section that introduces these annotations with a paragraph that clearly lays out these restrictions.

  • Reported: IDL 4.2 — Tue, 11 Jun 2024 19:05 GMT
  • Updated: Wed, 12 Jun 2024 15:23 GMT

Clarify meaning of array and sequence annotations

  • Key: IDL43-53
  • Status: open  
  • Source: MIT/Lincoln Laboratory ( Mr. Daniel Herring)
  • Summary:

    It is unclear whether or how annotations such as "unit" and "range" apply to the values in an array or sequence. Other annotations may have similar ambiguity.

    Do they apply to each contained value, or do do they somehow apply to the aggregate value? What about multi-dimensional arrays or nested sequences?

    Does the range somehow apply to the sequence length, perhaps as a minimum?

    Where do they belong in the array or sequence definitions – before the keyword, before the type name, or somewhere else?

    Do the different locations accept different annotations? Do the annotations change meaning depending on location?

  • Reported: IDL 4.2 — Wed, 29 Sep 2021 16:31 GMT
  • Updated: Tue, 11 Jun 2024 23:08 GMT

No clarification when annotation is used at various levels

  • Key: IDL43-80
  • Status: open   Implementation work Blocked
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    There is nothing explained what the expected behavior is when an annotation is applied at multiple levels, for example see the changed example from 8.3.3, what is the range for Foo:bar2, is it min=10,max=20 or min=5,max=10

    @range (min=10, max=20)
    typedef long MyLong;
    ...
    struct Foo

    { @range (min=10, max=20) long bar1; // direct application @range (min=5, max=10) MyLong bar2; // indirect application trough type MyLong }

    ;

  • Reported: IDL 4.2 — Sun, 27 Aug 2023 08:19 GMT
  • Updated: Tue, 11 Jun 2024 22:11 GMT

Ambiguous use of numeric annotation on a typedef

  • Key: IDL43-79
  • Status: open   Implementation work Blocked
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Section 8.3.3
    Has the normative example;

    @range (min=10, max=20)
    typedef long MyLong;

    It is unclear to me if the annotation applies to the typedef keyword or to the type in the typedef definition.

  • Reported: IDL 4.2 — Mon, 21 Aug 2023 17:23 GMT
  • Updated: Tue, 11 Jun 2024 18:49 GMT

Setting Floating-point Literals to NaN and infinity not covered under the specification

  • Key: IDL43-91
  • Status: open  
  • Source: Ryan Friedman ( Ryan Friedman)
  • Summary:

    As a OMG IDL user, I have messages that treat NaN or infinity as a significant value. I would like to specify this as a default for a field.

    Currently, the OMG IDL specification says that a floating point value must include an integer part. It does not mention how to set or use special floating point values.

    Per IEEE-754, there are a few types of NaN. It would be desirable for OMG DDS IDL to interpret NaN as a quiet NaN, which matches C++ and Python.

    In ROS-IDL, it would look like this:
    float32 float32_nan NaN
    float64 float64_nan nan

    In ROS 2, I proposed an implementation that sets NaN. In the IDL generator, it creates the following IDL file, which is not supposedly valid according to the standard:

    module rosidl_generator_tests {
    module msg {
    module NanValueConstant_Constants

    { const float FLOAT32_NAN = nan; const double FLOAT64_NAN = nan; }

    ;
    struct NanValueConstant

    { uint8 structure_needs_at_least_one_member; }

    ;
    };
    };

    Can the specification be amended to support NaN, +inf, and -inf? This is blocking implementation in ROS 2.

  • Reported: IDL 4.2 — Tue, 5 Mar 2024 18:50 GMT
  • Updated: Tue, 11 Jun 2024 18:41 GMT

Allow true/false as boolean values

  • Key: IDL43-90
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Currently only TRUE or FALSE are allowed boolean values, but why not allow true and false (all lower case) as values

  • Reported: IDL 4.2 — Wed, 14 Feb 2024 11:18 GMT
  • Updated: Mon, 10 Jun 2024 23:44 GMT

Behavior of default union member not properly specified

  • Key: IDL43-94
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    The spec clearly specifies that when a union has an explicit default member, then this member should be chosen in its default constructor. When this is not the case, it would pick the first available case that is listed for its first available member.
    However, it makes sense that if there is an implicit default member, then it is picked by the default constructor for the union.
    Finally, it should be stated that you cannot overrule in any way what member the default constructor of a union will pick by using the @default annotation on any specific member,

  • Reported: IDL 4.2 — Tue, 19 Mar 2024 19:41 GMT
  • Updated: Mon, 10 Jun 2024 23:42 GMT

@value annotation used for enum is ambiguously defined

  • Key: IDL43-93
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    Should the IDL4 grammar specify that @value annotations, if specified for one enum field, MUST be used on all enum fields?
    Regardless of whether we make this restriction, the specification should clearly state what happens when one field is annotated, but the next one is not.

  • Reported: IDL 4.2 — Tue, 19 Mar 2024 15:00 GMT
  • Updated: Mon, 10 Jun 2024 22:31 GMT

optional should be a keyword, not an annotaton

  • Key: IDL43-50
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The annotation optional impacts the language mapping, for example in C it results in a pointer, with C++11 it could be a IDL::optional<>. The usage of an annotation is very weak in terms of semantics, it is much better to use a new optional keyword as optional heavily impacts the type presented to the programmer. Adding optional will break existing user code, it is not only something that is checked by a concrete middleware.

  • Reported: IDL 4.2 — Fri, 20 Aug 2021 08:03 GMT
  • Updated: Mon, 10 Jun 2024 22:23 GMT

The definition of annotation_body grammar allows typedef

  • Key: IDL43-92
  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The

  • Reported: IDL 4.2 — Fri, 15 Mar 2024 20:58 GMT
  • Updated: Fri, 15 Mar 2024 21:06 GMT

Missing relationship between min/max/range/default

  • Key: IDL43-89
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    The spec is silent about the relationship between min/max/range annotations and the default value. When I have an unsigned long and define min=10/max=20, is that legal without specifying a default value annotation? The default of an unsigned long is zero, so what should be generated in the code now as default? Or should the spec say that when min/max/range are used and the default value of the type is not in the range of those default should be specified by the user?

  • Reported: IDL 4.2 — Fri, 26 Jan 2024 15:51 GMT
  • Updated: Thu, 8 Feb 2024 18:22 GMT

IDL 4.2 i.e. the version published as ISO/IEC 19516 is full of broken references

  • Key: IDL43-88
  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    The IDL 4.2 page has a download link for the spec as published as an ISO: https://www.omg.org/spec/IDL/ISO/19516/PDF

    All (?? - verification left as an exercise but there's 926 instances) the internal document links look to be screwy.

    Search for e.g. "Reference source not found"

    An example (from page 102):

    Annex A
    Consolidated IDL Grammar
    This annex gathers all the rules from all the building blocks.
    Error! Reference source not found.:
    Error! Reference source not found. Error! Reference source not found.
    Error! Reference source not found. Error! Reference source not found.
    Error! Reference source not found. Error! Reference source not found.
    ... etc...

  • Reported: IDL 4.2 — Sun, 10 Dec 2023 14:30 GMT
  • Updated: Tue, 19 Dec 2023 14:50 GMT

destructor/raise of exception

  • Key: IDL43-87
  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    For all c++ code in this chapter the destructor should be override, not virtual

    The raise operation should be _raise, that way any derived user exception can have a raise member, similar to _name and _rep_id. Looks an oversight when adding the code from TAOX11, we use _raise always there

  • Reported: IDL 4.2 — Wed, 25 Oct 2023 08:18 GMT
  • Updated: Tue, 7 Nov 2023 15:58 GMT

Error! Reference source not found.

  • Key: IDL43-86
  • Status: open  
  • Source: Independent Security Consultant ( Henrik Johansson)
  • Summary:

    The data retrieval of described rules of constants entity during document compilation failed.

  • Reported: IDL 4.2 — Wed, 18 Oct 2023 12:42 GMT
  • Updated: Thu, 19 Oct 2023 16:23 GMT

Add support for binary constant default

  • Key: IDL43-85
  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    With a bitset/bitfield I assume you can use @default to specify a default value, would be nice if a binary constant could be used, as with C++, a binary constant consists of a sequence of ‘0’ and ‘1’ digits, prefixed by ‘0b’ or ‘0B’ for example 0b101010

  • Reported: IDL 4.2 — Tue, 3 Oct 2023 06:25 GMT
  • Updated: Tue, 10 Oct 2023 13:31 GMT

bitset memory layout

  • Key: IDL43-84
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    IDL 4.2 says for bitset the following, but to our idea the IDL spec goes to far, how the data is organized in memory is something IDL can't enforce, probably not all programming languages provide such a direct way to control the memory layout. Middleware could control how a bitset is transferred on the wire, but I think IDL should not enforce the layout

    Bit sets are sequences of bits stored optimally and organized in concatenated addressable pieces called bit fields,
    themselves stored optimally. "Stored optimally" means that one bit uses just one bit in memory. "Concatenated" means
    that each bit field will be placed in memory just after its predecessor within the bit set (no alignment considerations
    apply).

  • Reported: IDL 4.2 — Mon, 2 Oct 2023 15:14 GMT
  • Updated: Tue, 10 Oct 2023 13:31 GMT

Add multimap

  • Key: IDL43-83
  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    I assume that in a map keys may not be unique (this should be added to 7.4.13.4.3.1), in case that is a restriction for a map, I propose to add a multimap which allows keys to be duplicate.

  • Reported: IDL 4.2 — Mon, 11 Sep 2023 06:16 GMT
  • Updated: Thu, 14 Sep 2023 12:55 GMT

Spec should define defaults for all basic types

  • Key: IDL43-82
  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    Now that with IDL4 the user can use @default to specify a specific default it would be good to also specify the default for all basic types when no @default is used. That way the user (or tool) can make a decision whether it must use @default in IDL or not

  • Reported: IDL 4.2 — Mon, 28 Aug 2023 11:44 GMT
  • Updated: Wed, 30 Aug 2023 15:28 GMT


Add ruby as language

  • Key: IDL43-66
  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    Add ruby as language, there is a formal OMG language mapping for that, maybe just add all programming languages for which the OMG already has a formal language mapping

  • Reported: IDL 4.2 — Tue, 7 Jun 2022 06:34 GMT
  • Updated: Fri, 18 Aug 2023 23:23 GMT

signed_tiny_int should just extend octet_type

  • Key: IDL43-72
  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    For int8 a new signed_type_int is defined, but I think it should just do the following so that anywhere where octet is used now int8 can be used

    <octet_type> ::+ "int8",

  • Reported: IDL 4.2 — Wed, 12 Jul 2023 08:26 GMT
  • Updated: Tue, 15 Aug 2023 07:03 GMT

inheritance of unions and enumerations

  • Key: IDL43-24
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    IDL 4.2 syntax supports inheritance of only interfaces, valuetypes, and structures.

    There are multiple scenarios where it would be useful to inherit other types, specifically Unions and Enumerations.

    (1) Inheritance of unions

    This would be very useful in some specs where unions are automatically generated. For example unions are created interface definitions in DDS-RPC and derived interfaces would like to use unions that "inherit" the unions in the base interfaces.

    This would be useful when a "derived" union wants to add some more cases to the base union.

    The derived union would have to use the same discriminator type. All it can do is add new discriminator cases that do not conflict with the non-default discriminator in the base union.

    It can add a default case if not present in the base union.

    Proposed syntax would be:

    union DerivedUnion : BaseUnion {
        case 1 :
           Case1Type case1meber;
    ...
    };
    

    (2) Inheritance of enumerations

    This is useful to add literals to an existing enumeration without touching the original definition.

    The literals on the derived union would be constrained to not conflict the literals in the base class.

    Proposed syntax would be:

    enum DerivedEnum : BaseEnum {
        AdditionalLiteral1,
        ...
    };
    
  • Reported: IDL 4.2 — Tue, 25 Sep 2018 19:31 GMT
  • Updated: Tue, 8 Aug 2023 06:45 GMT

Typo: Missing units

  • Key: IDL43-75
  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    For bitmask the spec says "By default, the size of a bit mask is 32", but what unit is 32, I assume the spec wants to say "By default, the size of a bit mask is 32 bits"

  • Reported: IDL 4.2 — Mon, 31 Jul 2023 06:48 GMT
  • Updated: Wed, 2 Aug 2023 21:40 GMT

bitset mapping

  • Key: IDL43-74
  • Status: open   Implementation work Blocked
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    All constructed types map to a C+11 class with accessors, but the new bitset mapping is an exception now, it delivers no accessor methods which gives a different API to the programmer. We propose to map to a class with accessors, similar like struct, or fastdds does in their implementation (see https://fast-dds.docs.eprosima.com/en/latest/fastddsgen/dataTypes/dataTypes.html#bitsets). Also the IDL inheritance is gone in C11, propose to use a derived class, so that in the C+11 code there is also an inheritance

  • Reported: IDL 4.2 — Fri, 28 Jul 2023 13:59 GMT
  • Updated: Fri, 28 Jul 2023 15:53 GMT

Need builtin annotations that can be used to document the IDL

  • Key: IDL43-33
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    There is a general need to document the IDL. However the IDL language does not provide any standard way to do this. As a consequence people may be forced to define custom annotations which would preclude the use across projects and/or development of general tools that are documentation aware.

    To remediate this the suggestion is to add some built-in annotations that maybe used to document the IDL. For example the @documentation annotation below:

    @annotation documentation {
        string value default "TBD";
    };
    

    This annotation could applied to a type declaration or to a member / element, as in:

    @documentation("This documents the type Foo")
    struct Foo {
        @documentation("documentation for member m1")
        long m1;
        @documentation("documentation for member m2")
        long m2;
     };
    
    @documentation("This documents the type MyEnum")
    enum MyEnum {
        @documentation("documentation for literal L1")
        L1,
    
        @documentation("documentation for literal L2")
        L2
     };
    
  • Reported: IDL 4.2 — Thu, 11 Apr 2019 18:17 GMT
  • Updated: Tue, 18 Jul 2023 16:33 GMT

formal_parameter_type not extended

  • Key: IDL43-71
  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    When map/bitset/bitmask are added it looks formal_parameter_type is not extended to allow these new types to be used as templated module arguments.

  • Reported: IDL 4.2 — Tue, 11 Jul 2023 16:04 GMT
  • Updated: Tue, 11 Jul 2023 20:19 GMT

Problem with member accessor

  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    The spec gives:

    const <MemberType>& <MemberName>() const

    But for basic types/int this will result in a warning, for basic/enum it should be

    <MemberType> <MemberName>() const

  • Reported: IDL4-CPP 1.0b1 — Tue, 4 Apr 2023 07:47 GMT
  • Updated: Tue, 4 Apr 2023 19:11 GMT

Spec should specify behaviour

  • Status: open  
  • Source: Remedy IT Expertise BV ( Johnny Willemsen)
  • Summary:

    The spec says:

    A public constant accessor method with the name of the union member that returns a constant reference to
    its value:
    const <MemberType>& <MemberName>() const;
    Accessing an invalid union member may result in an undefined error.

    A language mapping should be precise and very clear to my idea, the user should know what happens if an invalid union member is accessed, this could happen in some cases, the spec should specify which exception will be thrown so that the programmer can react on this, saying it is undefined is not enough.

  • Reported: IDL4-CPP 1.0b1 — Wed, 29 Mar 2023 07:50 GMT
  • Updated: Fri, 31 Mar 2023 18:26 GMT

Additional details needed in definition of maps

  • Key: IDL43-69
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 7.4.13.4.3.1 defines IDL Maps but doesn't specify:

    • Which types may be keys
    • If maps need to de-duplicate equivalent entries
    • If maps need to preserve order

    The most essential of these is the first. It's currently unrestricted but this causes problems for language mappings where some additional operations (like less-than or equal-to) must be defined for these types. In order to prevent different language mappings adding different (conflicting) restrictions, the IDL spec should define this.

    One approach to this would be that each building block should define how its types can (or can't) be used in maps. For example: everything in core data types is allowed; interfaces are not allowed; valuetypes are not allowed; etc.

  • Reported: IDL 4.2 — Tue, 21 Mar 2023 20:30 GMT
  • Updated: Fri, 24 Mar 2023 13:28 GMT

Importing a name scope recursively imports all name scopes nested within it

  • Key: IDL43-35
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    The section Imports contains

    The effects of an import statement are as follows:

    • [...]
    • Importing a name scope recursively imports all name scopes nested within it.

    This looks counter intuitive to me.

    Example:

    module commontypes {
       module nested1 {
          enum RGBColor { RED, GREEN, BLUE };
       }
       module nested2 {
          enum TrafficLight { READ, YELLOW, GREEN };
       }
    };
    

    What happens if another module does "import commontypes"?

    If, as the standard says, all name scopes nested within "commontypes" are recursively imported then this would lead to errors:
    The enum values RED and GREEN would be directly visible and would be in conflict with each other.

  • Reported: IDL 4.2 — Mon, 29 Jun 2020 07:47 GMT
  • Updated: Wed, 7 Dec 2022 15:26 GMT

Annotation @hashid should be added to 8.3.1 'Group of Annotations General Purpose'

  • Key: IDL43-25
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    The 'Group of Annotations General Purpose' includes the @autoid annotations which can optionally specify a HASH as in @autoid(HASH).

    To be useful this must be augmented with the @hashid("MyString") annotation that allows an ID to be explicitly assigned by computing the hash of a string using the same algorithm that @autoid(HASH) uses.

  • Reported: IDL 4.2 — Tue, 25 Sep 2018 21:53 GMT
  • Updated: Tue, 6 Dec 2022 21:26 GMT

Sequences are not concretized

  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    ptc/19-07-02 section 7.2.4.2.1 defines the mapping of sequences of basic and non basic types in terms of Java interfaces.
    However, the classes implementing the interfaces are not defined.
    The implementation classes are required for actual programming.
    If it is intended that the user shall provide own implementations then this should be expressly stated.

  • Reported: IDL4-Java 1.0a1 — Mon, 23 Mar 2020 04:47 GMT
  • Updated: Tue, 20 Sep 2022 21:07 GMT

Syntax and scoping when applying annotations requires clarification

  • Key: IDL43-4
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    7.4.15.4.2 on p.101 contains the rule

    (225) <annotation_appl> ::= "@" <scoped_name> [ "(" <annotation_appl_params> ")" ]

    The nature of the EBNF notation leaves room for interpreting that between the @ and the <scoped_name> there could appear spaces, tabs, or even comments.

    On the other hand, 7.4.15.4.1 on p.100 contains:

    (220) <annotation_header> ::= "@annotation" <identifier>

    Here, it is clear that @annotation shall be treated as a single token without intermittent characters between @ and annotation.

    I propose adding a clarification in the explanations at the beginning of p.102 (following rule 227):

    Applying an annotation consists in prefixing the element under annotation with:

    • The annotation name ( <scoped_name> ) prefixed with the at symbol( @ ), also known as commercial at. There shall be no intermittent spaces, tabs, or comments between @ and <scoped_name>.

    The last sentence is my proposed addition.

  • Reported: IDL 4.2b1 — Fri, 26 Jan 2018 22:03 GMT
  • Updated: Tue, 21 Jun 2022 23:16 GMT

Table formatting

  • Key: IDL43-32
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Table 7-13 (Integer types) should have a little bit wider column 1 and the font size "See Building Block Extended Data" should match the other font in this table

  • Reported: IDL 4.2 — Fri, 1 Mar 2019 10:07 GMT
  • Updated: Tue, 21 Jun 2022 20:54 GMT

Constants for Core Data Types

  • Key: IDL43-21
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Extend the grammar for Constants to allow constants for all Core Data Types that are currently not allowed:

    • sequence
    • structure
    • union
    • array
  • Reported: IDL 4.2b1 — Mon, 26 Feb 2018 22:10 GMT
  • Updated: Tue, 21 Jun 2022 20:13 GMT
  • Attachments:

Clarify recursive/forwarded rules for maps

  • Key: IDL43-56
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    Section 7.4.1.4.4.4.4 Constructed Recursive Types and Forward Declarations (in the Core Data Types BB) has special semantic rules for sequences. The intent of Maps (in the Extended Data Types BB) seems to be that maps should have these same semantic rules.

  • Reported: IDL 4.2 — Fri, 3 Jun 2022 19:49 GMT
  • Updated: Fri, 3 Jun 2022 19:49 GMT

Add c++11 as language

  • Key: IDL43-49
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    There are a lot of more possibilities to be used with C++11 compared to C++, there is a specific OMG language mapping for C++11, so we would like to propose to add c++11 as defined value

  • Reported: IDL 4.2 — Thu, 19 Aug 2021 08:41 GMT
  • Updated: Fri, 3 Jun 2022 19:44 GMT

Allow nested module definitions

  • Key: IDL43-54
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Currently when we want to declare a type in a deeply nested module we have to start with all higher level modules, for example

    module A {
    module B {
    module C

    { struct Foo; // Forward declaration typedef sequence<Foo> FooSeq; }
    }
    }

    It would be much easier that we can do the following (based on the C++17 namespace changes also allowing that for namespaces)

    module A::B::C { struct Foo; // Forward declaration typedef sequence<Foo> FooSeq; }
  • Reported: IDL 4.2 — Thu, 28 Oct 2021 11:10 GMT
  • Updated: Wed, 3 Nov 2021 17:53 GMT

Definition of CORBA specific Any (A.1.4 Any) needs to align with 7.3 Any

  • Status: open  
  • Source: Leonardo S.p.A ( Simon McQueen)
  • Summary:

    7.3 Any says:

    "The IDL any type shall be mapped to org.omg.type.Any type."

    A.1.4 Any says:

    "The IDL type any maps to a public class named org.omg.CORBA.Any with the following definition

    package org.omg.CORBA;
    public class Any {
    ..."

    Suggested solution:

    Replace class declaration with:

    "package org.omg.CORBA;
    public class Any implements org.omg.type.Any {
    ..."

  • Reported: IDL4-Java 1.0b2 — Thu, 14 Oct 2021 11:04 GMT
  • Updated: Thu, 14 Oct 2021 12:27 GMT

Specify where annotations can be applied

  • Key: IDL43-27
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    IDL 4.0 contained specific grammar rules for where annotations can be applied. Issue IDL41-9 revised these rules and left the spec with the general statement that (7.4.15.4.2): "An annotation may be applied to any IDL constructs or sub-constructs."

    This is problematic for the following reasons:

    • The phrase "under annotation" is used in multiple places in the spec without it being defined
    • Tool implementors using a grammar based on the one in the spec need to make their own enhanced grammar to include <annotation_appl>, which undermines the usefulness of having a grammar in the spec
    • Documentation of specific annotations (whether standardized in IDL, standardized in other OMG documents such as XTYPES, or non-standard) has no systemic way of describing where the annotation should be used
    • Users have little assurance that their IDL will be understood by all conforming tools, even when using standardized annotations
  • Reported: IDL 4.2 — Wed, 5 Dec 2018 16:43 GMT
  • Updated: Wed, 29 Sep 2021 16:32 GMT

@java_mapping promote_integer_width does not mention octet

  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    IDL 4.2 section 7.4.1.4.3 Constants consistency rules on page 32 contains

    • An octet constant can be defined using an integer literal or an integer constant expression but values outside the range 0…255 shall be treated as an error.

    ptc/20-05-17 section 7.2.4.1.6 maps IDL octet to Java byte.
    For mapping IDL const octet values 128 to 255 to Java, it should be permissible to apply promote_integer_width to octet.

  • Reported: IDL4-Java 1.0 — Fri, 10 Jul 2020 08:28 GMT
  • Updated: Tue, 28 Sep 2021 17:42 GMT

The class shall implement the IEquatable interface, where T is the corresponding class name.

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    This should be changed to a "may" or a "could". Shall seems overly prescriptive.

    How could a compliant implementation of Equals<T> be distinguished from Equals(Object) from the callers/users perspective?

  • Reported: IDL4-CSHARP 1.0 — Mon, 30 Aug 2021 21:22 GMT
  • Updated: Wed, 8 Sep 2021 15:00 GMT

Use of annotations as part of IDL example do not provide a clean example

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The annotations should be covered in a separate section of the document and NOT be part of a clean, canonical example.

    Suggest:
    // IDL
    enum E

    {x, y, z}

    ;

    // C#
    public enum E

    { x, y, z }

    ;

    Also should enums inherit uint?

  • Reported: IDL4-CSHARP 1.0 — Mon, 30 Aug 2021 21:28 GMT
  • Updated: Wed, 8 Sep 2021 15:00 GMT

Use of anonymous array type in array section

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Anonymous types should be moved to their own section

    Suggest:

    //IDL
    typedef long myLongArray[2][3];

    // C# example

  • Reported: IDL4-CSHARP 1.0 — Mon, 30 Aug 2021 21:32 GMT
  • Updated: Wed, 8 Sep 2021 15:00 GMT

Remove the bifuration of basic and full inetrfaces

  • Key: IDL43-52
  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Since IDL is a specification language why have an IDL interface that cannot define data types it wishes to encapsulate and use as parameters for methods and attribute types? It looks like someone had a programming language in mind. I guess in the end the reason I think basic interfaces are a bad idea is that they can only be identified heuristically. The absence of contained types is a poor indicator of the IDL authors intent regarding whether the interface is basic or not.

  • Reported: IDL 4.2 — Wed, 8 Sep 2021 14:55 GMT
  • Updated: Wed, 8 Sep 2021 14:55 GMT

Behaviour when nested is not present should be standardized

  • Key: IDL43-51
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Currently the specification says: Note – The default value (TRUE) is significant when the annotation is present (this means that using the compact form @nested will set the element as nested, which is what is expected intuitively). It does not mean that by default (i.e.,when no annotation is present) an element is nested.

    The case when no nested is present should be specified, it should be the same as TRUE or FALSE and not left open. We observed that different DDS vendors take different decisions making portability of user IDL which uses partly @nested broken. Some vendors assume default nested TRUE, others FALSE which in practice means when the user wants portable IDL he has to specify it which each IDL type.

  • Reported: IDL 4.2 — Mon, 23 Aug 2021 17:18 GMT
  • Updated: Wed, 8 Sep 2021 14:33 GMT

Sections mapped to naming schemes complicates the document

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Suggestion is to have one section or appendix where possible naming mappings could be covered.

    Change the IDL example naming to match the C# community expectations if that makes it easier to specify

  • Reported: IDL4-CSHARP 1.1b1 — Mon, 30 Aug 2021 21:18 GMT
  • Updated: Wed, 8 Sep 2021 14:22 GMT

A canonical example for sequences is missing

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Beside basic types no other canonical example is included. I suggest removing the basic types and having one example.

    // IDL
    struct foo

    {...};
    typedef sequence<foo> fooSeq;

    // C#
    class fooSeq : IDL:ISequences<foo> {...}

    ;

    Something like this.

  • Reported: IDL4-CSHARP 1.0 — Mon, 30 Aug 2021 21:13 GMT
  • Updated: Wed, 8 Sep 2021 14:22 GMT

Basic types include extended types

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Types such as sbyte and int32 are included in this section and should not be.

    These types should be moved to the extended types section.

    The section for these types is missing from the document.

  • Reported: IDL4-CSHARP 1.1b1 — Mon, 30 Aug 2021 21:09 GMT
  • Updated: Wed, 8 Sep 2021 14:21 GMT

Missing hyperlinks for CORBA speficiations

  • Key: IDL43-45
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    For the CORBA specifications as part of the scope chapter there are no hyperlinks, these should be added

  • Reported: IDL 4.2 — Thu, 19 Aug 2021 07:40 GMT
  • Updated: Thu, 19 Aug 2021 14:25 GMT

Missing extended basic types section

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    This building block section is missing (e.g. sbyte).

  • Reported: IDL4-Java 1.0 — Wed, 11 Aug 2021 17:24 GMT
  • Updated: Wed, 11 Aug 2021 17:24 GMT

Mapping to alternative identifier formats

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    It seems every section has this deviation of alternative identifier mappings. I find that it maps the document more difficult to read. The document at large should provide canonical text and examples. These alternatives should be placed in a section that caters to those alternatives with easy links to this section elsewhere in the document.

  • Reported: IDL4-Java 1.0 — Wed, 11 Aug 2021 17:23 GMT
  • Updated: Wed, 11 Aug 2021 17:23 GMT

Application of Non-Standard Annotations

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    I could not find a place that discussed what is expected if an IDL compiler encounters an annotation that it can parse but does not understand.

  • Reported: IDL4-Java 1.0 — Wed, 11 Aug 2021 17:17 GMT
  • Updated: Wed, 11 Aug 2021 17:17 GMT

Annotation usage

  • Status: open   Implementation work Blocked
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The section on annotations should contain examples of how to use the various standard annotations.

  • Reported: IDL4-Java 1.0 — Wed, 11 Aug 2021 17:14 GMT
  • Updated: Wed, 11 Aug 2021 17:14 GMT

Anonymous types sections needs text

  • Status: open   Implementation work Blocked
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    This section needs to be filled out with examples of anonymous IDL types.

  • Reported: IDL4-Java 1.0 — Wed, 11 Aug 2021 17:12 GMT
  • Updated: Wed, 11 Aug 2021 17:12 GMT

Annotations should not be used for examples in a canonical mapping

  • Status: open   Implementation work Blocked
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The example uses annotation to define the type. The mapping should be clean/pure without annotations. The annotation should be moved to the sections on annotations.
    // IDL
    enum AnEnum

    { X, Y }

    ;

    // Java
    public enum AnEnum {
    X,
    Y;
    private int value;
    private AnEnum(int value)

    { this.value = value; }

    public int getValue()

    { return value; }

    public static AnEnum valueOf(int v)

    { // return X, Y, or raise java.lang.RuntimeException }

    7.17 Standardized Annotations
    }

  • Reported: IDL4-Java 1.0 — Wed, 11 Aug 2021 17:09 GMT
  • Updated: Wed, 11 Aug 2021 17:09 GMT

Union exmple uses octet which is not allowed as a discrimant

  • Status: open   Implementation work Blocked
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Same as the description

  • Reported: IDL4-Java 1.0 — Wed, 11 Aug 2021 17:07 GMT
  • Updated: Wed, 11 Aug 2021 17:07 GMT

Table 7.2

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Ensure the correct separation of building block basic types (e.g. sbye)

  • Reported: IDL4-Java 1.0 — Wed, 11 Aug 2021 17:04 GMT
  • Updated: Wed, 11 Aug 2021 17:04 GMT

Document Review: Table 7.1

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    There needs to be a section on IDL interfaces being mapped to Java 8 interfaces which provide the capability to be a proper container. This removes the need for the old fooPackage id foo were defined in an IDL interface named foo.

  • Reported: IDL4-Java 1.0 — Wed, 11 Aug 2021 17:02 GMT
  • Updated: Wed, 11 Aug 2021 17:02 GMT

Feature macros to guard building blocks

  • Key: IDL43-44
  • Status: open  
  • Source: MIT/Lincoln Laboratory ( Mr. Daniel Herring)
  • Summary:

    Now that IDL is modular with building blocks, IDL authors need a way of guarding IDL files so they are compatible with tools that implement different subsets of the building blocks. See discussion in IDL43-21 for a motivating example.

    See C++ feature test macros for a possible implementation pattern.
    https://en.cppreference.com/w/cpp/feature_test

    Another option is to have an "IDL_VERSION" macro that can be used as a pre-processor condition.

  • Reported: IDL 4.2 — Tue, 15 Jun 2021 21:14 GMT
  • Updated: Wed, 16 Jun 2021 07:26 GMT

Ability to add annotations by reference

  • Key: IDL43-43
  • Status: open  
  • Source: MIT/Lincoln Laboratory ( Mr. Daniel Herring)
  • Summary:

    At present, annotation syntax must be placed in the IDL file, usually right before or after the syntax being annotated.

    This works very well for annotations that define shared interface constraints. It does not work well for annotations that control internal implementation details, such as the selection of an API option. These internal details should be separated from the shared interface and so do not belong in the shared IDL file.

    This proposal is to add a new syntax for annotating IDL structures. The basic idea is to define an annotation that takes two parameters, a "place" in the IDL and an annotation, and has the effect of inserting the annotation at the given place. For example @insert(Foo.x, @some(value)) would be equivalent to placing @some(value) by the definition of Foo.x.

    With this mechanism, end users could create a custom IDL that includes the shared IDL and then adds the custom annotations.

  • Reported: IDL 4.2 — Tue, 15 Jun 2021 20:56 GMT
  • Updated: Tue, 15 Jun 2021 20:56 GMT

Missing bullet "Integers restricted to holding 8 bits of information"

  • Key: IDL43-9
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    7.4.13.4 "Explanations and Semantics" gives a synoptic list of the complements,

    Those complements are:

    • Additions to structure definition in order to support single inheritance and void content (no members).
    • Ability to discriminate a union with other types (wide char and octet).
    • An additional template type (maps).
    • Additional constructed types (bitsets and bitmasks).

    The complement "Integers restricted to holding 8 bits of information" (7.4.13.4.4) should be added there.

  • Reported: IDL 4.2b1 — Sun, 4 Feb 2018 13:38 GMT
  • Updated: Tue, 15 Jun 2021 19:41 GMT

Annotation for union discriminator name

  • Key: IDL43-42
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Predecessor: CPP1116-3

    For mapping the switch of unions, the language mappings choose different fixed names.
    It would be desirable to permit names that reflect the user's application domain.
    Example:

      enum environment_t { air, water, land };
    
      @switchname("environment")
      union env_info_t switch (environment_t) {
        case air:
          air_info_t air_info;
        case water:
          [...]
      };
    

    The @switchname annotation would cause the discriminator to be mapped using the given name.

    This may replace the name chosen by the language mapping (such as in the Ada mapping), or it may supplement the mapping chosen name (such as in the C++ mapping), depending on the nature of the mapped union.

    The provided name may not overlap with an enum value given in a case and it may also not overlap with a branch member name.

  • Reported: IDL 4.2 — Sat, 1 May 2021 16:43 GMT
  • Updated: Sun, 23 May 2021 10:32 GMT

Restrict bitshifts

  • Key: IDL43-41
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    Currently the spec says:

    The << binary operator indicates that the value of the left operand shall be shifted left the number of bits specified by the right operand, with 0 fill for the vacated bits. The right operand shall be in the range 0 <= right operand < 64.•The >> binary operator indicates that the value of the left operand shall be shifted right the number of bits specified by the right operand, with 0 fill for the vacated bits. The right operand shall be in the range 0 <= right operand < 64

    But this should be more restricted, the range should be dependent on the number of bits of the underlying type, when it is for example a 32bit long, the operand should be in the range of 0 <= 32

  • Reported: IDL 4.2 — Mon, 10 May 2021 10:21 GMT
  • Updated: Tue, 11 May 2021 13:54 GMT

Allow enumerator value to be set without using @value

  • Key: IDL43-40
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    IDL 4.2 allows the @value on an enum to set a specific value for example

    enum Test_E

    { @value(8) TEST_NO, @value(10) TEST_YES }

    ;

    It would be more clear and logical when IDL would allow

    enum Test_E

    { TEST_NO = 8, TEST_YES = 10 }

    ;

  • Reported: IDL 4.2 — Tue, 13 Apr 2021 06:21 GMT
  • Updated: Tue, 13 Apr 2021 12:56 GMT

Union implicit default

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The section that describes the default value does not include a discussion
    of what to do when a default is not present. In this case a method called _default or
    __default should be defined to set the discriminant to a non-switched field value.
    This should be fixed before December.

  • Reported: IDL4-CSHARP 1.1b1 — Wed, 24 Mar 2021 13:57 GMT
  • Updated: Thu, 1 Apr 2021 15:55 GMT

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

Use of Omg.Types

  • Key: IDL43-39
  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    The use of the Omg.Types name should be changed to OMG.Types.

  • Reported: IDL4-CSHARP 1.1b1 — Fri, 26 Mar 2021 15:40 GMT
  • Updated: Fri, 26 Mar 2021 15:40 GMT

Partial classes cannot span assemblies

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Every scope containing a constant declaration shall contain a public static partial class.

    The "public static partial class" is inconsistent with the examples in 7.2.3.1 above.

    The use of "partial" is suspect and cannot span assemblies. It may be useful for forward interface declarations though whose definition appears in another IDL file.

  • Reported: IDL4-CSHARP 1.1b1 — Wed, 24 Mar 2021 13:22 GMT
  • Updated: Wed, 24 Mar 2021 13:47 GMT

Allow empty IDL modules

  • Key: IDL43-38
  • Status: open  
  • Source: Remedy IT ( Johnny Willemsen)
  • Summary:

    At the moment model generated IDL files are used it could happen that in a certain configuration setting an empty IDL module appears in an IDL file or when doing some prototyping the users uses an empty IDL file. Currently seciton 7.4.1.4.2 of the IDL specification requires an IDL module to have at least 1 definition. We propose to more relax this, to allow an empty IDL module.

    Rule 3 should be changed to

    <module_dcl> ::= "module" <identifier> "

    {" <definition>* "}

    " A module

    And in the text

    A list of at least one definition (<definition>+) enclosed within braces ({}). Those definitions form the module body.

    Could be changed to

    A list of zero or more definitions (<definition>*) enclosed within braces ({}). Those definitions form the module body

  • Reported: IDL 4.2 — Fri, 26 Feb 2021 09:39 GMT
  • Updated: Tue, 23 Mar 2021 20:56 GMT

Explain how to handle when an annotation appears in attributes with multiple declarators

  • Key: IDL43-37
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    It is possible to put an annotation on an attribute with multiple declarators, like this:

    struct Foo {
      @key long x, y;
    };
    

    What is the effect of this? Does the annotation apply to both declarators? In that case, how do you interpret the following:

    struct Foo {
      @fieldid(0x01000) long x, y;
    };
    

    The spec should say how to handle this case.

    Proposal - annotation applies to all declared members. In some cases this causes an error (same ID on 2 members). In other cases, tools could decide to issue warnings.

  • Reported: IDL 4.2 — Tue, 8 Dec 2020 16:09 GMT
  • Updated: Tue, 23 Mar 2021 20:54 GMT

clarify forwarding rules related to structure inheritance

  • Key: IDL43-36
  • Status: open  
  • Source: Real-Time Innovations ( Mr. Dave Stringer)
  • Summary:

    Structure inheritance is described by rules (45) and (48), page 27. The constraints on using forward-declared structures are given in section 7.4.1.4.4.4.4, page 40. For clarity, it would be better if this section made explicit the prohibited uses of forward declarations. This is done for value types in section 7.4.5.4.2 on page 57, "It is illegal to inherit from from a forward-declared value type not previously defined". Though this is a clarification it has been shown to be needed as this illegal use for forward-declared structures has occurred in external (to OMG) specifications that use IDL.

  • Reported: IDL 4.2 — Wed, 7 Oct 2020 13:56 GMT
  • Updated: Tue, 23 Mar 2021 20:51 GMT

Need the concept of a "using namespace" directive to simplify IDL files

  • Key: IDL43-34
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Programming languages that have the concept of modules/namespaces also include the concept of "using" a namespace type such that one can ommit the explicit reference to the 'used' namespace.

    The following is an example for C++:

    Assume the declaration:

    namespace MyNamespace
    {
        class MyClass
        {
        public:
            void my_operation() {}
        };
        void MyFunction1(MyClass) {}
    }
    

    Normally these types need to be accessed using their fully qualified names:

    MyNamespace::MyClass obj;
    obj.my_operation();
    MyNamespace::MyFunction1(obj);
    

    This can be cumbersome when having to reference a lot of types in the same namespace, specially for deep nested namespaces.

    The C++ using declaration can bring the name space or individual types into scope simplifying the coding as in:

    using MyNamespace::MyClass;
    MyClass obj;
    obj.my_operation();
    MyFunction1(obj);
    

    Or alternatively bringing every type in the name space into the scope:

    using namespace MyNamespace;
    MyClass obj;
    obj.my_operation();
    MyFunction1(obj);
    

    Java and C# provide similar facilities:
    In Java the "import" keyword is used to import packages or types into the scope. The syntax is:

    import package.name.ClassName;   // To import a certain class only
    import package.name.*;
    

    In C# the "using" keyword is used to import namespaces or types into the scope. The syntax is:

    using  MyNamespaceName.MyClassName;   // To import a certain class only
    using MyNamespaceName;
    

    This issue request that a similar facility is added to IDL

  • Reported: IDL 4.2 — Tue, 23 Jun 2020 03:14 GMT
  • Updated: Tue, 23 Mar 2021 20:46 GMT

Rules for Qualified Names need to take into account other Building Blocks

  • Key: IDL43-31
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    This was originally reported as https://issues.omg.org/browse/CORBA34-1

    In 7.5.1, the 3rd bullet point lists "interface, struct, union, exception." Instead the same language from 7.5.2 ("The following kinds of definitions...") should be in effect.

  • Reported: IDL 4.2 — Thu, 14 Feb 2019 23:31 GMT
  • Updated: Tue, 23 Mar 2021 20:31 GMT

current IDL4 grammar breaks backward compatibility with respect to short hand notations

  • Key: IDL43-30
  • Status: open  
  • Source: ZettaScale Technology ( Mr. Erik Hendriks)
  • Summary:

    In section 7.4.4.4.2 it is explained that an annotation may be used in a shortened form in the following conditions:

    • There is no member or only one member with a default value.
      • In that it is allowed to apply the annotation by using just the annotation name.
    • There is only one member.
      • In that case you may apply the name of the annotation and the value of its member, without explicitly mentioning the member name and the equals sign.

    However, the second bullet may break backward compatibility when annotations get extended with additional members in future spec releases. Consider the following example:

    @bit_bound(32)
    bitmask DataRepresentationMask {
       @position(0) XCDR, 
       @position(1) XML,
       @posiiton(2) XCDR2
    }
    
    @annotation data_representation {
        DataRepresentationKind allowed_kinds;
    };
    

    Now to annotate an IDL type to support only the XCDR2 annotation, I can apply a shortened annotation like this:

    @data_representation(XCDR | XCDR2)
    struct Foo {
       long my_long;
    };
    

    Now suppose in a future version of the spec, we extend the @data_representation annotation with an additional field to specify the supported endianness, like this:

    enum EndiannessKind {
        BIG_ENDIAN,
        LITTLE_ENDIAN,
        NATIVE_PLATFORM
    };
    
    @annotation data_representation {
        DataRepresentationKind allowed_kinds;
        EndiannessKind endianness;
    };
    

    In this case, the addition of the new member suddenly invalidates existing IDL files that use the shorthand notation.

    What I want to propose is to allow the shorthand notation to be used for implicitly referring to the first available member. That is fully compatible with the current rule, but will also still apply when new members are added afterwards.

  • Reported: IDL 4.2 — Tue, 12 Feb 2019 16:31 GMT
  • Updated: Tue, 23 Mar 2021 20:31 GMT

References to a Template Module: Syntax doesn't match example

  • Key: IDL43-29
  • Status: open   Implementation work Blocked
  • Source: Honeywell ( Steven Hickman)
  • Summary:

    The example for 'References to a Template Module' contains the line:
    alias MyTemplModule2<S1, S2, m> MyTemplModule;

    According to rule 193, 'MyTemplModule2' should be a scoped_name that refers to a previously defined Template Module. There is nothing else (successfully) defined as 'MyTemplModule2'. I think this line should be:

    alias MyTemplModule<S1, S2, m> MyTemplModule2;

  • Reported: IDL 4.1 — Tue, 22 Jan 2019 18:48 GMT
  • Updated: Tue, 23 Mar 2021 20:29 GMT

Extended structs that are both inheriting and empty

  • Key: IDL43-28
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    The grammar rule 195 (for struct_def) indicates that a structure may either inherit from a base or may be empty, but not both. The intent based on the text around the rule seems to be to allow structs that are both empty and inheriting.

  • Reported: IDL 4.2 — Wed, 12 Dec 2018 22:20 GMT
  • Updated: Tue, 23 Mar 2021 20:28 GMT

Some standardized annotations use keywords as identifiers

  • Key: IDL43-26
  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    8.3.3.1 "@default" and 8.3.6.2 "@oneway" specify standardized annotations that a user is not allowed to make use of because grammar rule 225 (in 7.4.15.4.2) states that a <scoped_name> is used to identify the applied annotation. From rule 4, a <scoped_name> is built out of <identifiers> which can't be keywords (see 7.2.1, 7.2.3, 7.2.4).

  • Reported: IDL 4.2 — Wed, 5 Dec 2018 00:00 GMT
  • Updated: Tue, 23 Mar 2021 20:24 GMT

Incorrect rule number on connector_inherit_spec

  • Key: IDL43-23
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Section 7.4.11.4.3 on page 85 contains:

    (181) <connector_inherit_spec> ::= ":" <scoped_name>
    

    The rule number should be 182.

  • Reported: IDL 4.2 — Sun, 1 Jul 2018 06:26 GMT
  • Updated: Tue, 23 Mar 2021 20:07 GMT

Typos in 8.2.2 enumerated list

  • Key: IDL43-22
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Page 112 top continues the bullet list started on p.111 bottom:

    • May precise on which elements the annotation is valid in that specific context. That list may be only a subset of all the possible ones.

    Replace "precise" by a verb, e.g. specify, detail, elaborate, or expound.

    • Shall indicate the default behavior [...]. This is because the later values are intended to be the most logical values when the annotation is present.

    "later" -> latter

  • Reported: IDL 4.2b1 — Sat, 17 Feb 2018 14:36 GMT
  • Updated: Tue, 23 Mar 2021 20:07 GMT

Bitset inheritance

  • Status: open  
  • Source: Object Computing, Inc. - OCI ( Mr. Adam Mitz)
  • Summary:

    How are bitsets that use inheritance mapped?

  • Reported: IDL4-Java 1.0b2 — Tue, 20 Oct 2020 18:02 GMT
  • Updated: Tue, 20 Oct 2020 18:05 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

Typo fixes

  • Status: open  
  • 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
  • Updated: Tue, 14 Jul 2020 20:04 GMT

Typos and Inconsistencies

  • Status: open  
  • 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
  • Updated: Tue, 14 Jul 2020 20:04 GMT

Provide strong abstraction for arrays

  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    The ptc/19-07-02 section 7.2.4.4 proposes a weak mapping for IDL arrays in that they are mapped directly to Java arrays.
    This means that the fixed size nature of IDL arrays cannot be enforced at the location of usage (e.g. index checking and handling of variable size operations of java.util.List).

    On the other hand, 7.2.4.2.1.1 does define an abstraction for "Sequence of Basic Types", see Table 7.4 where e.g. sequence<boolean> is mapped to the interface BooleanSeq.
    A similar mapping could be defined for IDL arrays.

    Example:

      // IDL
      enum Color { RED, GREEN, BLUE };
    
      typedef Color ColorArray[3];
    

    could be mapped to

      public enum Color {
        // [...]
      }
    
      public class ColorArray implements org.omg.type.Array<Color> {
        public ColorArray() {
          elementData = new Color[3];   // initialize private member
        }
        // [...] most of the operations can be implemented in the superclass
      }
    

    The generic abstract class org.omg.type.Array would provide getter, setter, and other methods. It could also throw an exception on use of java.util.List operations that undermine the fixed size. I can provide a demo implementation of the class if desired.

    If it is desired to maintain the possibility of using plain Java arrays then the mapping could be made switchable via an annotation.

  • Reported: IDL4-Java 1.0a1 — Mon, 23 Mar 2020 05:24 GMT
  • Updated: Tue, 14 Jul 2020 20:04 GMT
  • Attachments:

Anonymous types are a separate Building Block

  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Examples given throughout ptc/19-07-02 make indiscriminate use of anonymous types; see

    • 7.2.4.2.1.2 struct MyType
    • 7.2.4.4 struct S2
    • 7.2.4.6 struct MyType
    • 7.14.3.1 struct S4

    For IDL compatibility with other mappings that do not support anonymous types (see e.g. C++11 mapping version 1.4 stion 6.2), the examples should preferably use typedefs.
    Further, it should be mentioned that anonymous types can incur portability problems when used with other language mappings.

  • Reported: IDL4-Java 1.0a1 — Mon, 23 Mar 2020 05:01 GMT
  • Updated: Tue, 14 Jul 2020 20:04 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

Union mapping

  • Status: open  
  • Source: Objective Interface Systems ( Mr. Chuck Abbott)
  • Summary:

    Something I noticed while looking at the union mapping for CORBA. Why is it that the IDL4 mapping uses two underscores prepended to the default method (e.g. __default v.s. _default)?

    If there is no technical reason for it I think the single underscore is preferred.

  • Reported: IDL4-Java 1.0a1 — Wed, 6 May 2020 21:07 GMT
  • 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

Interfaces - Full should define a FooOperations interface

  • Status: open  
  • Source: Real-Time Innovations ( Mr. Fernando Garcia-Aranda)
  • Summary:

    Interfaces - Full should define a FooOperations interface like we have done in the IDL to C# Language Mapping.

    Also, public abstract void op1(S sIn); should be changed to void op1(S sIn);.

  • Reported: IDL4-Java 1.0a1 — Tue, 10 Dec 2019 21:57 GMT
  • 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

Unicode apostrophe in source code

  • Key: IDL43-11
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    7.2.6.2.1 on page 23 contains:

    A character literal is one or more characters enclosed in single quotes, as in:
    const char C1 = ’X’;

    Please use the ASCII apostrophe:
    const char C1 = 'X';

  • Reported: IDL 4.2b1 — Sun, 4 Feb 2018 14:16 GMT
  • Updated: Thu, 1 Mar 2018 00:28 GMT

Mapping int8/uint8 in absence of target language native support

  • Key: IDL43-10
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    If an implementation wishes to claim support for the "Building Block Extended Data-Types", it must support all of its complements, including the section 7.4.13.4.4 "Integers restricted to holding 8-bits of information".

    However, if the targeted programming language does not natively support int8 or uint8 then it is not obvious how the "unsupported" type may be mapped.

    For example, the Java language has a native type byte which is signed.
    The question then arises how the implementation maps the type uint8.

    The implementation could choose to

    • Maintain bit size:
      In that case, it would map uint8 to Java byte.
      The question then arises how values exceeding the positive signed maximum (127) are handled.
    • Maintain numeric range:
      In that case, it could map uint8 e.g. to Java short (16 bit quantity) or int (32 bit quantity).
      The implementation must then address the interoperability with other languages where uint8 is
      mapped to an 8 bit quantity.
    • Use yet a different mapping, for example a holder class (cf. Short, Integer, etc.)

    I therefore propose adding the requirement that the implementation shall document its mapping choice:

    If the targeted programming language does not natively support int8 or uint8 then an implementation
    shall include information about how it maps the types which lack the native language support.
    
  • Reported: IDL 4.2b1 — Sun, 4 Feb 2018 13:56 GMT
  • Updated: Thu, 1 Mar 2018 00:28 GMT

Incorrect rule number on

  • Key: IDL43-12
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    In section 7.4.11.4.3 page 87 and in Annex A page 132, <connector_inherit_spec> should have the rule number 182.

  • Reported: IDL 4.2b1 — Thu, 8 Feb 2018 21:22 GMT
  • Updated: Thu, 1 Mar 2018 00:28 GMT

Typo in title of 7.4.1.4.1

  • Key: IDL43-3
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    There is a stray > at the end of the title,

    7.4.1.4.1 IDL Specification>

  • Reported: IDL 4.2b1 — Tue, 30 Jan 2018 02:22 GMT
  • Updated: Thu, 1 Mar 2018 00:28 GMT

Typo in Annex A: Consolidated IDL Grammar

  • Key: IDL43-5
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    Page 133 last item of "From Building Block Extended Data-Types" :

    (1) <unsigned_longlong_int> ::+ “uint64”

    The rule number should be 215.

    As an aside, the quotation marks used in rules 208 to 215 are fancy Unicode characters while the rest of the grammar uses the regular ASCII code 34 decimal.

  • Reported: IDL 4.2b1 — Mon, 29 Jan 2018 18:59 GMT
  • Updated: Thu, 1 Mar 2018 00:28 GMT

Copy/paste problem at

  • Key: IDL43-8
  • Status: open  
  • Source: Airbus Group ( Mr. Oliver M. Kellogg)
  • Summary:

    This is not an issue in the strict sense, just a usability observation.
    If I copy/paste the word <porttype_def> of rule 174, it comes out as

    >‎ yedeepyotrop <
    
  • Reported: IDL 4.2b1 — Wed, 31 Jan 2018 06:52 GMT
  • Updated: Thu, 1 Mar 2018 00:28 GMT

Apparently incomplete phrase

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

    In section 4 "Terms and Definitions" on page 7, the last sentence is:

    > [...] Building blocks are described in
    > clause 0,

    The sentence seems to end on the comma; furthermore, I cannot find a "clause 0".

  • Reported: IDL 4.2b1 — Wed, 31 Jan 2018 01:04 GMT
  • Updated: Thu, 1 Mar 2018 00:28 GMT

Formatting error in title of 7.4.13.4

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

    The title of 7.4.13.4 says:

    7.4.13.4 <unsigned_longlong_int> ::+ “uint64”Explanations and Semantics

    This is a formatting error. The {{ <unsigned_longlong_int> ::+ “uint64”}} should appear before the title as one of the rules following:

    (214) <unsigned_long_int> ::+ “uint32”

    Note that this problem appears only in the generated PDF. The word document is fine.

  • Reported: IDL 4.2 — Fri, 8 Dec 2017 23:10 GMT
  • Updated: Thu, 1 Mar 2018 00:28 GMT

Typo in section 7.4.1.4.4.4.3 Enumerations

  • Key: IDL43-1
  • Status: open  
  • Source: Real-Time Innovations ( Dr. Gerardo Pardo-Castellote, Ph.D.)
  • Summary:

    Section 7.4.1.4.4.4.3 Enumerations says:

    An enumeration must contain at least one enumerator and no more than 232.

    The 232 is a typo. It was meant to be 2 32

  • Reported: IDL 4.2 — Fri, 8 Dec 2017 22:41 GMT
  • Updated: Thu, 1 Mar 2018 00:28 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