102 lines
No EOL
4.4 KiB
Text
102 lines
No EOL
4.4 KiB
Text
|
|
{{language
|
|
|exec=machine
|
|
|gc=no
|
|
|safety=unsafe
|
|
|parampass=value
|
|
|checking=static
|
|
|strength=weak
|
|
|tags=c
|
|
}}{{language programming paradigm|Imperative}}
|
|
|
|
'''EVALDRAW''' is a quirky little programming tool that can be used to make small applications and games, or even do 1D, 2D or 3D graphs, or create custom musical instruments.
|
|
Evaldraw is technically a tool and not the language, however, since RSCRIPT and Evaldraw are tied together, we can consider Evaldraw a programming language in itself. From this point, this article will refer to the capabilities of RSCRIPT and Evaldraw together.
|
|
|
|
==Compiler modes==
|
|
|
|
* '''EVAL''' the initially bundled compiler, developed by Ken Silverman. Had only doubles and arrays of doubles.
|
|
* '''RSCRIPT''' added in 2010 and created by Robert Rodgers. Added support for structs, making entities to handle. Easier to translate to C.
|
|
|
|
==Overview==
|
|
|
|
Evaldraw has syntax similar to C.
|
|
|
|
===Curly Braces===
|
|
|
|
EVALDRAW supports grouping multiple statements in curly braces. They are not needed for single statements.
|
|
|
|
===Semicolons===
|
|
|
|
All statements, except for the last statement in a function must end with a semicolon;
|
|
|
|
===Functions===
|
|
|
|
Functions all return an implicit double value from the last statement in the function.
|
|
Parameters passed to functions can be doubles, arrays or structs.
|
|
|
|
===Statements===
|
|
|
|
The following statements are supported:
|
|
* IF and IF-ELSE (but no SWITCH-case)
|
|
* Loop constructs such as DO{ codeblock }WHILE(condition); WHILE(cond){ block } and the FOR-loop as in C.
|
|
* goto label and label: declaration similar to C.
|
|
* a RETURN statement can at any point in a function return a floating point number. The last value is implicitly returned.
|
|
* BREAK and CONTINUE statements. Loops can be exited with BREAK, or remainder of code body can be skipped with CONTINUE.
|
|
* ENUMs allow the programmer to give numerical constants names. Dependencies between enum values are possible, allowing the programmer to make one enum a calculation based on previous enum values.
|
|
* Variables can be declared automatically on the local stack, or using the STATIC modifier to make a variable global.
|
|
|
|
===Case insensitive===
|
|
All names and keywords are case insensitive. This can create some confusion when porting from- or to C.
|
|
|
|
===All you need is 64-bit float===
|
|
|
|
All variables, also those declared in structs are double. If no type is supplied, double is assumed.
|
|
All functions return a double.
|
|
|
|
===Arrays===
|
|
Arrays that are power of two are wrapped, non power-of-two arrays set index zero if accessed out of bounds.
|
|
For example, if we define static xcoords[4]; and try to access xcoords[5] we the returned value is at index 5%4 which is xcoords[1].
|
|
|
|
===Structs===
|
|
Structs can be declared and be passed as function parameters.
|
|
A struct may doubles, arrays of doubles and other structs.
|
|
|
|
For example struct vec{x,y,z;}; defines a struct with 3 fields.
|
|
struct boid_t{ vec pos; vec dir; } defines a struct that contains substructs pos and dir.
|
|
|
|
===Pass by value or pass by ref===
|
|
Doubles are passed by value, but can be passed by ref by prefixing a & symbol.
|
|
All other variables, arrays and structs are passed by ref.
|
|
|
|
===Builtins===
|
|
There are many built in functions.
|
|
The EVAL and RSCRIPT compiler modes support the following 1-param functions:
|
|
* ABS - gives the absolute value. Same as fabs in C.
|
|
* ACOS - arcos in radians
|
|
* ASIN - arsin in radians
|
|
* ATAN - arctan in radians
|
|
* ATN - alias for atan
|
|
* CEIL - round a value up to nearest integer.
|
|
* COS - cosine in radians
|
|
* EXP - raise Eulers number to some power. EXP(1) = 2.718281
|
|
* FABS - alias for ABS
|
|
* FACT - factorial. FACT(5) = 5!
|
|
* FLOOR - round a value down to nearest integer.
|
|
* INT - different from floor, truncates (removes decimals).
|
|
* LOG - returns the natural logarithm of x. LOG(x) = ln(x)
|
|
* SGN - returns the sign of a number. -1, 0 or +1
|
|
* SIN - sine in radians
|
|
* SQRT - square root
|
|
* TAN - tan in radians
|
|
* UNIT - returns the unit function of x. Returns 0.0 for x<0, 0.5 for x==0 and 1.0 for x>0.
|
|
|
|
And the following two param functions:
|
|
* ATAN2(x,y) - gives angle in radians from positive x-axis to some point x,y.
|
|
* FADD - eval and rscript compatibility.
|
|
* FMOD - alternative to modulus % operator.
|
|
* LOG(x,b) - return log of x with base b.
|
|
* MIN(a,b) - return smallest
|
|
* MAX(a,b) - return largest
|
|
* POW(a,b) - raise a to power b
|
|
|
|
There is no concept of include statements or libraries. It is assumed evaldraw programs are small scripts to try out ideas that later will be integrated into a professional programming language such as C. |