Euphoria Release Notes

 
Version 2.3 Official Release February 11, 2002:

This release updates the Euphoria Interpreter, the Euphoria To C Translator, and the Interpreter Source Code product, for all platforms.

  • The DJGPP version of the interpreter source code now uses GNU C's dynamic labels, just like the Linux version. This allows it to achieve full speed, without the need for any assembly-level tweaking. Thanks to Bernie Ryan.
  • The Interpreter Source Code now includes an overview document describing how the interpreter works.
  • In the Complete Edition, bind.bat and bindw.bat now use exw to run the binder/shrouder. This avoids problems with long filenames on some systems. A console window will appear while the binder/shrouder is running. Thanks to "void", Bruce Axtens, and others.
  • bug fix : Due to a bug in the WATCOM 10.6 C library, the ex and exw interpreters, and code translated to C and compiled by Watcom, might get the wrong result from Euphoria's where() function when the file was opened in append mode, and the file pointer was in the uncommitted (not written to disk yet) portion of the file. The bug has been worked around by having Euphoria flush() the file in this particular case, before calling the Watcom routine. Thanks to Bob Elia.
  • bug fix : A bug introduced in the binder for 2.3 beta, might cause a function call on the last line of a program to be ignored. Thanks to Wolfgang Fritz.
  • bug fix : Several Euphoria files in the WIN32+DOS32 distribution had Linux-style line terminators (\n only). This made them hard to view using NotePad and some other editors. Thanks to Pete Lomax.
  • bug fix : If "with type_check" was turned on, ed.ex would get a type_check failure when the Esc key was pressed. Thanks to Kenneth Orr.

 
Version 2.3 Beta Release January 15, 2002:

This release updates the Euphoria Interpreter, the Euphoria To C Translator, and the Interpreter Source Code product, for all platforms.

  • You can now override a Euphoria built-in routine with your own variable or namespace identifier of the same name. Previously this was only allowed for user-defined routines. Besides giving programmers more freedom, it will allow RDS to add new built-in routines in the future without breaking existing code.
  • The warning about having multiple global symbols with the same name in different source files has been removed. It was felt to be unnecessary since you'll be asked to supply a namespace identifier if you actually make an ambiguous reference to a global symbol.
  • You can now have a trailing \ (or Linux /) on the end of all directory names in EUINC, and you can have blanks in the directory name.
  • To eliminate confusion, the binder/shrouder will now delete the output file if a fatal error occurs during the bind or shroud.
  • Numerous improvements and corrections were made to the documentation. Thanks to Igor Kachan.
  • Old, pre-ANSI function definitions in the interpreter source code, have been updated to ANSI-style, which is more compatible with C++.
  • bug fix : With DJGPP C, when compiling code produced by the Translator, or compiling the Interpreter source code, there was a memory allocation bug that could waste a bit of time, or, in rare cases, cause a crash.
  • bug fix : On Windows, using the Interpreter, or a Translated program, you were sometimes required to hit Enter twice to exit from a console window. Thanks to Tone Skoda.
  • bug fix: The Euphoria dir() function, as implemented for Lcc or Borland, did not handle directories properly when they had extra attributes set, such as READ_ONLY. Thanks to Euman, who encountered the problem, and then showed how to fix the Interpreter source code for dir().
  • bug fix: You can now declare a namespace identifier with the same name as a built-in function, without causing a lot of errors. Thanks to Martin Stachon (although he recommended a different solution).
  • bug fix - Binder: Support for the new EUINC environment variable has now been added to the binder. Thanks to Ross Boyd.
  • bug fix - Binder: Appending resource files to a bound .exe didn't work correctly when bind -clear was used. Thanks to Wolfgang Fritz.
  • bug fix - Binder: When using the binder interactively, you would get a "variable not initialized" error when trying to substitute a different Windows icon. Thanks to Tony Steward.
  • bug fix - Binder: In some cases the keyword "constant" would be dropped from the shrouded output, when the previous line of input had a constant declaration ending in ']'. Thanks to Ross Boyd.
  • bug fix - Binder: When a general expression, (not just a string in quotes), was used as the argument to routine_id(), local routines that were potentially the target of that expression, might have their names changed (unless -clear was used), thus causing routine_id() to return -1 at run-time. Global routines were ok.
  • bug fix - Binder: The binder/shrouder kept going even though an include file was missing. Thanks to Ross Boyd.
  • bug fix - Linux Binder: The Linux search path bug for bound executables, supposedly fixed by the 2.3 alpha release, wasn't fixed properly. Fixed now. Thanks to Ken Rhodes.
  • bug fix - Linux Binder: bindu -clear and shroud -clear with a file containing DOS/Windows-style \r\n line terminators gave you errors "illegal character" when your shrouded program was run, and "not bound correctly" when your bound file was run.
  • bug fix - Interpreter Source: The link command for building the DOS interpreter with WATCOM C, listed a non-existent .obj file.

 
