Euphoria Release Notes
Version 2.2 Official Release for Linux November 22, 1999:
- All platforms: bug fix:
If a Euphoria routine called itself recursively from inside a
for-loop, and at one level of recursion the for-loop counted up
to an upper limit, and at another level of recursion the for-loop
counted down to a
lower limit, the for-loop would probably malfunction at one of the levels.
Thanks to Delroy Gayle.
- The documentation was improved in many places, especially with respect
to the Linux platform.
Version 2.2 beta-test release for Linux October 22, 1999:
Most of these features and bug fixes will also be made available
in Version 2.2 for WIN32 + DOS32.
-
platform() has been moved from misc.e into exu to eliminate
the function call overhead. platform() now takes zero time to compute.
The compiler simply plugs in the appropriate constant value.
-
lock_file()
and unlock_file() have been added
to allow multiple processes
to share access to files. This can be important in CGI programming and
other areas.
-
flush() will force the contents of the memory buffer out to a file or device.
-
chdir() will change to a new current directory and let you know if it
was successful.
-
sleep() will suspend execution of your program for a number of seconds,
and let the operating system schedule another process.
-
put_screen_char() will write a character and its attributes (colors etc.)
to the screen.
-
get_screen_char() will read a character and its attributes from the screen.
-
save_text_image() now works on Linux (as well as DOS32). It copies
a rectangular text image from the screen.
-
display_text_image() now works under Linux (as well as DOS32).
It writes a rectangular text image to the screen.
-
The "short-circuit" warning now gives the filename and line number of the
possibly short-circuited call. Minor clarifications were made in some
other error messages as well.
-
Minor improvements were made to ed and search.
-
A portability problem in how2reg.ex was fixed.
-
exu is compressed better. It's actually a bit smaller now,
although functionality has been added to it.
Version 2.2 alpha-test release for Linux August 24, 1999:
Many of these features and bug fixes will also be made available
in Version 2.2 for WIN32 + DOS32.
-
The documentation has been brought up-to-date to include
Linux-specific information for library
routines and Euphoria in general.
-
There is now a Complete Edition for
Linux, including
binding and
shrouding. See
register\register.doc.
-
There is now text mode mouse support using
get_mouse(). You must have GPM
server running. It works in a text console or an xterm window.
-
Linux and WIN32:
define_c_var(name) will return the
address of a global C variable in a shared library.
-
It was confirmed that you can call Euphoria routines from
Linux C routines using exactly the same
mechanism as in WIN32 Euphoria.
See euphoria/demo/linux.
-
An example of creating your own shared library routines and calling them from
Euphoria was added. See
euphoria/demo/linux.
-
All platforms: crash_file(file_name) will
cause diagnostic messages to be written to file_name instead of
ex.err. You can use
crash_file("/dev/null") to get
diagnostics on screen but not in a file.
crash_file("") means
"no diagnostics" (to screen or ex.err).
-
Trace mode in xterm now detects
the F1/F2 keys.
-
time() now reports real "wall-clock" time,
not CPU time.
-
search,
guru and
cdguru now place their output in your
$HOME directory instead of the current directory.
-
#! is now restricted to just the first line of a file.
-
All platforms: In ed, the
Esc n, Esc d, Esc f and Esc r commands will
immediately redisplay your last choice. You can press
up-arrow/down-arrow to
see other choices, or clear the choice. If you start typing without
editing, it will clear the choice and take your new input.
-
free_console() will set the terminal
parameters back to normal. Normally, when running a Euphoria program the
parameters are set the way that curses wants them and they are set
back to normal when the program terminates.
If your program needs to terminate
in a strange way (other than calling abort()),
free_console() should be called first.
-
bug fix: get()
now considers '\r' to be a whitespace character. This is important when
reading DOS files.
-
All platforms: bug fix: It was not
immediately issuing a type_check
failure when 1 was added to an integer variable that was set to the maximum
value for an integer (1.07 billion). Thanks to Jeff Fielding.
-
All platforms: bug fix: It was not
always detecting an improperly-formed
exponent on a floating-point number. Thanks to Lionel Wong.
-
All platforms: The performance of the storage allocator has been
improved in certain cases. A bug that could cause the interpreter to
crash when you are almost out of memory has been fixed.
Version 2.2 pre-alpha #4 for Linux July 15, 1999:
-
You can call C routines in Linux
shared libraries (.so files). See
euphoria/demo/linux/callc.exu for
some examples.
-
If your program does not output anything to the xterm window,
exu will not issue the "Press Enter"
prompt.
-
All platforms: ed now lets you recall
previous top-line command text using up-arrow and down-arrow,
similar to doskey in DOS and the shell history in Linux. This works with
any strings that you type for Esc n (new file),
Esc d (Linux command), Esc f (find string) or
Esc r (replace string). In addition, you can now use
arrow keys, Home, End, Delete etc. to edit
strings before you press Enter.
Version 2.2 pre-alpha #3 for Linux July 8, 1999:
-
In an xterm window, exu will
prompt you to hit Enter before it exits. Without this, xterm
restores the screen so fast that you don't see any output or error messages.
-
An internal coding change was made to Euphoria's
rand() function.
(The algorithm has not changed.)
Hopefully this will
allow rand() to work on all distributions of
Linux. Please let us know if
rand() still fails.
-
ed: The Esc h command will
display the Euphoria help files. This was broken in pre-alpha#2.
-
In an xterm window, Euphoria's
video_config() now reports the correct
number of lines and columns - this helps
ed to work much better.
ed will work with the initial size of
window in effect when ed starts up.
-
ed: F1, F2, F3,
F4, Home, End, and the Delete key work now in
xterm (under Red Hat 5.2 at least). The other F-keys were already
working. PageUp/PageDown and some other keys still don't work - feel
free to add your own alternate keys.
-
exu is now even smaller - just 82K.
Version 2.2 pre-alpha #2 for Linux July 6, 1999:
-
The ncurses library has been statically linked into
exu.
-
exu is now a compressed executable (97K).
-
bug fix: ed
can now edit files with upper case letters in the name.
-
The fraction of a second delay when you press the Esc key in
ed has been removed.
-
The correct address for subscribing to the Euphoria mailing list is in
web.doc and
web.htm (the old address doesn't work
anymore).
Version 2.2 pre-alpha #1 for Linux July 1, 1999:
- The first version of Euphoria for
Linux was released.
Version 2.1 Official Release for WIN32 + DOS32 March 29, 1999:
-
Updates to the trace screen have been
optimized. Unnecessary refreshes of the source code, and the variables on
the trace screen, have been eliminated. When a refresh is necessary, it is
now slightly faster. This makes a noticeable difference in
exw.exe, and also in
ex.exe in
pixel-graphics modes. For
ex.exe in
text modes, it reduces screen flicker
slightly.
-
The install program no longer requires
that your PATH be less than 128 characters. It will simply warn you if it
isn't. Newer versions of DOS allow for a longer PATH. Thanks to Steve Adams.
-
An extra error check was added to
unregister_block() in
safe.e. Thanks to David Guy.
Version 2.1 beta-test release March 5, 1999:
-
The rest of the files in the euphoria\doc
directory have now been converted to HTML. Every .doc file in the
doc directory now has a corresponding
.htm file in the euphoria\html
directory. Many improvements and clarifications were made to the
documentation.
-
You will now be warned when you have code that comes immediately
after an exit,
return or
abort() statement. This code can never
be executed. Suggested by Gabriel Boehme.
-
safe.e no longer includes
graphics.e. This eliminates possible
naming conflicts when safe.e is
substituted for machine.e.
-
Using code supplied by David Guy, safe.e
will now let you add or remove externally-allocated blocks of memory on
the "safe address list". See the new library
routines:
register_block() and
unregister_block().
-
message_box() now uses the handle of
the active window rather than NULL. This forces the user to reply to
your message before he can continue to interact with your program.
He won't be prevented from interacting with other programs. Thanks to
Austin C.
-
get() and
value() have been sped up by a
further 5% thanks to Gabriel Boehme.
-
exw.exe has been made less likely
to crash mysteriously when attacked by a virus.
-
sanity.ex now checks your installation
of Euphoria. You'll be warned if your PATH or EUDIR variables are not set,
or your ex.exe,
exw.exe,
pdex.exe, or
pdexw.exe files have been corrupted
or not installed correctly in
euphoria\bin.
-
The security of bound and
scrambled programs has been tightened
some more. Thanks to Rusty Davis.
-
To save space in euphor21.zip, the
install program now generates the
HTML and DOC files from a common source, using Junko Miura's
documentation generator. In the process,
the generator is deleted, but you can download it from the RDS site.
-
When a type_check failure occurs
you'll be warned if the type erroneously returned a sequence for it's
"true/false" result. Previously, a sequence result was simply reported
as a type_check failure. Suggested by Ralf Nieuwenhuijsen.
-
The code for demo\win32\winwire.exw was
cleaned up considerably.
-
The install program will warn you to
change your autoexec.bat file when you install a new
release of Euphoria onto a different drive.
Version 2.1 alpha-test release January 15, 1999:
-
We've made a number of changes to the packaging, pricing, and registration
incentives for the Euphoria product:
-
The Dual-Platform (DOS32+WIN32) package, formerly $53 has been reduced
to $39 U.S., effective immediately.
-
The Single-Platform (DOS32-only) package, formerly $32, has been
discontinued.
-
The printed manual has been discontinued. Instead, there is now an
official HTML version of the manual, included with the Public Domain
.zip file.
-
All useful 3rd-party include files, such as Win32Lib.ew and many
others, will be "stamped" by RDS with a code number that makes them
free, just like the files in
euphoria\include. They will not
add to your statement count, provided you do not significantly modify
them. This will also allow 3rd-party developers to get better diagnostic
information from their users.
-
Binding,
shrouding and
profiling will now be part of the
Complete Edition only. These are features that beginners do not require,
but serious users might find valuable.
-
Short-form assignment operators +=
-= *= /= &= have been added.
For example, instead of saying:
count = count + 1
You can now say:
count += 1
Instead of saying:
matrix[row][column] = matrix[row][column] * 5.0
You can say:
matrix[row][column] *= 5.0
Instead of saying:
test_scores[start..finish] = test_scores[start..finish] / 100
You can say:
test_scores[start..finish] /= 100
See
refman.doc for the details.
-
Euphoria now uses "short-circuit" evaluation of
and and
or expressions in
if/elsif/while conditions.
e.g. in an and condition:
if A and B then ...
the interpreter will skip the evaluation of expression B whenever
expression A is 0 (false), since it knows that the overall result
must be false. In an or condition:
while A or B do ...
the interpreter will skip the evaluation of expression B whenever
expression A is non-zero (true), since it knows that the overall result
must be true.
Euphoria code written prior to version 2.1 may no longer work correctly if
expression B contains a function with side-effects such as
setting a global variable, doing I/O etc. In practice this kind of code is
very rare, but just in case, a warning will now be issued if a function
with side-effects might be short-circuited.
By skipping the evaluation of B, short-circuit evaluation is typically
faster, and will allow you to write statements such as:
if atom(x) or length(x)=1 then ...
that would generate an error on older versions of Euphoria whenever x
was an atom, since
length() is not defined for atoms.
See
refman.doc for the details.
-
Several new routines were added.
Built-in to ex.exe/exw.exe:
|
|
|
|
| profile() |
- |
turns profiling
on/off so you can focus your
profile and
profile_time runs on particular
events within your program. |
| system_exec() |
- |
gives you the exit code from calling a .exe or
.com file, or another Euphoria program. |
| equal() |
- |
compares any 2 Euphoria objects for equality.
equivalent to: compare(a,b) = 0 but
more readable. |
Added to various include files:
|
|
|
|
| walk_dir() |
- |
recursively goes through a directory and subdirectories,
calling a routine that you supply. |
| reverse() |
- |
returns a sequence in reverse order. |
| sprint() |
- |
returns the string representation of any Euphoria object. |
| arcsin() |
- |
inverse trig function. |
| arccos() |
- |
inverse trig function. |
| get_bytes() |
- |
returns the next n bytes from a file. |
| prompt_number() |
- |
prompts the user to enter a number. |
| prompt_string() |
- |
prompts the user to enter a string. |
| instance() |
- |
WIN32: returns the
instance handle of the program. |
| PI |
- |
the constant PI - 3.14159... was added to
misc.e. |
See library.doc
for the details.
-
The main Euphoria documentation can now be viewed locally with a Web
browser. The plain-text files refman.doc
and library.doc are still
available in the doc subdirectory,
but we now have refman.htm and
library.htm in the new
html subdirectory. We have developed
a tool (written in Euphoria) that lets us easily maintain both an
up-to-date HTML version, and an up-to-date plain-text version of
refman and
library.
The documentation has also been clarified and expanded in many places.
-
WIN32: you can create an
unlimited number of Euphoria
call-back routines,
as long as each routine is a function with 0 to 8 parameters.
See
platform.doc. In version 2.0 you could only have one
call-back routine and it had to have exactly 4 parameters.
-
The xor keyword has been added to
complement: and/or/not and
xor_bits() e.g.
if a xor b then...
xor works on sequences too.
It's similar to or.
-
The dir(path) library routine now
officially supports the use of wildcards * and ? in the path
that you supply. This feature was always available, but wasn't
documented until now. e.g.
info = dir("mydata\\*.d?t")
-
optimization:
Subroutine call+return overhead was reduced by an average of
30%. The speed-up occurs for all normal function/procedure/type calls,
user-defined type-checks,
call_proc()/call_func() calls using a
routine id,
and Windows call-backs. Only recursive calls cost the same as before.
Programs with a reasonably-high frequency of calls can easily be 10% faster
overall because of this.
-
optimization:
Branch straightening has been
implemented. The compiler will optimize branches in the internal code
such that a branch from A->B where location B contains a branch to
location C, will be optimized to a direct branch from A->C. Even something
like A->B->C->D can be straightened to A->D. This often occurs in
while-loops that contain if-statements.
-
optimization:
In many cases, variable initialization checks are
now replaced by "no-ops" after the first check is performed. Euphoria
was already optimizing out many checks at compile-time.
-
optimization:
get() and
value() are now much faster in most
cases thanks to Jiri Babor and some further optimizations by RDS.
The new v2.1 ex.exe with the new
v2.1 get.e is:
1.45x faster reading a sequence of f.p. numbers from a file and
2.25x faster when reading a sequence of integers from a file.
-
optimization:
power(x,2) is converted internally
to x*x which is faster in all cases, especially when x is a large
integer or a f.p. number.
-
optimization: Thanks to Jiri Babor,
int_to_bits() is at least 15% faster
in most cases.
-
optimization:
Plotting a long sequence of pixels in 16-color graphics modes
is about 3% faster.
-
optimization:
draw_line() has been sped up by a
few percent.
-
Language War has had a major
face-lift. It now runs in pixel-graphics
mode 18 (640 x 480 x 16 colors) instead of
text mode. It also has
fine-grain parallelism,
i.e. virtually anything can happen in parallel
with anything else. Multiple torpedos, phasors etc can be drawn on the
screen simultaneously, while ships are moving, commands are being entered,
things are exploding etc. Even the timing needed for the PC speaker sound
effects is handled by the task scheduler. There are
no time-delay "busy"
loops executed during the game. The galaxy scan now shows you a scaled
picture of the whole galaxy, rather than just a bunch of numbers.
-
The default print format for atoms was changed from "%g" to "%.10g".
This format is used by print(),
?,
the trace facility, and
ex.err dumps. This allows large
integers -9,999,999,999 to +9,999,999,999
to be printed as integers, rather than as scientific notation. It also
provides about 10 digits of accuracy to be displayed on fractional numbers,
rather than just 6. Art Adamson and others made it clear that more
digits should be displayed.
-
The state of all with/without settings
is saved upon entering an included file, and restored at the end
of the included file. An included file can change the settings,
but they will be restored at the end of the included file. e.g. warnings
might be turned off just within the included file (and any files it
includes). As a result some
programs now display warnings where none were seen before.
-
Warnings are now displayed
after your program finishes
execution, so they won't be erased by
clear_screen(),
graphics_mode() etc.
Some programs now show warnings where none were seen before.
-
The security of scrambled code and bound code has been improved thanks to
ideas contributed by Rusty Davis. When a bound program starts executing,
a quick integrity check will be made to detect any corruption or tampering.
It's still ok to add data to the end of a
bound .exe file, as long as
your last line is abort(x).
-
The ed editor now lets you view and
edit beyond column 80.
-
ed has a new command: Esc m
(modifications). It will show the differences between the original file on
disk and the current edit buffer. This can be very useful when you've
forgotten what changes you've made, and you are wondering if it's safe to
save them.
-
The trace window now provides an upper
case Q command which lets the program run to completion, ignoring
any trace(1) commands. Lower case
q lets it run to the next trace(1).
-
safe.e (debug version of
machine.e) has been enhanced. It will now
automatically catch additional cases where data is illegally written just
before, or just after, the boundaries of an
allocated block of memory. This can be particularly useful in
WIN32 where Windows might overwrite
one of your under-sized blocks. Without a tool such as
safe.e, this type
of bug could take hours or even days to track down.
-
The euphoria\tutorial directory
was created to hold several small tutorial programs.
-
The limit on the number of open files was raised to 25 from 15.
Three of these files are 0,1,2: standard-input, standard-output
and standard-error, so you can now have up to 22 of your own files
open simultaneously. (As far as we know, no one ever exceeded the old
limit, but it seemed wise to raise it.)
-
When the user simply types ex or
exw and is prompted for the
name of the Euphoria .ex or .exw file to run,
command_line() will now
be updated to include the filename as the second command-line argument,
just as if the user had originally typed: ex filename.
Thanks to Mathew Hounsell for suggesting this.
-
mset.ex now saves pictures in .bmp
format. Previously it was using a non-standard, compressed format.
-
lines.ex
(lines.bat) now reports
non-blank/non-comment lines as well. This is
not the same as the
"statement count" used by Euphoria for the diagnostic limit, but it's
usually within +/- 10%, assuming you write one statement per line.
-
Numeric literals greater than 1e308 (roughly) are now set to
+/- inf. They used to cause a compile-time error.
Version 2.0 Official Release March 25, 1998:
-
The install procedure has changed. The Euphoria .zip file now contains a
large bundle.dat file that contains over 100 files. This
makes it easier for people to locate the important files:
readme.doc,
install.bat, etc.
that they should look at before installing. The .zip file is also 35K
smaller as a result.
-
shroud will warn you to use
bind/bindw if you try to create a
shrouded source file with a name ending in ".exe".
Version 2.0 (beta) February 26, 1998:
-
The WIN32 interpreter, exw.exe, is now
a true WIN32 GUI program. In
2.0 alpha it was a WIN32 console program that was always
associated with a console or DOS-window. A DOS-style
console window will now be created only if your program needs one.
exw will automatically create
a new console window the first time your program writes to the screen, reads
from the keyboard, or calls any library routine that requires a console to
work. The console will disappear automatically when your program finishes
execution.
-
A new library routine, free_console(),
will immediately delete the console window if you currently have one.
-
The Complete Edition of Euphoria now provides a
-scramble option of
bind and
shroud to improve the security of
programs that you distribute.
-
You can now pass Euphoria atoms to
C routines as 64-bit C double type floating-point arguments, and you can
receive a floating-point result back from a C function.
-
exw.exe (beta) runs 10 to 15% faster
than exw.exe (alpha) (based on
sieve.ex,
shell.ex, etc.). The WATCOM C compiler
was doing a bad job of optimizing a critical section of the interpreter
when building exw.exe, but was producing excellent code when building
ex.exe.
With some trivial changes to the interpreter C code, WATCOM now produces
excellent code for both platforms.
-
The average program now has 60K more memory available before having to
use the swap file.
-
The limit on the size of a single procedure, function or type has been
eliminated.
-
The limit on the size of a single top-level statement has been eliminated.
-
The limit on the total number of include files that can make up a program
has been increased to 256 from 150.
-
Some optimizations were added. The
following general forms of expression are now faster:
2 * x
x * 2
1 + x
where x can be any expression, and have type atom or sequence.
-
There is a new documentation file,
perform.doc with lots of tips for
performance-obsessed programmers.
-
If you call a C routine using c_func(),
but you linked the C routine using
define_c_proc() you will get an error
message. Similarly, if you call it using
c_proc(), but you linked it using
define_c_func() you'll get
an error message. This restriction was documented, but not actually
enforced in 2.0 alpha. Some programs written for the alpha release will
have to be corrected.
-
You will now see the actual name of the C or Euphoria routine that you
were attempting to call, when you get an error message from
call_proc(),
call_func(),
c_proc(),
or c_func().
-
A new -clear_routines option of
bind and
shroud will leave the names of
all routines unshrouded. This is necessary if your program calls
routine_id(). You'll be warned if you
use routine_id() and do not choose this option. (Registered users can
use -scramble together with
-clear_routines to restore a high level of shrouding.)
-
If a name conflict arises with a global symbol, the
shrouder will now warn you, and then
choose a new name. It used to abort with a message.
-
It is no longer possible to trace
or profile shrouded code.
-
A new demo program, hash.ex, was added
to euphoria\demo.
-
freq.ex was moved from
euphoria\bin to
euphoria\demo and renamed as
tree.ex.
-
A new documentation file, bind.doc
describes all the features of bind.bat
and shroud.bat. The previous description
in refman.doc has been shrunk.
-
The file overview.doc gives a quick
overview of all documentation files.
-
The description of get_mouse() in
library.doc discusses the problem of
320-wide graphics modes (you must divide the x coordinate value by 2).
Version 2.0 (alpha) November 5, 1997:
Highlights of Older Releases:
Version 1.5a June 13, 1997:
-
Many operations and library routines were optimized.
-
get_key() is
100x faster when there is no key in the buffer.
-
get_all_palette() is over 100x faster
and this makes save_screen() much faster.
-
The following routines have now been built directly into
ex.exe, to avoid the overhead of
calling machine_proc() or
machine_func():
pixel(),
get_pixel(),
mem_set(),
mem_copy().
-
poke() of a long sequence into memory,
other than video memory, is 50% faster.
-
pixel() is 4x faster in mode 19.
-
get_pixel() is faster in all modes.
-
display_image() is about 30% faster in
most modes and up to 4x faster in mode 19,
because
pixel() is faster.
-
All arithmetic and bitwise operations applied to sequences of integers are
now 29% faster.
-
a & b (concatenation) is 15% faster
in most cases, and is dramatically faster in the case where you grow a
very long sequence by concatenating many small sequences onto it.
-
getc() is 12% faster.
-
match() is 8% faster in typical cases.
-
append()/prepend() are 15% faster in
many cases.
-
find() of an integer within a
sequence of integers is 64% faster.
-
Formation of a 2-element sequence {a,b} is 11% faster.
-
Internal copying of a shared sequence when it can no longer be shared is
15% faster.
Version 1.5 March 21, 1997:
-
The following library routines were added. They are described fully
in library.doc.
-
allow_break()
-
check_break()
-
mem_copy()
-
mem_set()
-
atom_to_float32()
-
atom_to_float64()
-
float32_to_atom()
-
float64_to_atom()
-
get_all_palette()
-
save_bitmap()
-
save_screen()
-
arctan()
-
and_bits()
-
or_bits()
-
xor_bits()
-
not_bits()
-
get_vector()
-
set_vector()
-
lock_memory()
-
tick_rate()
-
with profile_time (time profiling for
DOS32) was added.
Version 1.4b, October 1996:
-
mset.ex has a more visible selector
box on it's grid. It has also been sped up.
-
ed.ex now allows special characters
greater than ASCII 127 to be entered by pressing the Alt key and
typing digits on the numeric keypad.
Version 1.4a, July 1996:
-
crash_message() library routine was
added.
-
Programs bound by registered users
will now produce run-time error diagnostics regardless of the size of the
program.
-
shroud.bat has a new option
-full_keywords.
Version 1.4, May 1996:
-
You can now convert any Euphoria program into a
stand-alone .exe file.
-
The separate DOS4GW.EXE DOS extender file has been eliminated.
-
Windows 95 long filename support.
-
Support for DOS software interrupts.
-
New utility programs: key.ex,
where.ex,
ascii.ex,
guru.ex.
-
New demo program: dosint.ex.
-
New library routines: set_rand(),
use_vesa().
-
You can peek or poke an entire sequence of bytes.
-
Editor enhancements.
-
Reduction in space overhead for sequences.
Version 1.3, June 1995:
-
You can now edit multiple files using multiple edit windows.
-
20 new library routines were added.
-
Graphics performance was greatly improved.
Version 1.2, March 1994:
-
A problem that prevented Euphoria from running in a DOS prompt under
Windows was eliminated.
Version 1.1, January 1994:
-
Several language features and demo programs were added.
Version 1.0, July 1993:
-
Euphoria was first released after 3 years of research and development
and 6 months of Beta testing. Many of the ideas behind Euphoria came
from Robert Craig's Master's Thesis in Computer Science at the University
of Toronto. That thesis was strongly influenced by the work of John Backus
on functional programming (FP) languages.
|