-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGES
722 lines (565 loc) · 33.5 KB
/
CHANGES
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
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
GenoM3 - Generator of robotic component
Copyright (c) 2009-2017 LAAS/CNRS
Changes in genom 2.99.30
Released on Nov 10th, 2017
. Fix conversion of numeric constant to IDL octet type.
. Allow documenting a "port", by using a "doc" attribute in a block
declaration attached to the port.
. Skeleton template generates an optional README.adoc file from the .gen file.
. Add a "yes for all" option in the interactive merge action of "skeleton".
. Improve skeleton merge mode so that merged but unchanged files are not
touched (useful in particular with configure.ac).
. Allow parsing multiple input files including the same files (#130).
. Add tutorials on "how to use external dependency" and "IDS purpose and
usage".
. Use asciidoctor instead of asciidoc to generate the static documentation.
Changes in genom 2.99.29
Released on May 18th, 2017
. Don't require a <start> codel for activities defined in an interface.
. Fix several issues with unions, in particular in the JSON serialisation.
. Allow 'interrupt' and 'doc' properties to be specified in multiple chunks.
. Update the `workflow` tutorial.
. Improve style of the online doc.
Changes in genom 2.99.28
Released on Jul 11th, 2016
. Fix the computation of mutually exclusive codels for a validation codel.
. Fix the IDL mappings for bounded sequences of bounded strings (or arrays).
. Also split pkg-config output at newlines, recent versions use this
separator.
Changes in genom 2.99.27
Released on Apr 12th, 2016
. Fix the scanning of json sequences in the common template source files.
Changes in genom 2.99.26
Released on Nov 9th, 2015
. INCOMPATIBLE CHANGE: Introduced 'paused' transitions. This allows to execute
multiple states of a periodic activity during the same period. This breaks
the behaviour of all activities running in a periodic task. In order to
sleep until the next period, activities must now return a 'paused'
transition (see documentation). A 'paused' transition in a task with no
period behaves as the former special 'sleep' state (waits until another
codel runs and returns a regular transition - i.e. not a paused one).
. Dropped the special 'sleep' state (superseeded by 'paused' transitions).
. Added a new [$codel mutex] template procedure, returning the list of mutually
exclusive codels (sharing resources). This helps template in implementing
better parallelism.
. Do not require a 'start' state for permanent (task) activities. They may
define only a 'stop' event.
. Check at compile time that 'async' codels do not share any data with other
tasks: since they are expected to run in parallel with other codels, this is
a mandatory property. As a convenient exception, async codels sharing data
with only the start or stop state of other permanent activities are still
allowed.
. Skeleton template remembers the -l c++ option so that 'make regen' works.
. Miscelaneaous bug fixes, in particular in sequences mapping.
Changes in genom 2.99.25
Released on May 28th, 2015
. Added configure options to install only the runtime or the code generator
tool
. Fixed Typo in the doc of language::mapping code generator procedure
. Added an optional parameter to [language mappings] controlling #line
generation
. Do not generate #line directives for the IDL mappings of the C client
. Fixed json encoding of 'chars' in the common template json library
. Miscelaneous bug fixes in the build system
Changes in genom 2.99.24
Released on July 24th, 2014
. Rewrote the documentation with asciidoc. This integrates nicely in the
gollum-wikis of the redmine project page.
. Provided common json {,de}serialization functions that can be reused by
templates.
. Added a description of supported options to the C client interface init()
function.
. Renamed the standard "connect_remote" service to "connect_service" for
clarity.
. Updated C codel interface to pass them an additional context pointer
(genom_context self). Ports, remotes and functions throwing exceptions are
updated accordingly.
Changes in genom 2.99.23
Released on March 10th, 2014
. Added a new genom-IDL type "optional< type >"
. Fixed compatibility issues with tcl-8.6
. Fixed the definition of the error code in genom_syserr
. Dropped error code from genom_mwerr exception
. Fixed a bunch of minor bugs in the parser / code generator.
Changes in genom 2.99.22
Released on December 13th, 2013
. Support an "extern" parameter in tcl procedure [$component types], returning
the list of public types of the components interface.
. Fix version in the genom3.pc file (use @PACKAGE_VERSION@ in instead of
@VERSION@).
. Install C client libraries and headers in a middleware-dependent location,
so that multiple builds can be installed inside the same prefix. .pc files
are "middlewarized" too, so PKG_CONFIG_PATH must be tuned.
. Fix skeleton codels Makefile for -l c++ option.
Changes in genom 2.99.21
Released on July 26th, 2013
. Changed the C++ IDL mapping for bounded sequences (use a
genom::bounded_sequence instead of tr1::array).
. Fixed a few syntactic issues in the C++ IDL mapping.
. Fixed the C client interface to be able to invoke requests synchronously:
added a result() function getting the result of a request and changed the
semantics of send() so that it is always non-blocking (callbacks are
optional).
. Fixed the constness of the json_error() function in the c/client.h
interface.
. Added a .pc file for the version of the c/client.h interface, to detect
versions mistmatch early during the configuration of clients.
. Centralized a client.h tcl template source describing the instanciated
c/client interface, so that templates providing a C client are guaranteed to
be compatible.
. Removed the version number in the installation path of genom3 builtin
templates.
. The --tmpldir or the GENOM_TMPL_PATH variable do not discard the genom3
builtin template path anymore.
. Replaced middleware-specific errors with a common middleware exception
mwerr.
. Added a [$port throw] procedure in the tcl template engine, that reports
exceptions that can be raised during the reading or writing of a port.
. Fix error reporting in the tcl template engine (line error number and error
backtrace).
. Improved documentation for the [$type ...] procedure in the tcl template
engine.
Changes in genom 2.99.20
Released on June 10th, 2013
. Changed codels prototypes so that basic types are passed by value instead of
const reference.
. Updated the "genom_state" standard port, with a list of running activities
and timing properties of tasks.
. Added a standard service for killing a component.
. Changed the "mappings" templates to generate the mappings on stdout instead
of as many files as components.
. Changed the skeleton template so that components are named with a "-genom3"
suffix instead of "-genom". This is more consistent with e.g. robotpkg
packages.
. Updated IDL to C++ mappings. They should now be complete and stable.
. Fixed the C mappings for bounded sequences when used in a C++ context.
. Added an abort() method in the client/c interface, for aborting services via
a client request id.
. Renamed the environment variable used to redefine the .gen prepocessor from
"CPP" to "GENOM_CPP".
. Added [$type parent] and [$type nested] procedures in the tcl generator
engine, to access nested types definitions (required for the IDL to C++
mappings).
. Added a [dotgen interface] procedure in the tcl generator engine, listing
existing interfaces in the input file.
. Added a "+silent" mode to the tcl [engine mode] procedure, that leaves
stdout uncluttered for template-specific usage.
. Documented the IDL type manipulation procedures of the tcl generator engine.
. Documented the IDL to C++ mappings and added missing entries for ports and
remotes in the IDL to C mappings.
Changes in genom 2.99.19
Released on May 13th, 2013
. Added proper exceptions in lieu of integer reports. This allows services to
report additional information in case of abnormal termination. A few
incompatible changes in the codels API, the ports mapping and the remote
services had to be introduced.
. Added service local variables. Local variables are specific to each instance
of running services (i.e. specific to internal activities). They are useful
for sharing a reentrantstate among codels of reentrant services.
. Dropped the 'strerror()' method in ports and remotes objets. This is
superseeded by exceptions.
. Added more runtime consistency checks in the codels finite state machine.
. Updated C mapping of bound sequences so that it is also valid in C++ and can
be included in C++ code (issue with the constructor of a 'const' member).
. Fixed [dotgen type] tcl engine procedure not returning anonymous types.
. Added a [$component types visibility ?filter?] tcl engine procedure,
returning the list of types defined in a component (public interface and/or
private types).
. Added a [$type types] tcl engine procedure, returning the list of types
recursively contained in $type.
. Added a [$type mangle] tcl engine procedure, returning a unique ascii type
name suitable for use a an identifier in source code.
. Added a 'filter' callback in the objects digest computation, so that some
objects can be excluded from the digest.
. Improved a lot the error reporting in TCL templates.
. Fixed the skeleton template when invoked from another directory than the
.gen file.
. Fixed a bunch of minor bugs and added respective regression tests.
. Added more documentation on the builtin templates (skeleton, mappings and
interactive).
. Documented the available #pragma directives.
. Added a requirement on python-aafigure for managing the figures in the
documentation (but no figure was added yet).
. Fixed a bunch of minor issues in the documentation generation.
Changes in genom 2.99.15
Released on November 21st, 2012
. Added 'native' IDL keyword. The meaning is slightly different from that of
the OMG IDL. GenoM 'native' keyowrd defines a new opaque type, that can be
used only in codels (or IDS). The type is manipulated as a pointer by GenoM
and the templates, and codels are responsible for the actual type
definition or memory management. This is typically used to store types in
the IDS that cannot be represented as IDL (external types, opaque types,
etc.).
. Renamed #pragma native to #pragma masquerade. This is to avoid confusion
with the new 'native' IDL keyword. The #pragma purpose is also hopefully
clearer.
. Updated mappings for the IDL 'char' type. 'char's are now mapped to
uint8_t in C/C++, so that the C 'char' type is reserved for strings.
. Fixed grammar to allow compound initializers with just a doc string and no
value.
. Improved syntax error handling in the parser. In particular, missing
semicolons or syntax erros in codels parameters should not spew loads of
errors anymore.
. Updated skeleton template to generate $component-genom.pc instead of
lib$component_codels.pc, because the top level package is most often used in
other genom components to include a part of the interface (rather than
linking with the codels).
. Fixed skeleton '-l c++' option for compiling codels with a C++ compiler.
. Temporary disabled support for C++ codels interface. This will not be
supported in 3.0, but remains on the TODO list. C++ codels must use the C
interface in the meantime.
. Fixed a bunch of minor bugs and added respective regression tests.
Changes in genom 2.99.14
Released on October 19th, 2012
. Added a list of "common" exceptions to be thrown by templates and std
services. Letting templates define their own exceptions raise an issue with
the generated enum implementing the exception list. Due to the way the
parser works, the enum may become desynchronized between the codels and the
server implementation.
. Fixed a few compilation/configuration glitches.
Changes in genom 2.99.13
Released on September 7th, 2012
. Implemented "remote" objects that can be used to invoke remote services from
components. Remotes can be passed as parameters to the codels, with an
object-like interface (currently, the sole available method is a synchronous
call()).
. Updated "port" interface so that they are passed to the codels with an
object-like interface, which basically consists of data(), read() or write()
methods (this corresponds to the former "handle" kind or ports). There are
now only two kind of ports : simple or multiple (i.e a dictionary of simple
ports).
. Implemented "interfaces". Interfaces can define the same objects as regular
components. They can be 'provided' or 'used' by components, which means that
the component basically inherits of all the objects defined in the
interface. This is meant to share service declarations between users and
providers of services (the ROS template requires that both sides agree on
the parameter naming). Services defined in a interface are declared as
"remote" objects when "used" and as regular services when "provided". Ports
see their direction swapped.
. Split services into 'functions' and 'activity', so that there are now 3 kind
of services (with attributes). Functions can only have stateless codels,
that are run synchronously by the control task. They are expected to perform
only small computations and run in a short amount of time. Activities are
complex services, that run in an execution task and define a state
machine. They are expected to modify the robot's state or perform heavy
computation.
. Updated the .gen grammar so that components are defined within a block of
braces { }, as for other objects. Also updated properties so that they are
now defined without a colon :. Keywords that are verbs can be spelled with
or without the final 's'. (e.g. throw or throws). The "service" kind of
codel parameters is renamed to "local", which is hopefully more explicit.
. Added "#pragma provides" that provide an interface for all components. This
is used to implement generic genom services.
. Delegated the parsing of input .gen files to the templates. This greatly
simplifies option parsing in genom and also let templates define a few
common objects (via interfaces) before parsing the input.
. Updated the C client interface by renaming some poorly named symbols
(e.g. requests -> services).
. Improved a few parsing error messages.
. Fixed a few bugs in the tcl engine procedures.
Changes in genom 2.99.12
Released on July 2nd, 2012
. Updated the dotgen grammar in an incompatible way: each service parameter
now defines a variable local to each instance of the running service. Codels
must now explicitly declare their parameters as coming from the service. For
symmetry, 'inport' and 'outport' keywords have been replaced by 'port in'
and 'port out' (2 words), and the syntax of port declarations updated.
. Updated the semantics of 'attributes' so that it is possible to continue
writing IDS accessors in a simple manner. Attributes are declared with the
same syntax as services, except that they take their parameters from the
IDS. They can only have 'validate' codels (i.e no task, no state machine).
. Switched documentation to texinfo, and provide HTML, PDF, info(1) and ASCII
documents. The goal was to provide a better (split) HTML output. Also, an
info(1) file is a useful reference while coding.
. Updated documentation for the available preprocessing directives (#pragma)
and improved the naming/description of a few grammar rules.
Changes in genom 2.99.11
Released on May 29th, 2012
. Defined a generic genom.gen that defines two standard services
(abort_activity and connect_input) as well as a standard outport
(genom_state). Templates can use this to implement those standard services
and ports, but this is not a requirement.
. Updated codel port handle API by making a clear distinction between regular
port handles and port handles sets.
. Updated generic c/client.h API with better names for the two kinds of ports
(regular and sets). Added a protocol number to deal with future breakage of
this API.
. Added detection of conflicting codels, i.e. codels with the same name but
different prototypes. This is questionnable for C++ codels, but since this
is not supported yet ...
. Improved automatic merge of user code with newer version of the skeleton.
. Added a utility procedure in the TCL backend for computing the MD5 digest of
a component's interface: [$component digest].
. Deleted unsued and obscure [$type foreach] procedure in the TCL backend.
. Fixed a few bugs related to the dotgen "template" object processing.
Changes in genom 2.99.10
Released on April 30th, 2012
. Added an "asynchronous" style of codels. Those codels are allowed to block
their execution context (typically waiting for an internal event). Other
execution contexts can run in parallel.
. Added a generic C client interface to the runtime headers. This interface
may be implemented by templates to provide a middleware-independant C
client.
. Added a tcl backend procedure returning the list of available templates.
. Improved the skeleton template so that it generates a configure script that
is able to handle a list of templates to compile with the codels. This
simplifies component development and testing.
. Improved a few syntax error messages in the .gen parser.
. Miscelanous minor fixes in the tcl backend procedures.
. Minor fixes for building with gcc-4.6 -Werror.
. Minor cosmetic improments in the skeleton template.
Changes in genom 2.99.8
Released on March 12th, 2012
. Implemented '#pragma native <template> <type> <string>'. This attaches
<string> data to an IDL <type>, for a specific <template>. It can be
retrieved from the backend and used in a template for doing any specific
action. The intended use is to bind ros standard messages to an IDL type,
but the genom specification does not define this further.
. Changed the IDL->C mapping for enums so that the sizeof is guaranteed to be
4 and the enumerated constants can be used anywhere in C code.
. Renamed port handle IDL type to genom::port_handle and
genom::port_handle_set and simplified the codels API. There are now 4 main
functions: genom_port_open/close and genom_port_rdlock/wrlock. Access to
individual port handle members is disallowed in dotgen specification.
. Fixed multidimensional array declarators in dotgen parser as well as in the
[$type declarator] tcl backend procedure. Fixed passing multidimensional
array by value according to C obfuscation in this domain.
. Allow fusionable properties to be declared at several places in a dotgen
specification (e.g. multiple throw lines for codels).
. Added default values for component properties: lang (c), version (0).
. The C helper macro for resizing sequences has been renamed to
genom_sequence_reserve. It also initializes resized data to 0.
. Made the template search function recursive, so that templates can define
'sub-templates' in subdirectories (e.g. pocolibs/server and
pocolibs/client).
. Updated mappings and skeleton builtin templates so that they generate
Makefiles that can track input dependency and automatic regeneration.
. Added tcl backend procedures: [dotgen input deps] and [template deps]. They
both return a list of files suitable for make(1) dependency generation.
. Fixed minor bugs in the following tcl backend procedures: [template
require], [wrap], [dotgen parse].
. Export site-template directory in genom3.pc
Changes in genom 2.99.7
Released on November 18th, 2011
. Deleted 'in/outport event' kind of inports. This will not be in 3.0.
. Added 'in/outport handle' for components that require dynamic port
creation/access or custom serialization etc. This introduces the notion of a
port API provided by genom that every template must implement.
. Improved skeleton template so that it's more readily useful (fixed a bunch
of small issues).
. Fixed the .gen parser in corner cases (e.g. nul delay, delay without period,
etc.)
. Fixed LP64 bugs
Changes in genom 2.99.6
Released on June 29th, 2011
. Renamed 'build-require' property into 'codels-require'. This is hopefully
clearer and this also corresponds to the original GenoM2 syntax.
. Service parameters should now be documented with ':' instead of '::'. The
later was sometimes ambiguous when the default value of a parameter was an
enum with a namespace prefix. For instance, a parameter specification may
look like: enumtype x = ns::value : "doc".
. Codel names are not automatically prefixed anymore: the symbol defined in a
dotgen specification is left unchanged. This allows using codels defined in
an external library if they are directly compatible.
. Added and interactive and/or automatic merging strategy in the TCL generator
engine. This is used by the skeleton template (-i and -u options) to update
generated files that may have been already modified. An external merge tool
(-m option) can also be defined, should the automatic strategy fail.
. Completely rewrote the TCL engine [language ...] procedures. The TCL engine
now has a [lang ?language?] procedure that configures the current
programming language once for all, and all other [language ...] procedures
have been converted to object oriented methods that work with genom objects
(codels, types, etc.) and directly output string in the configured language.
. According to the above, [object::foreach] was renamed to [$type foreach]
(for any $type object). It is now able to generate the loop constructs
(according to the current language) that are required to process sequences
and arrays. This is less generic, but more useful in practice.
. Imported the C preprocessor from the pcc project, and make it the default C
preprocessor for dotgen files. It is installed as libexec/genom-pcpp.
. Implemented the '#pragma require <pkg>' directive in genom-pcpp. This is
required to solve the chicken-egg problem raised by 'require' directives of
components: the C preprocessor needs to #include files from path that are
found in the require'd .pc files. When a '#pragma require' directive is
present, genom-pcpp forks a pkg-config and dynamically adds -I/-D
directives. '#pragma require' packages are merged into the 'require'
property of all the components of a specification.
. Added -N option to genom. This options makes genom simply parse a
specification (like -n) and then dump it in dotgen language. This is useful
mostly for debugging, and the dump is not complete yet (only components and
components properties are dumped at the moment).
. Fixed the dotgen lexer so that it handles # cpp directives anywhere (not
just between valid statements).
. Fixed compilation on MacOS 10.5 with older bison 2.3 (removed too recent
bison declarations).
Changes in genom 2.99.5
Released on March 18th, 2011
. Added the "port array" type. Port arraya are meant to be used by components
that create a variable number of posters, whose name or quantity cannot be
determined at compile time. Port arrays are declared by appending an empty
`[]' right after the port declaration. Any reference to this port in a codel
parameters must specify an IDS member that is used to access a particuler
element in the port array.
. Added a 'template' keyword in .gen language. Template declarations share the
same syntax as the components. All tasks, ports, attributes, services and ids
created in a template context are applied to all components of a
specification. This is meant to be used in template implementations, to add
generic services to a .gen specification.
. Changed the skeleton template so that it generates an installable libray of
codels. The strategy is to make sure that genom will not impose any build
system for the templates (nor for the codels). To achieve this, codels are
required to provide a pkg-config file (.pc) that describes how to link with
the codels and should install themselves as a standalone library. Templates
must use this file to link with the codels library.
. Removed the [buildenv] tcl procedure. Codels and templates must now be
completely decoupled in terms of build system. There thus is no need to try
to implement an abstraction of the build system.
. Removed the 'libcodel' template. This is now superseeded by the new skeleton
template and the strategy of always installing the codels as an independent
library.
. Made generated enum values start from 0, not 1.
. Added option --signature to the 'mapping' template. Passing --signature
generates the codel signatures in addition to the type definitions (the
default) of a specification.
. Added an optional direction parameter to [$codel parameters] template
procedure. The optional direction may one of "in", "out", "inout", "inport"
or "outport". For "in" and "out", parameters of type "inout" are also
returned.
. Added an optional argument "perm" for setting permissions in [template
parse] engine procedure. If the "perm" option is specified, those
persmissions are set on the newly created files. The perm argument syntax is
the same as the tcl "file attributes -permissions" procedure: an octal
number or a string of the form [ugoa][+-][rwx].
. Made the 'event' argument optional in [$service fsm ?event?] and [$task fsm
?event?] procedures. If no event is specified, those procedures return the
full list of events declared for the service or task.
. Added the [$task services] procedure, returning the list of services of a
task.
. Allowed the throw property in a component declaration. Exceptions declared
there are potentially throwable by all services and all tasks.
Changes in genom 2.99.4
Released on September 20th, 2010
. Removed the restriction about having only one component in a .gen
file. There can now be several components defined. Objects that are
implicitely attached to a component (such as tasks, services...) use the
latest component declaration.
. Changed the syntax for IDS definition. IDS is now declared with the
top-level 'ids' keyword, much like an IDL struct. For instance:
ids {
long a;
long b;
};
Several ids declarations are allowed and concatenated all together for each
component. This allows to assemble an IDS from different bits easily.
. Added a 'scheduling' property for tasks in .gen files. The only possible
value is 'real-time' (leaving the scheduling property undefined meaning "no
real-time constraints").
. Made the 'task' property of services optional in .gen files. It is up to the
templates to provide a default execution context for services without an
explicit task.
. Added -l option switch in built-in 'skeleton' template, for selecting the
codels language (the interface of codels being defined by the "lang"
attribute of the .gen file). The only case where it is useful to have a
different language for interface and implementation of codels is for the
generation of codels with a C signature but implemented with C++ code
(equivalent of the "lang: c++" of GenoM version 2).
. Added [dotgen parse] tcl engine procedure, for parsing extra .gen code
either from a file or from a string. This is useful for templates willing to
implement extra services or features on top of a .gen file. [dotgen parse]
appends to the existing specification.
. Added a 'component' property for tasks, services and ports in tcl engine. It
returns the component object to which the task, service or port belongs.
. Added the component namespace in codel signatures.
. Added regression tests for built-in templates 'mappings' and 'skeleton'.
. Changed [object foreach] tcl engine procedure to invoke its 'body' script
before and after recursion into deeper objects, so that it is possible to
generate "opening" and "closing" code in a non-recursive manner with the
[object foreach] procedure.
. Added runtime C helper macros for managing memory allocation of
variable-length sequences. These functions are helper macros only, meaning
that a codel is free to implement its own strategy. The helper macros can
be used by templates as well.
. Fixed installation of .pc pkg-config file that was not installed.
. Fixed stdout and stderr of interactive template sometimes randomly
intermingled.
. Improved some error messages in case of a syntax error in a .gen file.
Changes in genom 2.99.3
Released on July 6th, 2010
. Added [language member {lang} {type} {members}] tcl procedure. This
procedure returns a language construction to access a member of a type.
If 'members' is a list, it is interpreted as a hierachy of members.
. Added [$parameter base] tcl procedure. It returns the base type (i.e. the
IDS or a port type) of that parameter.
. Added optional pattern in the tcl [$type members ?pattern?] procedure, to
retrive members of a type matching pattern only. If pattern is the name of a
member, that member only is returned.
. Changed port declaration syntax and added input and output typed event
ports. Ports are now declared with {in|out}port {data|event}<[type]> name;
. Added components 'attributes'. Component attributes are values from the IDS
that are considered as global parameters controlling the component
behaviour.
. Added [language invoke {lang} {codel} {params}] tcl procedure. It returns a
string corresponding to the invocation of a codel in the language lang, with
the list of parameters params.
. The tcl [language cname {lang} {object} ] procedure now accepts codel
objects and return the symbol name of the codel in the language lang.
. Added [object foreach {var} {object} {body}] tcl procedure. It works for
object of class 'type' and traverses, in depth-first order, the type tree.
For each sub-type in the tree, it evaluates the body with var set to the
current element. If var is a list of two variable names, the second variable
is set to the hierachy of types leading from the main type to the current
element.
. Added optional type parameter in the [$parameter initializer ?type?] tcl
procedure for parameters. If type is a sub-type of the parameter type, the
procedure returns the initializer for that specific sub-type only.
Changes in genom 2.99.2
Released on June 27th, 2010
. Developed the first draft of the C++ mappings.
For bounded version of string and sequences, the mapping relies on a runtime
header that contains a generic implementation of those types. For now, those
structs provide no method, until we decide what is really needed. Unbounded
strings and sequences use the STL string and vector types directly. Unions
are mapped to a struct containing the discriminant plus a native union, but
union members whose C++ mapping have a non-trivial constructor are not
allowed. The other (basic) types have the same mapping as in C.
. Make everything optional in a .gen file: it is up to a template to decide
what is mandatory for it.
. The 'throws' keyword was renamed to 'throw', for consistency with other
keywords.
. Implement the long long integers. Long long are 64 bits integers.
. Make the C mapping use the C99 fixed size integer types.
. Templates are now looked in a path (colon-separated list of directories).
Added the GENOM_TMPL_PATH environment variable that can define (as for the
-t option) this path. Added the default share/genom/site-template directory
in the template search path, so that external templates can install in a
location not dependent on GenoM version.
. Interactive template accepts a -b (batch) option that disable line editing
facility and is well suited for non-interactive use.
. Improved a bit the regression tests. In particular, the C and C++ mappings
for a set of complex IDL datatypes are compiled to check that the mapping at
least generate code that has a meaning.
. Add --version option to the genom tool.
Changes in genom 2.99.1
Released on June 9th, 2010.
. Started documentation. The full document is available in PDF, HTML or ascii
text. It contains a detailed list of the dotgen (.gen) grammar rules; some
of the most basic rules are explained. The genom command line tool usage is
described (also available as a separate unix man page). Tcl template
commands are extensively described.
. Added a release() method in the C mapping for unbounded sequences. The code
allocating some memory for the sequence is expected to update this pointer
so that other parts of the code can possibly reallocate some storage.
. Improved some TCL template commands. Parameters of a service can now be
retrieved by filtering them on their nature (in, out, inout, port...).
Same for the port list.
. Added [template require] template procedure. It loads additional tcl source
code that is made available to the template files.
. Beautify code generation: two newline characters around <' ... '> markers in
template files are replaced by only one newline. This handles the case where
a whole line of template source consists only in TCL code: you naturally
expect this line to be removed in the generated source.
. Fixed error line reporting in template files, and improved error reporting
verbosity in verbose (-v) mode.
Changes in genom 2.99.0
Released on March 26th, 2010.
. First public version. This was released after the most basic design was
achieved and has proven to be able to generate some code.