Version 2.3 Alpha Release November 30, 2001:

This release updates the Euphoria Interpreter for WIN32, DOS32 and Linux. It also updates the Euphoria To C Translator for all platforms, and it introduces a new product - the Euphoria Interpreter Source Code.

  • The registration incentives and prices have changed.
    • The Interpreter product now has just one option: WIN32, DOS32 and Linux, formerly $59, for just $39.
    • The Interpreter source code (minus a few registered features) is now available for $49. See the source license and register.doc for more details.
    • The Translator continues to cost $29.
    • When Public Domain users reach 300 statements, they will no longer lose the run-time error diagnostics. They will only lose the trace() facility.

    register.doc has more details, including the requirements for getting a free upgrade.

  • The Euphoria interpreter can now be built successfully by 6 different C compilers on 3 platforms.
  • New namespace qualifiers eliminate naming conflicts between identical global symbols declared in different include files. Also, local symbols will now override global symbols of the same name, rather than causing an error. See Scope Rules.
  • The Complete Edition Interpreter product comes with a new 2-pass binder/shrouder that eliminates all unused routines and constants, resulting in smaller executable files. It also has an option to bind clear source, so you can get understandable error messages from your users.
  • A new environment variable, EUINC, has been introduced. If present, it specifies a list of additional directories that will be searched for include files. The directory containing the main file is always searched first, then the directories in EUINC, then euphoria\include.
  • The Interpreter now supports a new trace mode, trace(3). It logs all executed Euphoria statements to a file, so you'll be able to see the last statement that was executed at the time of any crash, as well as the 499 statements that preceded it. This is particularly helpful in the case of machine-level crashes where Euphoria is unable to write an ex.err file. Thanks to Matthew Lewis.
  • The Euphoria interpreter can now pass Euphoria data - atoms and sequences, to .dll files coded in Euphoria and built by the Translator. Use the new E_ types in dll.e
  • On Linux we added RTLD_GLOBAL on the dlopen() call. This lets you link successfully with more shared libraries.
  • On Linux, when using the #! feature on the first line, to make your source file directly executable, you no longer need a .exu extension on your file. Linux programmers often prefer to have no extension on their executable files.
  • Windows callback routines written in Euphoria can now take 9 arguments (was 8). Thanks to Matt Lewis.
  • In addition to C_DOUBLE (8-byte floating point), C_FLOAT (4-byte floating-point) is now supported for arguments and return values from C routines. Thanks to David Guy.
  • Windows .dlls opened with open_dll() are now closed automatically when your program terminates. This avoids a tiny bit of memory leakage. Thanks to Euman.
  • safe.e has a new option to check just the edges of registered blocks and not complain if other blocks of memory are used.
  • get_bytes() is 30% faster.
  • allocate_string() was speeded up. Thanks to Aku.
  • The mydata.ex demo program now uses an EDS database.
  • bug fix - Translator: When a global or local variable containing a sequence or floating-point number was assigned the result of a function, and at some point during the function call the global or local variable was overwritten, some corruption would take place, leading to a probable crash later in the program. Thanks to Sergio Gelli.
  • bug fix - Linux Interpreter: programs of more than a few thousand lines had a chance (maybe 20%) of having one of their statements crash whenever it was executed.
  • bug fix - Interpreter: s[i][j]...[k] = s caused the interpreter to crash. i.e. an assignment of an entire sequence to an element of an element of itself using 2 or more levels of subscripting. Thanks to Henri Goffin.
  • bug fix - Linux binder: (Ken Rhodes) Bound executable programs stored somewhere on the search path would not run properly unless they were in the current directory or unless you specified the full path to the executable.
  • bug fix - Binder: "with profile_time" in a bound or shrouded program would cause a crash
  • bug fix - DOS Interpreter: In image.e, put_screen_char() has been corrected to have: if overflow > 0 then ... instead of: if overflow then ...
  • bug fix - Interpreter: A time optimization for slicing could in rare cases cause a lot of wasted space. The optimization has been adjusted to handle those cases. Thanks to Brian Clausing.
  • bug fix - safe.e: free() and free_low() were not actually freeing the block of memory, and on Linux free() could cause a segmentation violation. The same routines in machine.e were ok.
  • bug fix - Translator for DJGPP: A couple of minor differences from ex.exe in the display of text were corrected.
  • bug fix - define_c_var(): works on WIN32 too. The documentation was corrected.

