[image of the Head of a GNU]

Cim

Simula Compiler based on the C Programming Language


Introduction

Cim is a compiler for the programming language Simula (except unspecified parameters to formal or virtual procedures (see item %nocomment in See section Implementation dependent characteristics, for how portable code for formal procedures can be written)). It offers a class concept, separate compilation with full type checking, interface to external C routines, an application package for process simulation and a coroutine concept.

Cim is a Simula compiler whose portability is based on the C programming language. The compiler and the run-time system is written in C, and the compiler produces C code, that is passed to a C compiler for further processing towards machine code.

Cim is copyrighted by Sverre Hvammen Johansen <sj@ifi.uio.no>, Stein Krogdahl <steink@ifi.uio.no>, and Terje Mjøs, Department of Informatics, University of Oslo (plus some parts from Free Software Fundation).

Cim is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License (20k characters HTML) as published by the Free Software Foundation; version 2.

The latest released version of Cim is 3.9 which is available from ftp://ftp.ifi.uio.no:/pub/cim/cim-3.9.tar.gz

Mail bug reports for Cim to <cim-bug@ifi.uio.no>. Please include the Cim version number and the system type, which you can get by running cim --version.

Cim uses, GNU Autoconf, GNU Automake, and GNU Libtool, so that cim can be installed by following the generic installation instructions found in the file INSTALL. You also may want to read the instructions in the file README.

A simple example

We show in this chapter a simple example of a SIMULA program and how to compile and run it.

Create a SIMULA program with a text editor, and give it a name with extension `sim'. In this example we name it `doesit.sim':

begin
    Outtext("Simula does it in C");
    Outimage;
end

You can now compile the program with the cim command:

%cim doesit
Compiling: doesit.sim
cc -w -c doesit.c 
cc -o doesit doesit.o /usr/local/lib/libcim.a -lm
%

The compiler will produce C code that is further processed towards machine code with a standard C compiler. All produced files have the same name as the input file, but with different extensions. The compiled and linked program can be invoked by entering:

%./doesit
Simula does it in C
%

Compiling

Cim is a Simula compiler that first compiles the source code into C. The C code will then be compiled with cc, and linked with other modules.

The Cim command will accept one Simula program and other non-Simula modules. The specified Simula program will be compiled and linked with the modules. If a main Simula program is compiled, it will automatic be linked with the necessary Simula modules. If a separate Class or Procedure is compiled, then the linking will be suppressed.

The diagnostics produced by the Simula compiler are intended to be self-explanatory.

Options

The following options are accepted by the cim command:

-a
--atr
Try to produce an `atr'-file even if an error occurs. Compare the produced atr-file with the atr-file produced from previous compilation and if they differ return an error status code. With use of this option it is possible to have external modules with circular dependencies. You will then need to compile all the modules with this option until no error status codes are returned. Then you should do a final compilation with option -p or option -d. To get this to work it is important that the topmost external head does not contain any external declaration that is part of the circular dependency. Such external declarations must be placed in an external head that comes after the first class- or procedure decraration.
-bflags
--cflags=flags
The argument will be passed to the C compiler.
-Bflags
--ldflags=flags
The argument will be passed to the link-command.
-c
--suppress-linking
Suppress linking of the complete program.
-Cname
--c-compiler=name
Set the name of the C compiler.
-d
--compare
Compare the produced c code with the code produced from previous compilation and if they are equal then touch the object-file instead of compiling the c code.
-Dname
--define=name
Define a symbol name.
-e
--static
On systems that support dynamic linking, this prevents linking with the shared libraries. On other systems, this option has no effect.
-E
--preprocess
Run only the preprocessor and output the result to standard output.
-g
--debug
Make the C compiler produce debugging information. This option is useful for debugging the generated code.
-G
--gcc
Invoke the Gnu Project C compiler instead of the standard C compiler. This option is useful if the standard C compiler don't generate correct code.
-Idir
--includedir=dir
Use the Simula include file located in directory dir instead of the standard directory. This information may also be given by setting the environment variable CIMINCLUDEDIR.
-h
--help
Print a summary of the options to `cim', and exit.
-H
--no-lines
Omit line number information in the compiled program. This will make the program smaller and faster.
-llibrary
--library=library
Search for `.atr'-files and link with object library library. This option is passed to the link-command. If a `.atr'-file can not be found as an ordinary file, then the specified libraries are searched and if the file is still not found then the standard cim library is searched. This option may also be used for searching Simula include files.
-Ldir
--library-dir=dir
Add directory dir to the list of directories to be searched for -l. This option is passed to the link-command. The standard system directory is searched first and then the specified directories are searched. The standard system directory may be given by setting the environment variable CIMLIBDIR.
-m
--memory-pool-size
The memory pool size may be set at runtime by an option -mn.
-mn
--memory-pool-size=n
Set the initial memory pool size to n mega bytes.
-Mn
--max-memory-pool-size=n
Set the maximal memory pool size to n mega bytes.
-Nfile
--input=file
Set the name of the Simula source file. This option allows a Simula source file to have a name with an illegal extension or no extension at all.
-ofile
--output=file
The argument file is the name of the output executable file.
-O
-On
--optimize
--optimize=n
Optimize. This option is simply passed to the C compiler.
-p
--pic
If supported for the target machines, generate position-independent code, suitable for use in a shared library.
-P
--only-link
Only link the specified files.
-q
--quiet
--silent
Run the compiler in quiet mode.
-R
--preserve-timestamp
Recompile the module using the same timestamp.
-s
--no-simula-compile
Only C compile and link the specified files.
-S
--only-simula-compile
Compile into C code but do not start the C compiler.
-t
--dont-remove-temporaries
Do not remove temporary files. If a main program is compiled with option -r, then the executable file will be removed unless this option or option -T is specified.
-Uname
--undefine=name
Remove any initial definition of the symbol name (Inverse of the -D option).
-v
--verbose
Run the compiler in verbose mode.
-V
--version
Print the version number of Cim and exit.
-w
--no-warn
Do not print warnings.
-X
--trace
Trace execution for this module.

