--------------------------- Euphoria Version 1.5a June 12, 1997 Release Notes --------------------------- Version 1.5a: * Many operations and library routines are now much faster. Performance figures below are based on a 150 MHz Pentium machine running Windows 95 and using a cheap S3 video card. Thanks to Michael Bolin, get_key() is 100x faster when there is no key in the buffer (the usual case). Thanks to Michael Bolin, 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(). There is no longer a requirement to include graphics.e or machine.e to call: pixel(), get_pixel(), mem_set() or mem_copy(). This makes calls to these routines much faster, especially when small numbers of bytes or pixels are involved. For example, mem_copy() of 20 bytes or less is at least 2.5x faster and mem_set() of 20 bytes or less is at least 10x faster. pixel() is much faster in all graphics modes, and is now extremely fast in mode 19. pixel() is almost as fast as using poke() in mode 19, and pixel() will safely ignore any pixels that are written off-screen. mem_copy() and mem_set() remain the fastest ways to write an image onto the mode 19 screen, but you must already have the image stored in memory. Plotting a single pixel is 70% faster in most modes, and 4.5x faster in mode 19. Plotting a sequence of 10 pixels is 50% faster in most modes, and over 4x faster in mode 19 compared to version 1.5. poke() of a long sequence into memory, other than video memory, is 50% faster. poke() into video memory is not any faster. get_pixel() is faster in all modes, especially where a single pixel value is read. display_image() is faster because pixel() is faster. A 10x10 image can be displayed at least 30% to 40% faster in any graphics mode, and over 4x faster in mode 19. All arithmetic and bitwise operations applied to sequences of integers are now faster. For example, adding a long sequence of integers to another long sequence of integers is 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. Some other internal operations of the interpreter are also somewhat faster. * The following demo programs have been improved slightly: sieve.ex, mouse.ex, mydata.ex, eprint.ex, search.ex * BUG FIXED: If a run-time error occurred at the top-level of a program, on a line containing multiple statements, the ex.err traceback might fail. * BUG FIXED: While tracing, the library routines call(), mem_copy() and mem_set() might write to the trace screen, rather than writing to the main output screen. * The documentation for get_mouse() has been improved. Version 1.5 March 21, 1997: * In addition to handling sequences of characters, the library routines upper() and lower() now handle atoms and arbitrarily-complex sequences (and they've been shrunk to just ONE line of code each). * Performance improvement: hex constants in the range #2000000 to #3FFFFFFF, and decimal constants in the range 1000000000 to 1073741823 were being stored internally as floating-point numbers. They are now stored as machine integers to save space and time. * The following library routines have been added. They are described fully in library.doc. allow_break - lets you prevent control-c/control-break from terminating your program check_break - lets you detect that control-c/control-break has been pressed mem_copy - fast routine for copying a block of memory mem_set - fast routine for setting a block of memory to a value atom_to_float32 - convert an atom to 32-bit IEEE floating-point format atom_to_float64 - convert an atom to 64-bit IEEE floating-point format float32_to_atom - convert from 32-bit IEEE format to an atom float64_to_atom - convert from 64-bit IEEE format to an atom get_all_palette - get the palette values for all colors save_bitmap - create a .BMP file, given a palette and a 2-d sequence of sequences of any size * The editor, ed, will no longer terminate when control-c/control-break are pressed. * "Bucket sort" was added to allsorts.ex. * without warning / with warning was removed from image.e. It could interfere with your own use of "without warning". * The following library routines have been added. They are described fully in library.doc. save_screen - saves all or part of the screen as a .BMP file arctan - arctangent and_bits - bitwise AND or_bits - bitwise OR xor_bits - bitwise XOR not_bits - bitwise NOT get_vector - get address of current interrupt handler set_vector - set new address for interrupt handler lock_memory - lock a region of memory so it can't be swapped out * A demo program has been added that shows how to redirect a hardware interrupt to your own machine-code handler. See demo\hardint.ex * The trace screen is updated much faster in graphics modes. Also, in modes that can only show 40 characters or less of text per line, the line number has been dropped so there's more room to display your source code. * Registration information has been moved to a new directory called REGISTER. The program HOW2REG.EX will assist you in choosing the most convenient way to register or upgrade. It can even make an order form for you. * Help text displayed in ed is now shown in a new edit window, so you can continue to view your program while reading the help text. * A customizable command (F12) has been added to ed. It's set up to comment-out the current line, but you can easily change it to perform any series of keystrokes. * Euphoria will switch to a clear, text-mode screen before printing your "crash message" - see crash_message(). * Some extra optimizations have been added. Many programs now run a few percent faster, particularly on Pentium systems. * Warnings about "the value assigned to variable x is not used" have been eliminated. They were almost always just a nuisance, and did not indicate a real problem. You will still be warned about variables or constants that you declare but never use. * The "Press Enter" prompt that would sometimes appear after an error has been eliminated. * install.ex now handles the case of no autoexec.bat file, or no PATH command in autoexec.bat, and gives a better warning if you try to run install.ex again after you've already installed. * You can now get accurate time profiles, in addition to the statement-count profiles that were previously available. Use: with profile_time * You can use tick_rate() to control the rate at which clock-tick interrupts occur on your system while your program is running. * ex.exe now uses 4 bytes less memory for each floating-point number and 4 bytes less memory for each sequence. e.g. a value such as: {1.3, -8.9} would require 12 bytes less memory. * The "Viper" video card is now better supported for SVGA modes. * display_image() and save_image() have been sped up by about 5 to 10 percent. * BUG FIXED: A bug was fixed in the ex.exe storage allocator. It could, in very rare situations, cause a program to crash. * BUG FIXED: The line number information on a run-time error trace-back was often incorrect for programs larger than about 5000 statements. * BUG FIXED: bind would fail when the last line of a file was lacking a \n character. * BUG FIXED: bind ..\..\myprog would fail to automatically add the ".ex" suffix to myprog * BUG FIXED: characters greater than 127 inside a double-quoted string had 2's complement negative values (they would still print ok). Inside a single-quoted constant they were positive as they should be. * BUG FIXED: During tracing, pokes to the screen would display characters immediately on the trace screen, instead of the main output screen. Similarly, peeks would read from the trace screen instead of from the main screen. * BUG FIXED: ex.exe might crash when a variable was initialized with extremely large amounts of data at the top-level of a program. Highlights of Previous Releases: Version 1.4b, October 1996: * mset.ex has a more visible selector box on it's grid. It has also been sped up by having it write out an entire row of pixels with each call to pixel(). * 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. * ed will now display the error message and line of error even if the offending file was included using a filename extension of ".E" rather than the standard ".e". Version 1.4a, July 1996: * crash_message() library routine added to machine.e. * 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" to let you shroud a program but not reduce keywords to a single-byte. This can help you to decipher ex.err dumps generated against bound or shrouded code. 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 * 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.