Version 2.2 Official Release for WIN32+DOS32 January 14, 2000:

  • Better error messages are now issued from the interpreter, and from the bind program, for some typical errors that users can make when binding a program.
  • The documentation has been improved in a few places.
  • The window.exw demo program shows how to load the Euphoria icon contained in exw.exe.
  • Language War uses Jiri Babor's improved version of putsxy.e.

 
Version 2.2 Beta Release for WIN32+DOS32 December 23, 1999:

Most of the new library routines developed for Euphoria 2.2 on Linux, have now been ported to WIN32 and DOS32. These are: sleep(), chdir(), flush(), lock_file(), unlock_file(), crash_file(), get_screen_char() and put_screen_char(). For a description of these routines refer to the Linux release notes below, or LIBRARY.HTM.

Some cross-platform bug fixes and other miscellaneous improvements were made during the Linux port. These bug fixes and improvements have now been ported back to WIN32+DOS32. See the Linux release notes (below).

In addition, the following improvements have been made specifically for WIN32 and DOS32:

  • exw.exe now contains a Euphoria icon that is displayed automatically by Windows. The icon was contributed by Gary Dumer. Registered users may change this icon when they bind a program.
  • exw.exe is now a compressed executable of just 73K (or so). It's compressed using the UPX compression tool for .exe files.
  • ex.exe has been updated with the latest release of the CauseWay DOS extender. A problem where CauseWay would sometimes limit you to 64Mb of memory under some DOS configurations has been eliminated, and a few other minor bugs were fixed.
  • bug fix: The error traceback could sometimes crash or be misprinted when a type_check failure occurred. It could only happen when 1 was added to an expression, and the non-integer result of the expression was assigned to a variable declared as integer.
  • bug fix: If text_rows() was called as the first routine needing a WIN32 console window, Euphoria would fail to set the new number of lines of text on the console.

 
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.htm.
  • 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: 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.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.htm 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.htm 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.htm 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.htm. 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:

  • A new platform is now supported. exw.exe will run Euphoria programs using the WIN32 (Windows 32-bit) operating system. ex.exe will run programs using DOS32 (extended DOS). See platform.doc for further details.
  • The following library routines have been introduced.

    For both DOS32 and WIN32:

    platform() - find out which platform you are executing on. (The PLATFORM constant is available in Euphoria 2.2 and later).
    routine_id() - get a small integer id number for a Euphoria procedure or function.
    call_proc() - call a Euphoria procedure by using its id.
    call_func() - call a Euphoria function by using its id.
    custom_sort() - sort a sequence using a compare function that you specify.
    poke4() - store a number into 4 bytes of memory. poke4(address, value) is at least 10x faster than: poke(address, int_to_bytes(value)). poke4() also works with sequences of values.
    peek4s() - read 4 bytes of memory as a signed integer (works on sequences too).
    peek4u() - read 4 bytes of memory as an unsigned integer (works on sequences too). peek4u(address) is 10x faster than: bytes_to_int(peek({address, 4})).
    allocate_string() - allocate and store a 0-terminated string in memory.

    For WIN32 only:

    open_dll() - open a Windows .dll file.
    define_c_proc() - define a C routine that will be called from Euphoria (no value returned).
    define_c_func() - define a C routine that will be called from Euphoria (a value will be returned).
    call_c_proc() - call a C routine from Euphoria (no value is returned).
    call_c_func() - call a C routine from Euphoria (a value is returned).
    call_back() - get a call-back address, so Windows can call your Euphoria routine when the user interacts with your window.
    message_box() - display a simple Yes/No/Cancel window.
  • New Demo programs:
    • csort.ex
    • email.exw
    • window.exw
    • winwire.exw
    • dsearch.exw
  • New include files:
    safe.e - debug version of machine.e
    misc.e - miscellaneous
    dll.e - dll access
    msgbox.e - Windows message box
  • The following additional improvements have been made to the DOS32 version:
    • On Pentium and higher systems, floating-point calculations are now about 20% faster (and floating-point in exw is a further 20% faster than ex for 2.0).
    • printf() to the screen, and print() to the screen are both significantly faster in most cases.
    • The trace screen is updated a bit faster.
    • The time profile is more accurate regarding getc().
    • The mset.ex demo runs 30% faster.

 
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.htm.
    • 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.