| GNU CHILL: A Complete CHILL Implementation |
| |
| CHILL (the CCITT High Level Language) is a strongly-typed, block |
| structured language designed primarily for the implementation of large |
| and complex embedded systems. Tens of millions of lines of CHILL code |
| exist, and about 15,000 programmers world-wide use CHILL. Many |
| central-office telephone switching systems use CHILL for their control |
| software. |
| |
| CHILL was designed to |
| |
| - enhance reliability and run time efficiency by means of extensive |
| compile time checking; |
| - provide sufficient flexibility and power to encompass the required |
| range of applications and to exploit a variety of hardware; |
| _ provide facilities that encourage piecewise and modular development |
| of large systems; |
| - cater to real-time implementations by providing built-in concurrency |
| and time supervision primitives; |
| - permit the generation of highly efficient object code; |
| - facilitate ease of use and a short learning curve. |
| |
| CHILL is specified in the "Blue Book": |
| CCITT High Level Language (CHILL) Recommendation Z.200 |
| ISO/IEC 9496, Geneva 1989 ISBN 92-61-03801-8 |
| |
| Cygnus Support has completed the first level implementation of the |
| GNU CHILL compiler. Our compiler now supports the core features of |
| the CHILL language. Our goal is a fully retargetable, complete |
| implementation of the Z.200 specification. The next phase of |
| implementation will include: |
| |
| . a minimal real-time kernel for demonstration use |
| . more rigorous type checking |
| . retargetable input/output |
| . interprocess communications |
| . fully compliant exception handling. |
| |
| The State of the Implementation |
| |
| The GNU CHILL compiler is in early beta state, performing correct |
| compilation and execution of correctly coded programs. Like most |
| CHILL compilers, the GNU compiler implements a large subset of the |
| language (as described below). |
| |
| Since it uses the same compiler back-ends as the GNU C and C++ |
| compilers, GNU CHILL is almost instantly available on all |
| platforms supported by GNU C, including the following: |
| |
| m680xx, i960, i80x86, AMD29K, R3000, R4000, SPARClite, |
| Hitachi H8 and SH families, Z8001/2 |
| |
| It has been specifically tested under SunOS on SPARCs and under |
| SCO Unix on 80386s. |
| |
| All of the GCC optimizations apply to CHILL as well, including |
| function inlining, dead code elimination, jump-to-jump elimination, |
| cross-jumping (tail-merging), constant propagation, common |
| subexpression elimination, loop-invariant code motion, strength |
| reduction, loop unrolling, induction variable elimination, flow |
| analysis (copy propagation, dead store elimination and elimination |
| of unreachable code), dataflow-driven instruction scheduling, and |
| many others. |
| |
| I/O statements are parsed. The anticipated timeframe for I/O code |
| generation is Q1 1994. |
| |
| What's Next |
| |
| The multi-tasking functions require a small real time kernel. |
| A free implementation of such a kernel is not yet available. |
| We plan to offer a productized P-threads interface in Q2 1994. |
| Other runtime functions involving strings and powersets are |
| working. |
| |
| GDB, the GNU Debugger, has been modified to provide simple CHILL |
| support. Some CHILL expressions are not yet recognized. |
| |
| For those who aren't familiar with CHILL, here's a small but |
| useful example program: |
| |
| -- |
| -- Convert binary integers to decimal-coded ASCII string |
| -- |
| vary1: MODULE |
| |
| -- include declarations so we can output the test results |
| <> USE_SEIZE_FILE 'chprintf.grt' <> |
| SEIZE chprintf; |
| |
| -- create a new name for the CHAR array mode |
| SYNMODE dec_string = CHAR (6) VARYING; |
| |
| int_to_dec_char: PROC (decimal_num INT IN) |
| RETURNS (dec_string); |
| |
| DCL neg_num BOOL := FALSE; -- save sign of parameter |
| DCL out_string dec_string; |
| |
| IF decimal_num < 0 THEN -- positive numbers are easier |
| decimal_num := -decimal_num; |
| neg_num := TRUE; |
| FI |
| |
| IF decimal_num = 0 THEN |
| out_string := '0'; /* handle zero */ |
| ELSE |
| out_string := ''; |
| DO WHILE decimal_num /= 0; -- loop until number is zero |
| -- concatenate a new digit in front of the output string |
| out_string := CHAR (ABS (decimal_num REM D'10) + H'30) |
| // out_string; |
| decimal_num := decimal_num / D'10; |
| OD; |
| IF neg_num THEN |
| -- prepend a hyphen for numbers < zero |
| out_string := '-' // out_string; -- restore sign |
| FI; |
| FI; |
| RESULT out_string; -- remember result |
| |
| decimal_num := 0; -- reset for next call |
| neg_num := FALSE; |
| out_string := ' '; |
| |
| END int_to_dec_char; |
| |
| /* Try some test cases */ |
| chprintf (int_to_dec_char (123456), 0); |
| chprintf ("^J", 0); |
| |
| chprintf (int_to_dec_char (-654321), 0); |
| chprintf ("^J", 0); |
| |
| chprintf (int_to_dec_char (0), 0); |
| chprintf ("^J", 0); |
| |
| END vary1; |
| |
| Completeness |
| |
| GNU CHILL currently supports the following features. This outline |
| generally follows the structure of the Blue Book specification: |
| |
| CCITT High Level Language (CHILL) Recommendation Z.200 |
| ISO/IEC 9496, Geneva 1989 ISBN 92-61-03801-8 |
| |
| |
| Modes (types) |
| no DYNAMIC modes yet |
| discrete modes |
| integer, boolean, character, real |
| multiple integer/real precisions (an extension) |
| set modes, range modes |
| powersets |
| references |
| (no ROW modes) |
| procedure modes |
| instance modes |
| event modes |
| buffer modes |
| (no input/output modes yet) |
| (no timing modes yet) |
| composite modes |
| strings |
| arrays |
| structures |
| VARYING string/array modes |
| (type-checking is not fully rigorous yet) |
| forward references |
| |
| Expressions |
| literals |
| tuples |
| slices, ranges |
| the standard operators |
| |
| Actions (statements) |
| assignments |
| if .. then .. else .. fi |
| cases |
| do action |
| do .. with |
| exits |
| calls |
| results/returns |
| gotos |
| assertions |
| cause exception |
| start/stop/continue process |
| |
| Input/Output |
| (not yet) |
| |
| Exception handling |
| fully compiled, but exceptions aren't |
| generated in all of the required situations |
| |
| Time Supervision |
| (syntax only) |
| |
| Inter-process communications |
| delay/delay case actions |
| send signal/receive case actions |
| send buffer/receive case actions |
| |
| Multi-module programming |
| Seize/grant processing |
| multiple modules per source file |
| |
| |
| Bibliography |
| |
| This list is included as an invitation. We'd appreciate hearing |
| of CHILL-related documents (with ISBN if possible) which aren't |
| described here. We're particularly interested in getting copies |
| of other conference Proceedings. |
| |
| CCITT High Level Language (CHILL) Recommendation Z.200 |
| ISO/IEC 9496, Geneva 1989 ISBN 92-61-03801-8 |
| (The "blue book". The formal language definition; mostly a |
| language-lawyer's document, but more readable than most.) |
| |
| Study Group X - Report R 34 |
| This is the May 1992 revision of Z.200. |
| |
| An Analytic Description of CHILL, the CCITT high-level |
| language, Branquart, Louis & Wodon, Springer-Verlag 1981 |
| ISBN 3-540-11196-4 |
| |
| CHILL User's Manual |
| CCITT, Geneva 1986 ISBN 92-61-02601-X |
| (Most readable, but doesn't cover the whole language). |
| |
| Introduction to CHILL |
| CCITT, Geneva 1983 ISBN 92-61-017771-1 |
| |
| CHILL CCITT High Level Language |
| Proceedings of the 5th CHILL Conference |
| North-Holland, 1991 ISBN 0 444 88904 3 |
| |
| Introduction to the CHILL programming Language |
| TELEBRAS, Campinas, Brazil 1990 |
| |
| CHILL: A Self-Instruction Manual |
| Telecommunication Institute - PITTC |
| Available from KVATRO A/S, N-7005 Trondheim, Norway |
| Phone: +47 7 52 00 90 |
| (Great discussion of novelty.) |
| |
| Some of these documents are available from Global Engineering |
| Documents, in Irvine, CA, USA. +1 714 261 1455. |