Ch (computer programming): Difference between revisions

Content deleted Content added
mNo edit summary
No edit summary
Tags: Mobile edit Mobile web edit Advanced mobile edit
 
(198 intermediate revisions by 98 users not shown)
Line 1:
{{Infobox software
{{context}}'''Ch''' ({{pronEng|ˌsiːˈeɪtʃ}}) is a [[cross-platform]] [[C (programming language)|C]] and [[C++]] [[Interpreter (computing)|interpreter]]. It is provided by SoftIntegration, Inc for C/C++ users. Ch is useful for [[Scripting language|scripting]], [[shell (computing)|shell]] programming, [[2D geometric model|2D]]/[[Three-dimensional space|3D]] [[plotting]], numerical computing, and can be [[embedded]] in other applications to add scripting capability. Ch can be used for both [[server-side]] and [[client-side]] [[web development]]. It runs under [[Microsoft Windows|Windows]], [[Linux]], [[Mac OS X]] and some versions of [[Unix]]. Ch supports C90 and major C99 features, but it doesn't support full C++ features.
| name = CH C/C++ interpreter
| logo =
| screenshot =
| caption =
| author = Harry H. Cheng
| developer = SoftIntegration, Inc.
| released = {{Start date and age|2001|10|01}}
| latest release version = 8.0.0
| latest release date = {{Start date and age|2017|11|19}}
| status =
| programming language = [[C (programming language)|C]]
| operating system = [[Microsoft Windows|Windows]], [[OS X]], [[Linux]], [[IBM AIX|AIX]], [[HP-UX]], [[Solaris (operating system)|Solaris]] (SPARC and x86), [[QNX]], [[FreeBSD]]
| platform = [[x86]], [[SPARC]]
| size =
| language = English
| genre = [[Integrated development environment]]
| license = [[Proprietary software]]<br/>'''Standard edition:''' [[freeware]]<br />'''Student edition:''' [[freeware]] for students<br />'''Professional edition:''' [[trialware]] for 30 days
| website = {{URL|www.softintegration.com}}
}}
 
'''CH''' {{IPAc-en|ˌ|s|iː|ˈ|eɪ|tʃ}} is a proprietary [[cross-platform]] [[C (programming language)|C]] and [[C++]] [[Interpreter (computing)|interpreter]] and [[scripting language environment]]. It was designed by '''Harry Cheng''' as a scripting language for beginners to learn [[mathematics]], computing, [[numerical analysis]] (numeric methods), and programming in C/C++. Ch is now developed and marketed by '''SoftIntegration, Inc'''.. Free versions include the student edition, and the non-commercial Professional Edition for [[Raspberry Pi]].
== Features ==
=== C/C++ 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.
 
