blob: 44301edff92658efa8134d262979b2a5ba3948c2 [file] [log] [blame]
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.