- Ch interpreter
) is a
cross-platform interpreter for the computer programming languages C andC++ . It is useful for scripting, shell programming, 2D/3Dplotting , numerical computing, and can beembedded in other applications to add scripting capability. Ch can be used for bothserver-side andclient-side web development . It runs under Windows,Linux ,Mac OS X and some versions ofUnix . Ch supports C90 and major C99 features, but it doesn't support full C++ features.Features
C/C++ compatible interpreter
Ch supports the 1999 ISO C Standard (C99) and C++ classes. It is superset of C withC++ 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
array s for numerical computing. A 2Dlinear 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! ");Another is:
# !/bin/ch #includeint main() { printf("Hello world! "); } Note:
# !/bin/ch is optional.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# includeint main() { array double A [2] [3] = {1, 2, 3, 4, 5, 6}; array double B [3] [2] ; printf("A= %f ", A+A); B = 2*transpose(A); printf("B= %f ", 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
#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"); } See also
*
CINT External links
* [http://www.softintegration.com SoftIntegration Home Page]
* [http://sourceforge.net/projects/chsqlite SQLite in Ch]
* [http://sourceforge.net/projects/chpcre Perl Compatible Reg. Expressions in Ch]
* [http://sourceforge.net/projects/chscite ChScite]
* [http://sourceforge.net/projects/chmxml Ch Mini-XML]
* [http://sourceforge.net/projects/chgsl GNU Scientific Library in Ch]
* [http://sourceforge.net/projects/chlibxml2 Ch libxml2 package]
* [http://sourceforge.net/projects/chopenal ChOpenAL]
Wikimedia Foundation. 2010.