CH can be embedded in C and C++ application programs. It has [[numerical computing]] and graphical plotting features. CH is combined of both '''shell and IDE'''.<ref>{{cite journal |last= Veeraraghavan |first= Sriranga |year= 2013 |title= An introduction to Ch: Implementing a temperature converter in Ch |url= http://www.techworld.com.au/article/452524/an_introduction_ch_implementing_temperature_converter_ch/ |publisher= ComputerWorld}}</ref> CH shell combines the features of common shell and C language.<ref>[http://www.softintegration.com/docs/ch/shell/ Ch Shell]</ref> ChIDE provides quick code navigation and symbolic debugging. It is based on embedded CH, [[SciTE|Scite]], and [[Scintilla (software)|Scintilla]].<ref>[http://www.softintegration.com/docs/ch/chide/ Ch IDE]</ref><ref>{{cite journal |last= Wang |first= Gary |year= 2002 |title= Ch Solves Portability Headaches |journal= IEEE Spectrum |volume= 39 |issue= 6 |pages= 59 |doi= 10.1109/MSPEC.2002.1049264 |s2cid= 32477309 }}</ref>
=== 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.
 
CH is written in C and runs on [[Microsoft Windows|Windows]], [[Linux]], [[macOS]], [[FreeBSD]], [[IBM AIX|AIX]], [[Solaris (operating system)|Solaris]], [[QNX]], and [[HP-UX]]. It supports [[C90 (C version)|C90]] and major [[C99]] features, but it does not support the full set of C++ features. C99 complex number, [[IEEE 754]] floating-point arithmetic, and [[variable-length array]] features were supported in CH before they became part of the C99 standard.<ref>{{cite journal |last= Cheng |first= Harry |year= 1993 |title= Handling of Complex Numbers in the Ch Programming Language |pages= 76–106 |url= http://iospress.metapress.com/content/xml874m51x1w42w0/|journal=Scientific Programming}}</ref><ref>{{cite journal |last= Cheng |first= Harry |year= 1993 |title= Scientific Computing in the Ch Programming Language |pages= 49–75 |url= http://iospress.metapress.com/content/f225771541203807/ |publisher= Scientific Programming}}</ref><ref>{{cite journal |last= Cheng |first= Harry |year= 1995 |title= Extending C and FORTRAN for Design Automation |pages= 390–395 |url= http://scitation.aip.org/getabs/servlet/GetabsServlet?prog=normal&id=JMDEDB000117000003000390000001&idtype=cvips&gifs=yes&ref=no |publisher= ASME Trans., Journal of Mechanical Design}}</ref><ref>{{cite journal |last= Cheng |first= Harry |year= 1995 |title= Extending C with arrays of variable length |pages= 375–406 |doi=10.1016/0920-5489(95)00007-H |journal= Computer Standards & Interfaces |volume= 17 |issue= 4}}{{dead link|date=March 2019|bot=medic}}{{cbignore|bot=medic}}</ref> An article published by ''Computer Reseller News'' ([[CRN Magazine|CRN]]) named CH as notable among C-based virtual machines for its functionality and the availability of third-party libraries.<ref>{{cite journal |last= Morejon |first=Mario |year= 2006 |title= Ch Language Rivals Java Functionality |url= http://www.crn.com/reviews/applications-os/175804126/ch-language-rivals-java-functionality.htm |publisher= CRN}}</ref>
=== 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.
 
CH has many tool kits that extend its functions. For example, the CH Mechanism Toolkit is used for design and analysis of commonly used mechanisms such as [[four-bar linkage]], [[five-bar linkage]], [[six-bar linkage]], crank-slider mechanism, and cam-follower system.<ref>{{cite journal |last= Cheng |first= Harry |year= 2006 |title= Object-Oriented Interactive Mechanism Design and Analysis |journal= Engineering with Computers |volume= 21 |issue= 3 |pages= 237–246 |doi= 10.1007/s00366-005-0008-4 |s2cid= 16996625 }}</ref> CH Control System Toolkit is used for the design, analysis, and modelling of continuous-time or discrete-time linear time-invariant (LTI) control systems.<ref>{{cite journal |last= Zhu |first= Yong |year= 2003 |title= An Object-Based Software Package for Interactive Control System Design and Analysis |journal= Journal of Computing and Information Science in Engineering |volume= 3 |issue= 4 |pages= 366–367 |doi= 10.1115/1.1630815 |s2cid= 17908643 }}</ref> Both tool kits include the [[source code]].
=== 2D/3D plotting and numerical computing ===
Ch has built-in 2D/3D graphical plotting features and computational [[array]]s for
numerical computing. A 2D [[linear equation]] of the form ''b = A*x'' can be written verbatim in Ch.
 
CH has been integrated into [[free C-STEM Studio,]] a platform for learning computing, science, technology, engineering, and mathematics (C-STEM) with robotics. C-STEM Studio is developed by the UC Davis Center for Integrated Computing and STEM Education, offering a curriculum for K-12 students.
== Examples ==
=== "Hello, world!" in Ch ===
CH supports [[Lego Mindstorms NXT|LEGO Mindstorms NXT]] and [[Lego Mindstorms EV3|EV3]], [[Arduino]], Linkbot, Finch Robot, RoboTalk and Raspberry Pi, Pi Zero, and ARM for robot programming and learning.<ref>
There are two ways to run Ch code. One is:
[http://www.newtonium.com/public_html/Products/RoboWorks/chrobotalk.htm ch robot]</ref><ref>
[http://www.finchrobot.com/software/ch ch finch]</ref><ref>[http://www.softintegration.com/company/press/ch_arm_raspberry_pi_released.htm ch raspberry and arm]{{Dead link|date=June 2019 |bot=InternetArchiveBot |fix-attempted=yes }}</ref> It can also be embedded into the [[LabVIEW]] system design platform and development environment.<ref>{{Cite web|url=http://iel.ucdavis.edu/projects/chlabview/|title=Embedding a C/C++ Interpreter Ch into LabVIEW for Scripting}}</ref>
 
== Features ==
<nowiki>#</nowiki>!/bin/ch
CH supports the 1999 ISO C Standard (C99) and C++ classes. It is a superset of C with C++ classes. Several major features of C99 are supported, such as complex numbers, [[Variable-length array|variable length arrays]] (VLAs), IEEE 754 floating-point arithmetic, and generic mathematical functions. The specification for wide characters in Addendum 1 for C90 is also supported.
printf("Hello world!\n");
 
C++ features available in CH include:
Another is:
 
* [[Member function]]s
<nowiki>#</nowiki>!/bin/ch
* Mixed code and declaration
#include <stdio.h>
* The ''[[this (computer programming)|this]]'' -> pointer
int main() {
* [[Reference type (C++)|Reference type and pass-by-reference]]
printf("Hello world!\n");
* Function-style type conversion
}
* [[Classes in C++|Classes]]
* Private/public data and functions in classes. Ch is compatible with C++ in 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 function]]s
* The [[scope resolution operator]]
* The I/O functions cout, cerr, and cin with endl
* Arguments for [[variadic function]]s are optional
 
CH supports classes in C++ with added abilities, including:
Note: <nowiki>#</nowiki>!/bin/ch is optional.
 
* Classes inside member functions
Ch also supports interactive shell command and C statements.
* [[Nested function]]s with classes
* Passing member function to argument of pointer-to-function type of functions
 
CH can interact with existing C/C++ libraries and call C/C++ functions from CH script.<ref>{{cite magazine |last= Wilson |first= Matthew |year= 2004 |title= Open-RJ and Ch |url= http://drdobbs.com/184401877?queryText=ChSDK |magazine= Dr. Dobb's Journal}}</ref>
> int i, *p, **p2 // i is an integer, p pointer, p2 double pointer
As a C/C++ interpreter, CH can be used as a scripting engine and extension language for applications. Pointers to arrays or variables can be passed and shared in both C-compiled and CH scripting contexts. One example of an embedded CH scripting application is Mobile-C, which has been used for collaborative visualization of distributed mesh model.<ref>{{cite magazine |last= Cheng |first= Harry |year= 2009 |title= Speeding-Up Software Development Using Embedded Scripting |pages= 8 |url= http://drdobbs.com/architecture-and-design/212201774 |magazine= Dr. Dobb's Journal}}</ref><ref>{{cite book |last1=Wang |first1=Li-rong |title=2009 IEEE 10th International Conference on Computer-Aided Industrial Design & Conceptual Design |pages=1127–1132 |last2= Bo |first2= Yo|last3=Hagiwara |first3= I |publisher= Computer-Aided Industrial Design & Conceptual Design, 2009. CAID & CD 2009. IEEE 10th International Conference|doi=10.1109/CAIDCD.2009.5375178 |year=2009 |isbn=978-1-4244-5266-8 |s2cid=39307433 }}</ref><ref>{{cite book |last1=Wang |first1=Li-rong |last2= Bo |first2= Yo|last3=Hagiwara |first3= Ichiro |title= An agent based collaborative simplification of 3D mesh model |pages=325–328 |url= http://dl.acm.org/citation.cfm?id=1813032 |year=2009 |publisher= CDVE'09 Proceedings of the 6th international conference on cooperative design, visualization, and engineering|isbn=9783642042645 |series=Cdve'09 }}</ref>
> 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
>
 
CH has a built-in [[string type]] (string_t) for automatic memory allocation and de-allocation. It supports shell aliases, history, and piping.<ref>{{cite journal |last= Campbell |first= Matt |year= 2003 |title= Ch, A C/C++ Interpreter – New possibilities for people who like C and Unix |url= http://www.mactech.com/articles/mactech/Vol.19/19.09/CInterpreter/index.html |publisher= MACTECH, the journal of Apple technology}}</ref><ref>{{cite book|last=Cheng|first=Harry|title=The Ch Language Environment|edition=6.3|year=2010|publisher= SoftIntegration, Inc.|___location=Davis, CA}}</ref>
=== Numerical computing in Ch ===
 
CH has built-in 2D/3D graphical plotting features and computational [[array data type|arrays]] for numerical computing. A 2D [[linear equation]] of the form ''b = A*x'' can be written verbatim in Ch.<ref>{{cite journal |last= Glassborow |first= Francis |year= 2001 |title= The Ch Language Environment Version 2.0 |url= http://www.softintegration.com/company/pub/accu.html |pages= 36–37 |publisher= C Vu Magazine}}</ref>
<nowiki>#</nowiki>include <stdio.h>
<nowiki>#</nowiki>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);
}
 
== See also ==
The output is:
* [[CINT]]
* [[Pike (programming language)]]
 
== References ==
A=
{{Reflist}}
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
 
=== ShellFurther programmingreading ===
* {{cite journal |last=Heller |first=Martin |year=2001 |title=The Ch Language Environment |url=http://www.byte.com/documents/s=1776/byt20011031s0002/1105_heller.html |publisher=[[Byte (magazine)|Byte]] |url-status=dead |archive-url=https://web.archive.org/web/20011116220556/http://www.byte.com/documents/s%3D1776/byt20011031s0002/1105_heller.html |archive-date=November 16, 2001 }}
Find and compile all .c files into .o in the current directory for which the .o file is old or absent:
*{{cite magazine |last= Cheng |first= Harry |year= 2002 |title= C99 & Numeric Computing |pages= 28–34 |url= http://drdobbs.com/cpp/184404993 |magazine= Dr. Dobb's Journal}}
 
* {{cite magazine |last= Cheng |first= Harry |year= 2006 |title= Ch: A C/C++ Interpreter for Script Computing |pages= 6–12 |url= http://drdobbs.com/184402054 |magazine= Dr. Dobb's Journal}}
#!/bin/ch
* {{cite book |last= Cheng |first= Harry |year= 2009 |title= C For Engineers & Scientists, An Interpretive Approach |url= http://highered.mcgraw-hill.com/sites/0073376051/ |publisher= McGraw-Hill|isbn= 978-0-07-729046-7}}
#include &lt;sys/stat.h&gt;
* {{cite book |last= Cheng |first= Harry |year= 2011 |title= C For Engineers & Scientists |url= https://www.amazon.cn/C%E8%AF%AD%E8%A8%80%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E6%95%99%E7%A8%8B-%E7%A8%8B%E8%BE%89/dp/B005JR8IW6/ref=sr_1_1?s=books&ie=UTF8&qid=1325463722&sr=1-1 |publisher= Higher Education Press|isbn= 978-0-07-729046-7|edition= Chinese }}
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 <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 ==
 
* [[CINT]]
 
== External links ==
* [http://{{Official website|www.softintegration.com}}, SoftIntegration Home Page]
* [http://www.mobilec.org/ Mobile-C: a Multi-Agent Platform for Mobile C/C++ Agents Home Page]
* [http://sourceforge.net/projects/chsqlite SQLite in Ch]
* [http://c-stem.ucdavis.edu/studio/ C-STEM Studio]
* [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]
 
{{DEFAULTSORT:Ch Interpreter}}
[[Category:C programming language family]]
[[Category:Educational programming languages]]
[[Category:Interpreters (computing)]]
[[Category:CurlyPedagogic bracketintegrated programmingdevelopment languagesenvironments]]