Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
# TTF40 Working Session at Ericsson, Budapest
## Range-based loop alignment
We discussed proposed changes for issue #23 and and #30 and came to a
resolution that fixes most misalignments with only minor changes to the current
behaviour:
- Automatic type inference will be included, but no new BNF productions will be
added.
- Templates will not be included in for-range-loop declarations, to avoid open
edge cases with `lengthof`.
- The perception for assignment of an uninitialized iterator variable will be
added.
- The examples will be reorganized to reflect above changes.
## Support for XML
Since there have not been any objections to the proposal, we will proceed as
proposed.
## Style Guide for Examples
We agreed that a common style guide for examples (and potentially conformance
tests) would be beneficial. In issue #47 we will collect various alternatives
and compile a proposal.
## Lazy/fuzzy Evaluation
We discussed the current state of template evaluation and its implementation in
different tools. We recognized the validity of the different use-cases for
all different types of template and aggreed that the current specification is
not clear enough and needs to be revised.
One cause for confusion is the meaning of "parameterization". It is not clear
if this means parameterization in the sense of formal and actual parameters or
if it is used a general term for any kind of referring to a source of values
(constants, functions, ...).
Issue #49 will be used to identify and clarify the different usage of the term
parameterization.
Further discussion and proposals for template evaluation and deprecation of
`@lazy`/`@fuzzy` will be made in issue #48.
## Type Terminology
We agreed that the current terms do not serve us well and should be revised.
Harmonization of charstring should be taking into account and its consequences
need to be studied.
Issue #50 will be used to track the progress on this topic.
## Structured Types
The discussion the following structured types will be tracked by issue #51.
### `set` and `set of`
We discussed that `set` and `set of` are used in practice, but their
differences to `record` and `record of` are not part of the language
specification.
### `anytype` and `any`
We discussed use-cases and limitations of `anytype` and `any`.
`anytype` is widely used various language mapping but has the limitation to be
contrained to a single module. `any` is more flexible, but does not allow
explicit selection of types and it's use is limited to external functions only.
We agreed to merge `any` and `anytype`. The new open type will be called
`anytype` since it is older and more established.
We new anytype will contain the types of all modules. Rules for resolving name
clashes have to be defined. Probably the same rules as for resolving name
clashes in module imports:
```ttcn3
module A { type integer T; type charstring S }
module B { type boolean T }
module C {
import from A all;
import from B all;
type anytype.S s; // OK, since S is unique
type anytype.T t; // ERROR: name clash between A.T and B.T
type anytype.A.T t; // OK
}
```
The new anytype shall allow implicit selection of types, like `any` does:
```ttcn3
var anytype a;
a := 1;
a := "hello";
var charstring s := a; // OK, since `charstring` is selected
```
The new anytype shall also allow subtyping like `any` would have done:
```ttcn3
type anytype BoolOrString (boolean, charstring);
var BoolOrString b;
b := true; // OK
b := "hello"; // OK
b := 1; // ERROR: integer is not part of the subtype
```
This new behaviour models what is known as "sum types", "variant types",
"tagged unions", ... and helps to specifiy polymorphic functions such as `substr`:
```ttcn3
type anytype listtype (hexstring, octetstring, bitstring, charstring);
external function substr(inout listtype s, integer start, integer length) return listtype;
// NOTE: Generic types like `record of T` have to be figured out yet.
```
### Arrays
Custom indexing for arrays will be removed from the language specification. An
array will be a shorthand for a record with fixed length.
It was discussed further whether to restrict the usage of arrays to
declarations and formal parameters only and to forbid their use in
field-definitions:
```
type record R {
integer a[5]
}
```
This proposal was rejected, since it people are used to it and the benefit of
this restriction is not convincing.
### Map-types
We discussed the current specification of map-types and whether its custom
syntax and reuse of the keywords `map` and `unmap` is the right decision. One
alternative would be specifying list types as mere "standard library
implementation" without special syntax (like it was done with containers in
C++).
We could not see the benefits of changing the current specification and decided
to keep it as it is, but at least review the specification of `unmap` to delete
elements.
## Automatic types
We discussed whether automatic type inference should stay part of the core
language specification or be moved to a "convenience extension package".
Concern was raised that automatic typing might lead to lower code quality and that
such feature would create unnecessary implementation effort for tool vendors.
Speaking in favor of automatic typing, it was argued that implementation effort
is only minimal since type inference is already implemented in every tool
anyway. It was also argued that automatic typing can also lead to
higher code quality by improving readablity and preventing potential errors
rooted in type compatibility during assignment:
```ttcn3
type record PolarCoord {
float r;
float phi;
}
type record CartesianCoord {
float x;
float y;
}
type port P {
inout PolarCoord;
}
function getCoord() return CartesianCoord {
return {x := 1.0, y := 2.0};
}
// ...
var PolarCoord p := getCoord(); // the CartesianCoord is automatically
// converted to PolarCoord.
// A tool cannot warn about such errors, since
// it does not know the testers inention.
p.send(p);
```
We postponed the decision for now, since it is not a critical issue.
## Type Semantics
During discussion if its possible to import the same module twice (no, it's
not), it became apparent that we need to introduce new concepts to the language
type system.
The definition of __type synonym__, __type alias__, __subtype__ need to be reviewed.
This could include __type compatibility__, __type equivalence__ and __strong typing__.
Currently there are two uses for __strong typing__:
- in `inout` parameters to ensure the underlying type of a call by reference
value is not changed.
- in port communication to ensure that the encoding of a value is as expected.
Issue $52 will be used to track the progress on this topic.
## Expressions
We discussed that operators such as `+`, `<@`, ... are unproblematic and do not
need much review.
It should be reviewed which function-like operators such as `ischoosen` could
be demoted from operator to simple predefined-function.
Some cases could be difficult, because they look like normal functions, but are
not. For example the parameter of `ischoosen` is not evaluated but rather used
as a symbol to be checked for selection:
```ttcn3
var anytype a := { integer := 1 };
log(ischoosen(a.charstring)); // Output: false
log(someFunction(a.charstring)); // ERROR: charstring is not selected.
```
Further work on this topic will be continued in issue #53.
## Definition of Templates
Templates are __the__ central concept of TTCN-3. The evolution of the language,
however, has led to a situation where the standard has become difficult to
understand. For example, when talking about "values" sometimes the term refers
to a concrete value without matching symbols, sometimes to a concrete value or
the value of a template. When talking about "templates" sometimes the term
refers to a value of template type, sometimes just to the template-type.
For the next major release we agreed to refine the terminology and how
templates are specified.
Issue #54 will be used to track the progress on this topic.
## List type semantics
Index-access, length, concatenation, value list assignment, assignment-lists,
handling of uninitialized elements and templates needs harmonization.
Issue #22 will track that progress.
## Interleave
Interleave is required for certain used cases. Waiting for some messages to
arrive during error-handling, to name one example. However in its current state
it's too easy to create extremly complex and opaque behaviour.
Issue #55 will be used to discuss possible improvements.
## `map` and `unmap`
We want to keep `map param` and `unmap param` as they are. However we agreed to
drop support for the legacy operations `triMap` and `triUnmap`, since they are
just a special case of the more general operations `triMapParam` and
`triUnmapParam`.
Issue #56 will be used to track the progress on this topic.
## `with` statements and attributes
Similar to the import statment, the `with` statement should be simplified.
We discussed that the `with` statement is useed for attaching attributes to
module-definitions of modules or groups and to types and their fields directly.
"Allrefs" seem not to be used in practice, as is the `display` attribute and
multi-encodings.
Issue #57 will provide a proposal for simplification without losing
expressibility.
# Groups
Groups are useful for documentation, structuring modules and for attaching
common attributes.
Group won't become a scope unit, because it would break compatibility and not
bring much value.
## Structure of the major release
In issue #58 we will propose an initial draft for the structure of the next
major release of TTCN-3.
## Migration Guide
Issue #59 provides a possible structure for the migration guide.
## Named-loops
Issue #32 has been revoked and closed. Named loops don't bring much benefit,
since the standard already provided a way to break out of nested loops using
`goto`, which is more intuitive and flexible.
## Macros
After extensive discussion we came to the conclusion that preprocessing macros
should stay part of the core language specification.
It should be reviewd, though, since the some macros (`__SCOPE__` and
`__MODULE__`) cannot be used as macro but rather as a predefined constant.
## Goto
We had mixed feelings about `goto`. On the one hand its use is discouraged in
many environments, on the other hand, it can a be a powerful tool (given it's
properly specified and used).
Goto could be a candidate for previously mentioned convenience extension.
Further discussion is needed.
## Convenience extension
Many language features strictly speaking are not necessary, but provide the
convenience of writing less code, providing modern programming patterns, ...
An extension package could help us providing the best of both worlds: A core
language specification containing only the most essential features and an
extension package providing all the convenience features.
At the moment we cannot say if enough features can be moved to an extension,
we'll see when we get there.
## Other issues
We discussed many smaller issues covering clarifications or language features
that need to be discussed after the major part of the core language has been
revised. Some of those issues have been closed and may be reopened when needed.