Arguments

The following arguments are accepted by the Cim command:

`file.a'
Library of object files and attribute files. Include this simula library when compiling and linking. The simula library is created with ar(1V) and ranlib(1).
`file.o'
Object file of other non-Simula modules.
`file'
`file.sim'
Simula source file. A file name without an extension is assumed to be shorthand notation for the corresponding Simula file.

Files

The following files are related to a Cim compilation:

`file'
Executable file.
`file.a'
Library of source files, attribute files and object files. Include this simula library when compiling and linking. The simula library is created with ar(1V) and ranlib(1). All source and .atr files should be placed before .o files in the archive.
`file.o'
Object file.
`file.c'
Simula-compiler output file.
`file.h'
Output file that is included in file.c.
`file.sim'
Simula source file.
`file'
File names without an extension are assumed to be shorthand notation for the corresponding `.sim'-file.
`/usr/local/lib/libcim.a'
Simula library that contains the environment, Run Time System and class Simset and Simulation. The source code to Simset and Simulation is also included, so these parts can be compiled using compiler directive %include.
`/usr/local/include/cim.h'
Include file for the produced C code.

Implementation Aspects

Language restrictions

A formal or virtual procedure must be specified with respect to its type, and type, kind and transmission mode of its parameters (see item %nocomment in See section Implementation dependent characteristics, for how portable code for formal procedures can be written).

Allowed implementation restrictions

Implementation dependent characteristics

Implementation defined characteristics

Capacity limitations

Extension to the environment

The following procedures are added to the Simula environment and may be called directly from Simula:

PROCEDURE Gbc;...;
The garbage collector is called when the dynamic storage exceeds an implementation dependent limit. The garbage collector traverse and moves all the accessible objects, and leaves the free space as one area initialized to zero. The garbage collector may be called explicitly through the procedure Gbc.
INTEGER PROCEDURE Argc;...;
Returns the number of command-line arguments that the program was invoked with.
INTEGER PROCEDURE Argv;...;
Returns a pointer to an array of character strings (in C fashion) that contains the arguments.
PROCEDURE Dump(t);TEXT t;...;
Dump the state of the Simula-program to file. Before a call on Dump all files except sysin, sysout and syserr should be closed.
PROCEDURE UnDump(t);TEXT t;...;
Read a previously stored state from file and start the program in that state. To get these procedures to work, they should be compiled into the same program. The program may not be re-compiled between a call on Dump and UnDump.
REF(PrintFile) PROCEDURE SysErr;...;
Returns the file object associated with standard error.

Return to GNU's home page.

Please send FSF & GNU inquiries & questions to gnu@gnu.org. There are also other ways to contact the FSF.

Please send comments on these web pages to webmasters@www.gnu.org, send other questions to gnu@gnu.org.

Copyright (C) 1998 Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA

Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.

Updated: 11 Dec 1999 jonas