Re:Starter C compiler - Win95

From: $B8eF#!!@5<#(
Date: Wed Aug 20 1997 - 15:26:00 MEST


Paul,
INET:papresco@technologist.com

 Somebody forwarded me your message. It means I'm supposed to answer.
I may need to explain the basics first.

 ROOT is a C++ based Object Oriented Framework. It provides extensive 
class library as a framework. An unique feature of ROOT is that it 
embeds CINT C++ interpreter as run-time information engine and macro/
command line interpreter. All of the class information are registered 
into the CINT dictionary so that a user can make use of symbol table 
information at run-time. 
 CINT is an independent software package which can adapt to arbitrary 
C/C++ library. It consists of "cint" - the C++ interpreter and "makecint"
interpreter-compiler. Cint is a raw C++ interpreter which only contains
ANSI library function and iostream. Makecint is an utility to embed 
arbitrary C/C++ binary to cint as precompiled library. Precompiled library
can be linked together with the interpreter core as an archived library,
or configured as DLL(Dymanic Link Library) which can be loaded/unloaded
at run-time.


>Does ROOT allow you to avoid pointers and memory management? If so, it
>is as easy as Java, but is incompatible with "regular" C and C++. If
>not, it is still more difficult than Java.

The answer is yes and no.
 If you are a C++ expert, you can easily figure out that avoiding pointers
makes C/C++ almost unusable. I thoroughly think about the possibility but
having good enough compatibility without pointer is impossible.
 So, what I'm doing for CINT (and ROOT) is providing several levels of
security modes. (Note that this is experemental)

  level0 : Behaves the same as regular C/C++, except that array index 
           overflow and divide by 0 are protected.
  level1 : Besides level0
           CINT prohibits pointer alithmetic and cast to a pointer. Only
           a valid pointer value can be assigned to pointer type variable.
           Garbage collection is turned on to avoid memory leak. When 
           an object is deleted, all the reference are reset to NULL which
           avoids invalid pointer access..
  level2 : Besides level1
           CINT prohibits [] operator for pointer type variable.
  level3 : Besides level2
           CINT prohibits casting

As security level goes up, you get tighter limitation and control. You can
trade off security and compatibility. Security level1 provides some kind
of memory management. 


>On the other hand, I admit that an interpreter goes a LONG WAY towards
>making C++ easier. Can it link to binaries libraries? 

 Yes, of course. CINT can embed compiled binary as precompiled library.
Or other program can embed CINT as a command line and macro interpreter.
The simplest explanation about CINT is "It is a C++ version of Tcl". 
Tcl, you need a hand made command interface function.   CINT does it 
automatically from header file.


>One nice thing about Java is that there are hundreds of portable class 
>libraries you can use.
>Paul Prescod

 On behalf of ROOT development team, ROOT provides extensive class library
you can use. So we already have something similar to Java class.

 As an author of CINT C++ interpreter, because it can embed arbitrary
C/C++ library, it can make use of existing class library. ROOT is one
good choice.


 Finaly, I'd like to state that fundamental purpose of making CINT was
quite different from Java. I'm a hardware design engineer. I wanted to
make my work easier especially when working with software people. CINT
is a bridge between software and non-software experts. 


Masaharu Goto



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:26:20 MET