Ch (computer programming): Difference between revisions

Content deleted Content added
No edit summary
No edit summary
Tags: Mobile edit Mobile web edit Advanced mobile edit
 
(211 intermediate revisions by more than 100 users not shown)
Line 1:
{{Infobox software
{{context}}'''Ch''' ({{pronEng|ˌsiːˈeɪtʃ}}), is a commercial embeddable [[C (programming language)|C]]/[[C++]] [[Interpreter (computing)|interpreter]]. Ch is designed for using one C compatible language for all programming tasks.
| 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]].
Ch is an extended, embeddable C/C++ interpreter for [[cross-platform]] [[Scripting language|scripting]], shell programming, 2D/3D plotting, numerical computing, and embedded scripting. Ch is the solution for: Embedded Scripting, Enterprise, Academic, Numerical Computing, Web-Based Computing. It can run in [[Microsoft Windows|Windows]], [[Linux]], [[Mac OS X]] and various versions of [[Unix]].
 
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>
 
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>
== 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.
 
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]].
=== 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 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.
=== 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 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>
[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 ==
=== 2D/3D plotting and numerical computing ===
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.
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.
 
C++ features available in CH include:
== Examples ==
=== "Hello, world!" in Ch ===
There are two ways to run Ch code. One is:
 
* [[Member function]]s
<nowiki>#</nowiki>!/bin/ch
* Mixed code and declaration
printf("Hello world!\n");
* The ''[[this (computer programming)|this]]'' -> pointer
* [[Reference type (C++)|Reference type and pass-by-reference]]
* 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:
Another is:
 
* Classes inside member functions
<nowiki>#</nowiki>!/bin/ch
* [[Nested function]]s with classes
#include <stdio.h>
* Passing member function to argument of pointer-to-function type of functions
int main() {
printf("Hello world!\n");
}
 
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>
Note: <nowiki>#</nowiki>!/bin/ch is optional.
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>
 
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]]
[[Category:Programming languages]]