idl4-csharp-1.0 — Open Items
Aggregate of idl4-csharp-1.0.en.md, generated by website/_tools/gen_open_items.py.
No new content: every entry appears there as an item with its evidence.
2.1 Implementation: IDL -> C# source per Chapter 7
Status: partial — the walk transforms IDL into C# source but follows Chapter 7 only in the type core; the API shape deviates in the points itemised below (fields instead of properties, T[] instead of ISequence<T>, no I prefixes, no System.Exception base).
7.1.1 Two naming schemes, selected via @csharp_mapping
Status: open — the materialiser knows no @csharp_mapping and no switch; it follows one fixed rule (type names verbatim, members with the first letter raised).
7.1.1 Collision resolution: @ prefix for keywords, _ prefix for spec names
Status: partial — the @ prefix for C# keywords is implemented; the _ case for spec-introduced names (Constants) is missing because the materialiser does not treat them as reserved (ZdConstants).
7.1.1.1 IDL naming scheme: names without case transformation
Status: open — the scheme is not selectable. The materialiser transforms members (first letter raised) and leaves type names verbatim, a mixture matching neither scheme.
7.1.1.2 .NET Framework Design Guidelines naming scheme
Status: partial — members are only raised in the first letter, types and enumerators stay verbatim; the .NET rules (full Pascal Case, I prefix) are not applied.
7.1.1.2.1 Pascal Case transformation
Status: partial — only the first letter is raised (my_field -> My_field); underscores are not removed because a full Pascal Case is not injective over the names IDL 4.2 §7.2.3 permits (the reason is in the module doc).
7.1.1.2.2 Camel Case transformation
Status: partial — operation parameters are taken verbatim, not transformed into Camel Case.
7.1.2 Reserved names (C# keywords + Constants)
Status: partial — the C# keywords are tracked as reserved; the name Constants is not, because the class is called ZdConstants.
7.2.3 Constants: two alternatives
Status: partial — only the container variant exists, and it is not selectable via @csharp_mapping; the standalone variant is missing.
7.2.3.1 Standalone constants: one class per constant with Value
Status: open — constants are held as const fields in a shared ZdConstants class, not as one class per constant.
7.2.3.2 Constants container: public static partial class Constants
Status: partial — the class is public static, but neither partial nor named Constants, and not configurable via the annotation.
7.2.4.1.2 Floating-point types (Tab.7.3)
Status: partial — float and double match; long double is emitted as the generated sixteen-octet holder global::ZeroDds.Idl.Float128, not as decimal (the spec itself warns about precision loss; the deviation is justified in the module doc).
7.2.4.2.1 IDL sequence -> Omg.Types.ISequence
Status: partial — sequences are emitted as T[]; the runtime declares ISequence<T>/IBoundedSequence<T>, but the materialiser does not reference it.
7.2.4.2.1 Tab.7.4: sequences of basic types
Status: partial — the element types match, the container type is T[] instead of Omg.Types.ISequence<T>.
7.2.4.2.1 Sequence/map members as read-only properties (with @external)
Status: partial — members are public, writable fields, not properties; @external does not change the C# form.
7.2.4.2.3 IDL wstring -> C# string (UTF-16)
Status: partial — no test checks that IDL wstring maps to C# string; the cited corpus run only checks that the cases render.
7.2.4.2.4 IDL fixed -> C# decimal + ArithmeticException
Status: partial — fixed<P,S> is held as a string carrying the decimal; the spec demands decimal. Reason: decimal has 28-29 digits, IDL 4.2 permits up to 31 (evidenced in the module doc).
7.2.4.3.1 IDL struct -> C# public class
Status: partial — a public sealed class with one public field per member is produced; properties, the copy/all-values constructors and IEquatable<T> are missing, and initialisation is C# default initialisation.
7.2.4.3.2 IDL union -> C# public class (discriminator protocol)
Status: partial — the class carries _d and one field per case; the Discriminator property, getter pairs, Set<Member> modifiers, InvalidOperationException and IEquatable<T> are missing.
7.2.4.3.3 @bit_bound underlying type for enums
Status: partial — : int is always written; @bit_bound selects no underlying type.
7.2.4.4 IDL array -> C# array + bounds check
Status: partial — arrays are emitted as jagged T[][] fields; there is no setter with a length check (fields instead of properties).
7.3 IDL any -> Omg.Types.Any
Status: partial — the runtime declares Omg.Types.Any, but the materialiser refuses any by name (MaterialiseError::NoLanguageForm) instead of mapping to it.
7.4 IDL interface -> C# public interface
Status: partial — methods and attribute properties as well as in/out/ref match; the I prefix is missing (name verbatim), and derived interfaces are flattened into the single declaration instead of inheriting through a base list.
7.4.1 IDL exception -> C# class : System.Exception
Status: partial — the class exists with one field per member; it does not derive from System.Exception (a member like message then collides with inherited members, CS0108/CS0542; described in the module doc); own item.
7.4.1 Exception class derives from System.Exception
Status: open — crates/lang-rules/src/adapter/csharp.rs::exceptions generates a data class without a base class; the test an_exception_is_a_data_class_and_not_a_system_exception records this deviation.
7.4.2 Interface forward declaration
Status: partial — the quoted test checks that a forward declaration without a definition is refused as E002; none checks that one with a definition produces no declaration of its own.
7.5 IOperations + I + class
Status: partial — exactly one interface declaration is produced; the §7.5 Operations/container split and the embedded types in a <Name> class are missing.
7.6 IDL valuetype -> abstract class + factory attribute
Status: partial — a sealed class with the state members is produced; the abstract class, the public/private -> protected split, operations and the FactoryAttribute are missing.
7.9-7.13 Components (basic/homes/ports/connectors) and template modules
Status: partial — an instantiation of a template module becomes an ordinary module in the model, which the C# column maps. Components, homes, ports and connectors are not translated into intermediate IDL; own item.
7.9-7.12 Components, homes, ports and connectors as intermediate IDL
Status: open — the transformation into equivalent IDL exists in crates/ccm/src/transform.rs; the C# path of zerodds-idlc does not apply it, and it does not translate ports and connectors.
7.14.1 Struct with single inheritance -> C# extends
Status: partial — the base members are folded into the derived sealed class (XTypes 1.3 layout), but there is no C# base class (extends).
7.14.3.1 IDL map -> IDictionary<TKey,TValue>
Status: partial — maps are emitted as ZdEntry_<k>_<v>[] (an array of a generated two-field class), not as IDictionary. The reason is the order axis (MapEntryOrder), evidenced in the module doc.
7.14.3.2 IDL bitset -> C# struct + IEquatable
Status: partial — a class with one public field per bitfield (correct holder width) is produced, not a struct with properties and IEquatable<T>.
7.14.3.3 IDL bitmask -> C# enum [Flags] + BitArray
Status: partial — a [Flags] enum with the correct holder and position values is in place; the Flags suffix on the name and the BitArray use are missing.
7.16.1 Defining annotations -> attribute class
Status: open — the materialiser refuses annotation types (TypeKind::AnnotationType); no attribute class is produced.
7.16.2 Applying annotations
Status: open — user annotations are not propagated; the only emitted annotation is the internal [IdlName].
7.16.2.1 Annotations on typedefs propagate
Status: open — there is no attribute propagation, neither through typedefs nor otherwise.
7.17.1 @id, @autoid (no impact)
Status: partial — no test compares the C# form with and without @id/@autoid; the cited corpus run only checks that the cases render.
7.17.1 @optional -> Nullable + OptionalAttribute
Status: partial — value types become T?, reference types stay unchanged; the Omg.Types.OptionalAttribute is not emitted.
7.17.1 @extensibility, @final, @mutable, @appendable (no impact)
Status: partial — no test compares the C# form of the @extensibility variants; the cited corpus run only checks that the cases render.
7.17.2 @key -> KeyAttribute
Status: open — the materialiser does not evaluate @key and emits no [Key]; Omg.Types.KeyAttribute sits unused in the runtime.
7.17.2 @must_understand (no impact)
Status: partial — no test compares the C# form with and without @must_understand; the cited corpus run only checks that the case renders.
7.17.2 @default_literal
Status: open — @default_literal is not evaluated; the C# enum default remains the value 0.
7.17.3 Units and ranges: @default, @range, @min, @max, @unit
Status: open — neither default initialisation nor range checks nor UnitAttribute are implemented.
7.17.4 @external
Status: open — @external does not change the C# form; there is neither an ExternalAttribute nor IEnumerable<T> for external sequences.
7.17.4 @nested (no impact)
Status: partial — no test compares the C# form with and without @nested; the cited corpus run only checks that the case renders.
8.1 @csharp_mapping annotation
Status: open — the annotation is neither recognised nor evaluated.
8.1.1 apply_naming_convention
Status: open — no switch; the naming shape is fixed.
8.1.2 constants_container
Status: open — there is only one fixed container class (ZdConstants); the parameter is not implemented.
8.1.3 struct_type
Status: open — IDL structs are always emitted as class; the parameter is not implemented.
A.1 CORBA-specific mappings (A.1.1-A.1.6)
Status: open — the C# column has no CORBA backend. An emit_corba_traits exists only in crates/corba-codegen/src/traits.rs (Rust CORBA), not in the C# column; no Corba.* types are emitted.
idl4-csharp-1.0 — offene Punkte
Aggregat aus idl4-csharp-1.0.md, erzeugt von website/_tools/gen_open_items.py.
Kein eigener Inhalt: jedes Item steht dort mit seinem Beleg.
2.1 Implementierung: IDL -> C# Source per Kapitel 7
Status: partial — der Walk transformiert IDL in C#-Quelltext, folgt Kapitel 7 aber nur im Typkern; die API-Form weicht in den unten einzeln belegten Punkten ab (Felder statt Properties, T[] statt ISequence<T>, keine I-Präfixe, kein System.Exception-Erbe).
7.1.1 Zwei Namensschemata, selektiert über @csharp_mapping
Status: open — der Materialisierer kennt kein @csharp_mapping und keinen Umschalter; er folgt fest einer Regel (Typnamen verbatim, Member erste Buchstabe groß).
7.1.1 Kollisionsauflösung: @-Präfix bei Keyword, _-Präfix bei Spec-Namen
Status: partial — das @-Präfix für C#-Schlüsselwörter ist implementiert; der _-Fall für spec-eingeführte Namen (Constants) fehlt, weil der Materialisierer sie nicht als reserviert führt (ZdConstants).
7.1.1.1 IDL Naming Scheme: Namen ohne Case-Transformation
Status: open — das Schema ist nicht wählbar. Der Materialisierer transformiert Member (erster Buchstabe groß) und lässt Typnamen verbatim, also eine Mischung, die keinem der beiden Schemata entspricht.
7.1.1.2 .NET Framework Design Guidelines Naming Scheme
Status: partial — Member werden nur im ersten Buchstaben gehoben, Typen und Enumeratoren bleiben verbatim; die .NET-Regeln (volles Pascal Case, I-Präfix) sind nicht angewandt.
7.1.1.2.1 Pascal-Case-Transformation
Status: partial — nur der erste Buchstabe wird gehoben (my_field -> My_field); Unterstriche werden nicht entfernt, weil das volle Pascal Case nicht injektiv über die von IDL 4.2 §7.2.3 erlaubten Namen wäre (der Grund steht im Modul-Doc).
7.1.1.2.2 Camel-Case-Transformation
Status: partial — Operationsparameter werden verbatim übernommen, nicht in Camel Case transformiert.
7.1.2 Reserved Names (C#-Keywords + Constants)
Status: partial — die C#-Keywords sind als reserviert geführt; der Name Constants ist es nicht, weil die Klasse ZdConstants heißt.
7.2.3 Constants: zwei Alternativen
Status: partial — nur die Container-Variante existiert, und sie ist nicht über @csharp_mapping wählbar; die Standalone-Variante fehlt.
7.2.3.1 Standalone Constants: Klasse pro Konstante mit Value
Status: open — Konstanten werden als const-Felder in einer gemeinsamen ZdConstants-Klasse gehalten, nicht als je eine Klasse pro Konstante.
7.2.3.2 Constants Container: public static partial class Constants
Status: partial — die Klasse ist public static, aber weder partial noch Constants genannt noch über die Annotation konfigurierbar.
7.2.4.1.2 Floating-Point-Typen (Tab.7.3)
Status: partial — float und double stimmen; long double wird als generierter 16-Oktett-Halter global::ZeroDds.Idl.Float128 emittiert, nicht als decimal (spec-eigene Warnung zur Präzisionsverfälschung; die Abweichung ist im Modul-Doc begründet).
7.2.4.2.1 IDL Sequence -> Omg.Types.ISequence
Status: partial — Sequenzen werden als T[] emittiert; die Laufzeit deklariert ISequence<T>/IBoundedSequence<T>, der Materialisierer referenziert sie aber nicht.
7.2.4.2.1 Tab.7.4: Sequenzen von Basistypen
Status: partial — die Elementtypen stimmen, der Containertyp ist T[] statt Omg.Types.ISequence<T>.
7.2.4.2.1 Sequence-/Map-Member als read-only Properties (mit @external)
Status: partial — Member sind öffentliche, schreibbare Felder, keine Properties; @external ändert die C#-Form nicht.
7.2.4.2.3 IDL wstring -> C# string (UTF-16)
Status: partial — kein Test prüft, dass IDL wstring auf C# string abgebildet wird; der zitierte Korpus-Lauf prüft nur, dass die Fälle rendern.
7.2.4.2.4 IDL fixed -> C# decimal + ArithmeticException
Status: partial — fixed<P,S> wird als string gehalten, der den Dezimalwert trägt; die Spec verlangt decimal. Grund: decimal hat 28-29 Stellen, IDL 4.2 erlaubt bis 31 (im Modul-Doc belegt).
7.2.4.3.1 IDL struct -> C# public class
Status: partial — es entsteht eine public sealed class mit einem öffentlichen Feld pro Member; Properties, Copy-/All-Values-Konstruktor und IEquatable<T> fehlen, die Default-Initialisierung ist die C#-Default-Initialisierung.
7.2.4.3.2 IDL union -> C# public class (Discriminator-Protokoll)
Status: partial — die Klasse trägt _d und ein Feld pro Case; die Discriminator-Property, Getter-Paare, Set<Member>-Modifier, InvalidOperationException und IEquatable<T> fehlen.
7.2.4.3.3 @bit_bound-Underlying für Enums
Status: partial — es wird immer : int geschrieben; @bit_bound wählt keinen Underlying-Typ.
7.2.4.4 IDL Array -> C# Array + Bounds-Check
Status: partial — Arrays werden als gejaggte T[][]-Felder emittiert; einen Setter mit Längenprüfung gibt es nicht (Felder statt Properties).
7.3 IDL any -> Omg.Types.Any
Status: partial — die Laufzeit deklariert Omg.Types.Any, der Materialisierer verweigert any aber namentlich (MaterialiseError::NoLanguageForm), statt darauf abzubilden.
7.4 IDL interface -> C# public interface
Status: partial — Methoden und Attribut-Properties sowie in/out/ref stimmen; das I-Präfix fehlt (Name verbatim), und abgeleitete Interfaces werden flach in die eine Deklaration geschrieben statt über eine Basisliste zu erben.
7.4.1 IDL exception -> C# class : System.Exception
Status: partial — die Klasse existiert mit einem Feld pro Member; sie erbt nicht von System.Exception (ein Member wie message kollidiert dann mit geerbten Membern, CS0108/CS0542; im Modul-Doc beschrieben); eigenes Item.
7.4.1 Exception-Klasse erbt von System.Exception
Status: open — crates/lang-rules/src/adapter/csharp.rs::exceptions erzeugt eine Datenklasse ohne Basisklasse; der Test an_exception_is_a_data_class_and_not_a_system_exception hält diese Abweichung fest.
7.4.2 Interface Forward Declaration
Status: partial — der zitierte Test prüft, dass eine Vorwärtsdeklaration ohne Definition als E002 verweigert wird; dass eine mit Definition keine eigene Deklaration erzeugt, prüft keiner.
7.5 IOperations + I + -Klasse
Status: partial — es entsteht genau eine Interface-Deklaration; die Operations/Container-Aufteilung nach §7.5 und die eingebetteten Typen in einer <Name>-Klasse fehlen.
7.6 IDL valuetype -> abstrakte Klasse + Fabrik-Attribut
Status: partial — es entsteht eine sealed class mit den State-Membern; die abstrakte Klasse, die Trennung public/private -> protected, Operationen und das FactoryAttribute fehlen.
7.9-7.13 Components (Basic/Homes/Ports/Connectors) und Template Modules
Status: partial — eine Instanziierung eines Template Module wird im Modell zu einem gewöhnlichen Modul, das die C#-Spalte abbildet. Komponenten, Homes, Ports und Connectoren werden nicht in Intermediate-IDL übersetzt; eigenes Item.
7.9-7.12 Komponenten, Homes, Ports und Connectoren als Intermediate-IDL
Status: open — die Transformation in äquivalentes IDL gibt es in crates/ccm/src/transform.rs; der C#-Pfad von zerodds-idlc wendet sie nicht an, und Ports und Connectoren übersetzt er nicht.
7.14.1 Struct mit Single Inheritance -> C# extends
Status: partial — die Basis-Member werden in die abgeleitete sealed class gefaltet (XTypes-1.3-Layout), es gibt aber keine C#-Basisklasse (extends).
7.14.3.1 IDL map -> IDictionary<TKey,TValue>
Status: partial — Maps werden als ZdEntry_<k>_<v>[] (Array einer generierten Zwei-Feld-Klasse) emittiert, nicht als IDictionary. Grund ist die Ordnungsachse (MapEntryOrder), im Modul-Doc belegt.
7.14.3.2 IDL bitset -> C# struct + IEquatable
Status: partial — es entsteht eine Klasse mit einem öffentlichen Feld pro Bitfeld (richtige Holder-Breite), kein struct mit Properties und kein IEquatable<T>.
7.14.3.3 IDL bitmask -> C# enum [Flags] + BitArray
Status: partial — [Flags]-Enum mit korrektem Holder und Positionswerten ist da; der Flags-Suffix am Namen und die BitArray-Verwendung fehlen.
7.16.1 Definieren von Annotationen -> Attributklasse
Status: open — der Materialisierer verweigert Annotationstypen (TypeKind::AnnotationType); es wird keine Attributklasse erzeugt.
7.16.2 Anwenden von Annotationen
Status: open — Nutzerannotationen werden nicht propagiert; die einzige emittierte Annotation ist das interne [IdlName].
7.16.2.1 Annotationen auf typedef propagieren
Status: open — es gibt keine Attributpropagation, weder über typedef noch sonst.
7.17.1 @id, @autoid (kein Impact)
Status: partial — kein Test vergleicht die C#-Form mit und ohne @id/@autoid; der zitierte Korpus-Lauf prüft nur, dass die Fälle rendern.
7.17.1 @optional -> Nullable + OptionalAttribute
Status: partial — Werttypen werden T?, Referenztypen bleiben unverändert; das Omg.Types.OptionalAttribute wird nicht emittiert.
7.17.1 @extensibility, @final, @mutable, @appendable (kein Impact)
Status: partial — kein Test vergleicht die C#-Form der @extensibility-Varianten; der zitierte Korpus-Lauf prüft nur, dass die Fälle rendern.
7.17.2 @key -> KeyAttribute
Status: open — der Materialisierer wertet @key nicht aus und emittiert kein [Key]; Omg.Types.KeyAttribute liegt ungenutzt in der Laufzeit.
7.17.2 @must_understand (kein Impact)
Status: partial — kein Test vergleicht die C#-Form mit und ohne @must_understand; der zitierte Korpus-Lauf prüft nur, dass der Fall rendert.
7.17.2 @default_literal
Status: open — @default_literal wird nicht ausgewertet; der C#-Enum-Default bleibt der Wert 0.
7.17.3 Units and Ranges: @default, @range, @min, @max, @unit
Status: open — weder Default-Initialisierung noch Bereichsprüfungen noch UnitAttribute sind implementiert.
7.17.4 @external
Status: open — @external ändert die C#-Form nicht; es gibt weder ExternalAttribute, noch IEnumerable<T> für externe Sequenzen.
7.17.4 @nested (kein Impact)
Status: partial — kein Test vergleicht die C#-Form mit und ohne @nested; der zitierte Korpus-Lauf prüft nur, dass der Fall rendert.
8.1 @csharp_mapping-Annotation
Status: open — die Annotation wird weder erkannt noch ausgewertet.
8.1.1 apply_naming_convention
Status: open — kein Umschalter; die Namensform ist fest.
8.1.2 constants_container
Status: open — es gibt nur eine feste Container-Klasse (ZdConstants); der Parameter ist nicht implementiert.
8.1.3 struct_type
Status: open — IDL-Structs werden immer als class emittiert; der Parameter ist nicht implementiert.
A.1 CORBA-Specific Mappings (A.1.1-A.1.6)
Status: open — die C#-Spalte hat kein CORBA-Backend. Ein emit_corba_traits existiert nur in crates/corba-codegen/src/traits.rs (Rust-CORBA), nicht in der C#-Spalte; Corba.*-Typen werden nicht emittiert.