9.8 Version 4.0.0 Release Candidate 1 November 8, 2010

The release of Euphoria 4.0 is like no other. It's updates are massive. The change log here is not designed to detail every minor change that has taken place during the 4.0 development cycle. Included in this release note are the language changes only.

The entire standard library is brand new. The manual should be consulted to learn about the new standard library, it's changes are not documented here as it would just be a duplicate of the manual API sections. We will, however, mention a few major additions to the API library that has required binary changes in the backend:

9.8.0.1 Major Library Additions

  • Dictionary Type
  • Regular Expressions
  • Sockets

9.8.1 Contributors

Another thing you will notice that is slightly different about this release note is that we are not attributing "Change ABC" to person "DEF." Many of the changes made have been an iterative process involving many people. Euphoria 4.0 has had a large number of contributors. We will, however, list all those that have contributed, the list is in last name alphabetical order:

  • Jiri Babor
  • Chris Bensler
  • Jim C. Brown
  • CoJaBo
  • Jeremy Cowgar
  • Robert Craig
  • Chris Cuvier
  • Jason Glade
  • Ryan W. Johnson
  • C.K. Lester
  • Matthew Lewis
  • Junko Miura
  • Marco Antonio Achury Palma
  • Derek Parnell
  • Shawn Pringle
  • Michael Sabal
  • Kathy Smith
  • Yuku (Aku)

If we have forgotten your name, please forgive us and bring it to our attention, the addition will be made promptly.

9.8.2 Bug Fixes

  • 1855414. open() max path length is now determined by the underlying operating system and not a generic default. open() also now returns -1 when the filename is too long instead of causing a fatal error.
  • 1608870. dir() now handles *.abc correctly, not showing a file ending with .abcd. dir() also now supports wildcard characters (* and ?) on all platforms.

9.8.3 Changes

  • DOS support has been withdrawn. OpenEuphoria from version 4 onwards will not be specifically supporting DOS editions of the language.
  • Comments may now be embedded in data passed to value() in get.e.
  • Documentation moved to a new format.

9.8.4 New Programs

  • eutest - Unit testing system for Euphoria

9.8.5 New Features

  • New standard include files are in include/std to resolve many conflicts.
  • Include file names with accent characters now supported.
  • Enhanced symbol resolution to take into account information regarding which files were included by which files.
  • Namespaces for a source file now can be used for identifiers in the specified file and for global identifiers in all files included by the specified file.
  • Command line arguments for the translator allow for creating binaries with debugging symbols, and to specify a different runtime library.
  • In trace mode, '?' will show the last defined variable of the requested name.
  • Include directories can now be specified based on command line arguments and config files in addition to environment variables.
  • Improved accuracy in scanning numbers in scientific notation. Scanned numbers are accurate to the full precision of the IEEE 754 floating point standard.
  • New loop do ... until condition end loop construct, which differs from a while loop in that it performs its test at the end of the block, rather than at the start.
  • New keywords to give greater control over the instruction flow:
    • continue: start next iteration of a loop;
    • retry: restarts the current iteration of a loop
    • entry: marks the entry point into a loop, skipping initial test
    • break: exit an if block or switch block
    • goto: jump to a label that is in the same scope
  • The exit, break, continue and retry keywords now can take an optional parameter, which enables to exit several blocks at a time, or (re)starting an iteration of a loop which is not the innermost one.
  • Block headers now may mention a label. This label can be used as the optional parameter of flow control keywords.
  • Variables can now be initialized right on the spot at which they are declared, just like constants.
  • Any routine parameter can be defaulted, i.e. given a default value that is plugged in if omitted on a call. Any expression can be used, and parameters of the same call can even be used.
  • New switch ... end switch construct, which more efficiently implements a series of elsif, using the compact case statement.
  • Unit testing added to Euphoria.
  • Condition compiling keywords (ifdef, elsifdef, end ifdef) and with define=xyz or command line -D XYZ to insert/omit code in interpreter IL code and in translated C code.
  • New enum keyword that allows for parse time sequential constant creation.
  • The namespace eu is predefined, and can be used to fully qualify built-in routines.
  • with warning has been enhanced in order to individually turn warnings on or off.
  • New scope: export. Identifiers with the export scope can only be seen from files that:
    1. directly include the file where the identifiers are defined
  • New scope: public. Identifiers with the public scope can only be seen from files that:
    1. directly include the file where the identifiers are defined
    2. directly include a file that uses the "public include file.e" construct to pass public identifiers
  • Routine resolution changes
    1. Routines the same name as an internal no longer override the internal by default. You must use the keyword override.
    2. An unqualified call to routine that exists as an internal calls the internal unless overridden with the override keyword. global, public and export functions are not called. A namespace must be used.
  • -STRICT option added that will display all warnings regardless of the file's with/without warning setting.
  • -BATCH option designed to run in an automated environment. Causes any "Press Enter" type prompt due to error to be suppressed. Exit code will be 1 on success, 0 on failure as normal.
  • -TEST option allows for editing/IDE environments to perform a syntax check on the euphoria code in question. Causes euphoria interpreter to do all parsing, syntax checking, etc... but does not execute the code. Exit code will be 1 on success, 0 on failure as normal. Editors/IDE's may need both -test and -batch.
  • dis.ex (in the source directory) will parse a euphoria program and output the symbol table and the IL code in a readable format.
  • Variables may be in any part of a routine, or in for, while, if, loop and switch blocks, in which case the scope of the variable ends when its block ends.