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.