This article provides insufficient context for those unfamiliar with the subject. |
Ch (Template:PronEng) is a cross-platform C/C++ interpreter. It is useful for scripting, shell programming, 2D/3D plotting, numerical computing, and can be embedded in other applications to add scripting capability. Ch can be used for both server and client side web programming. It runs under Windows, Linux, Mac OS X and various versions of Unix.
Features
C/C++ compatible interpreter
Ch supports the 1999 ISO C Standard (C99) and C++ classes. It is 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.
Embeddable scripting
As a C/C++ interpreter, Ch can be used as a scripting engine for your applications. 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.
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.
Examples
"Hello, world!" in Ch
There are two ways to run Ch code. One is:
#!/bin/ch printf("Hello world!\n");
Another is:
#!/bin/ch #include <stdio.h> int main() { printf("Hello world!\n"); }
Note: #!/bin/ch is optional.
Numerical computing in Ch
#include <stdio.h> #include <array.h> 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 <sys/stat.h> struct stat cstat, ostat; string_t c, o; foreach (c; `find . -name "*.c"`) { o=`echo $c | sed 's/.c$/.o/'`; stat(o, &ostat); stat(c, &cstat); if (ostat.st_mtime > cstat.st_mtime) { echo "compiling $c to $o"; gcc -c -o "$o" "$c"; } }
2D/3D plotting in Ch
To plot a sine wave:
#include <math.h> #include <chplot.h> 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"); }