Ch (computer programming)

This is an old revision of this page, as edited by Tpschmit (talk | contribs) at 01:28, 31 December 2007. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Ch (Template:PronEng) is a cross-platform C/C++ interpreter. It is useful for scripting, Unix 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");
   }

See also