User:Garykline/Ch interpreter


 * This is a copy of the deleted page Ch interpreter, see that page's deleted history for attribution.

Ch is a cross-platform C and C++ interpreter.

Ch was originally designed by Dr. Harry H. Cheng as a scripting language for beginners to learn math, computing, numerics and programming in C/C++.

It is now provided by SoftIntegration, Inc. Ch is written in C and runs under Windows, Linux, Mac OS X and some versions of Unix. It supports C90 and major C99 features, but it does not support the full set of C++ features. C99 complex and VLA features are supported in Ch before they become C99 standard. Ch can also be run as a interactive shell to execute C statement, C script file, unix commands and Windows commands(under windows only).

C/C++ interpreter
Ch supports the 1999 ISO C Standard (C99) and C++ classes. It is a superset of C with C++ classes. C99 major features such as complex numbers, variable length arrays (VLAs), IEEE-754 floating-point arithmetic and generic mathematical functions are supported. Wide characters in Addendum 1 for C90 is also supported.

The following C++ features are available in Ch:


 * Member function
 * Mixed code and declaration
 * The this-> pointer
 * Reference type and pass-by-reference
 * Function-style type conversion
 * Class
 * private/public data and functions in class. Ch is compatible with C++ that by default, members of a class definition are assumed to be private until a 'public' declaration is given
 * Static member of class/struct/union
 * Const member functions
 * The new and delete operators
 * Constructors and destructors
 * Polymorphic functions
 * The scope resolution operator ::
 * The I/O cout, cerr, cin with endl
 * Arguments for variadic functions are optional

Ch supports classes in C++ with the following additional capabilities:
 * Classes inside member functions
 * Nested functions with classes
 * Pass member function to argument of pointer-to-function type of functions

Embeddable scripting
As a C/C++ interpreter, Ch can be used as a scripting engine for your applications. The pointer to array or variables can be passed and shared in both binary C space and ch scripting space. It extends your applications with a C compatible scripting language.

Shell programming and cross-platform scripting
Ch is a C-compatible shell similar to C-shell (csh). It can be used as login shell. Ch has a built-in string type for automatic memory allocation and de-allocation. It supports shell alias, history, filename wildcarding, piping and iteration etc.

2D/3D plotting and numerical computing
Ch has built-in 2D/3D graphical plotting features and computational arrays for numerical computing. A 2D linear equation of the form b = A*x can be written verbatim in Ch.

"Hello, world!" in Ch
There are two ways to run Ch code. One is:

printf("Hello world!\n");

Another is:

#include    int main { printf("Hello world!\n"); }

Ch also supports interactive shell command and C statements.

> int i, *p, **p2    // i is an integer, p pointer, p2 double pointer > i=10               // i is assigned value 10 10 > p=&i                // p points to address of i    00D847C0 > *p                 // the memory pointed by p has value 10 10 > p2=&p               // p2 points to address of p    00D84D30 > **p2               // the memory pointed by the pointer at p2 has value 10 10 >

Numerical computing in Ch
# include    # include     int main { array double A[2][3] = {1, 2, 3, 4, 5, 6};       array double B[3][2]; printf("A= \n%f \n", A+A); B = 2*transpose(A); printf("B= \n%f \n", B); }

The output is:

A=   2.000000 4.000000 6.000000 8.000000 10.000000 12.000000   B=    2.000000 8.000000 4.000000 10.000000   6.000000 12.000000

Shell programming
Find and compile all .c files into .o in the current directory for which the .o file is old or absent:

#!/bin/ch #include &lt;sys/stat.h&gt; struct stat cstat, ostat; string_t c, o;   foreach (c; `find . -name "*.c"`) {       o=`echo $c | sed 's/.c$/.o/'`; stat(o, &amp;ostat); stat(c, &amp;cstat); if (ostat.st_mtime &gt; cstat.st_mtime) {           echo "compiling $c to $o"; gcc -c -o "$o" "$c"; }   }

2D/3D plotting in Ch
To plot a sine wave:

#include   #include    int main { int numpoints = 36; array double x[numpoints], y[numpoints]; linspace(x, 0, 360); // assign x with values from 0 to 360 linearly y = sin(x*M_PI/180); plotxy(x, y, "Ch plot", "xlabel", "ylabel"); }