July 14th, 2011· Highlights (see below for details)
· split 'def' keyword into 'proc' (for procedures) and 'iter' (for iterators)
· (see '$CHPL_HOME/util/convert-defs --help' for help updating existing codes)
· added 'Replicated' distribution and improved 'Block-Cyclic' distribution
· (see "Standard Distributions" in spec and examples/primers/distributions.chpl)
· added single-locale task layers for Nanos++ (BSC) and Qthreads (Sandia)
· (see doc/README.tasks)
· major reworking of range semantics and implementation
· (see "Semantic Changes / Changes to Chapel Language" below for detail)
· initial support for volatile types: bool, int, uint, real, imag
· (see doc/technotes/README.volatile)
· support for extern consts and classes (pointers-to-structs)
· (see doc/technotes/README.extern)
· improved support for data parallelism on the Cray XMT
· extensive improvements to the sample codes in the examples/ directory
· (see 'Example Codes' below and examples/README)
· added most code examples from the spec to a new examples/ directory
· (see examples/spec/*)
· added a technical note describing the user-defined domain map interface
· (see doc/technotes/README.dsi)
· extensive updates to the language specification
· (see 'Documentation' below)
· several improvements to the runtime tasking and communications layers
· (see "Runtime Library Changes" below)
· Syntactic/Naming Changes
· split 'def' keyword into 'proc' (for procedures) and 'iter' (for iterators)
· (see '$CHPL_HOME/util/convert-defs --help' for help updating existing codes)
· renamed 'arithmetic' domains/arrays to 'rectangular' domains/arrays
· added support for floating point literals of the form '1.e...'
· (previously, only '1e...' and '1.0e...' were supported)
· Semantic Changes / Changes to Chapel Language
several improvements to ranges (see 'Ranges' chapter in the language spec):
· added a concept of alignment to indicate an alignment modulo |stride|
· added an 'align' operator and query to ranges to specify/query alignment
· (e.g., '1..10 by 3 align 2' => '2, 5, 8' since 2 == 5 == 8, mod 3)
· defined == on ranges in terms of the integer sequences they generate
· defined ident(r1, r2) to say whether r1 and r2 are semantically identical
· defined '# k' for k < 0 as meaning "count from the end of the range"
· added 'first', 'last', 'alignedLow, 'alignedHigh' methods to ranges
· (e.g., '1..10 by -2' => first==10, last==2, alignedLow=2, alignedHigh=10)
· added support for a variety of new range query functions
· (e.g., alignLow(), hasFirst(), hasLowBound(), isAligned(), boundsCheck()...)
· added support for volatile bool, int, uint, real, and imag types
· (see doc/technotes/README.volatile)
· added an end-of-file check to the file type
· (e.g., 'while !infile.eof ...')
· removed support for treating 'return' in iterator as a 'yield'
· (e.g., change 'iter foo() { return x; }' to 'iter foo() { yield x; return; }')
· added support to referencing modules without first 'use'-ing them
· (e.g., module M1 { var x...} module M2 { ...M1.x... } is now legal)
· added a callStackSize query to the locale type
· (e.g., 'here.callStackSize' returns the call stack size on the current locale)
· removed the previously-required semicolon from the end of enum declarations
· (e.g., 'enum colors {red, blue, green}' is now legal; previously needed ';')
· added support for a single trailing comma at the end of enum lists
· (e.g., 'enum colors {red, blue, green, }' is now legal)
· removed support for +/- operators on rectangular domains; use translate()
· Newly Implemented Features
· implemented ==/!= for rectangular, associative, and sparse domains
· Standard Distributions
· added a first-draft 'Replicated' distribution for storing data redundantly
· (see examples/primers/distributions.chpl)
· improved 'Block-Cyclic', sufficient to correctly implement HPCC PTRANS and HPL
· (see examples/hpcc/ptrans.chpl, hpl.chpl; examples/primers/distributions.chpl)
· removed redundancy in specification of leader iterators between domains/arrays
· Standard Modules
· added INFINITY and NAN constants to the Math.chpl module
· (see 'Math' under "Standard Modules" in language spec)
· added isinf() and isfinite() test routines to the Math.chpl module
· (see 'Math' under "Standard Modules" in language spec)
· added a half dozen more routines to the GMP.chpl module
· Documentation
· added a new technical note describing the user-defined domain map interface
· (see doc/technotes/README.dsi)
· made many improvements to the language specification
· major revisions to the Domains chapter to improve clarity/accuracy
· improved and unified structure of Records and Classes chapters
· major revisions to the Domain Maps chapter to improve clarity/accuracy
· named example codes to provide cross-reference to examples/spec/ programs
· clarified the legality of label/break/continue in parallel loops
· updated the descriptions of read[ln]/write[ln]
· fixed some problems in file fields ordering
· reformatted the specification as a 'book' in LaTeX
· various minor fixes of typos/mistakes
· improved definitions/descriptions of several terms
· added documentation of locale.name
· and many other changes...
· updated quick reference document to include def->proc/iter change, align op.
· rewrote/reorganized README.extern to clarify explanations and bring up-to-date
· added a README describing the 'local' statement (doc/technotes/README.local)
· added a README describing volatile types (doc/technotes/README.volatile)
· updated README.comm-diagnostics to mention fast fork statistics
· updated various README files
· Example Codes
· placed most code examples from the language spec. to a new spec/ subdirectory
improved the primers/ directory:
· added a new primer for using procedures (primers/procedures.chpl)
· added a basic primer for domains (primers/domains.chpl)
· renamed the locales primer to locales.chpl and improved it
· improved the distributions primer and added Block-Cyclic and Replicated uses
· updated the range primer (primers/range.chpl)
· improved the iterators primer (primers/iterators.chpl)
· improved the reductions primer (primers/reductions.chpl)
· added getCurrentTime() to the timers primer (primers/timers.chpl)
· added descriptions of type aliases and config types to variables primer
· (see primers/variables.chpl)
· improved hpcc/ benchmarks directory
· added first version of HPCC PTRANS to hpcc/ directory (ptrans.chpl)
· added cleaner version of HPCC HPL to hpcc/ directory (hpl.chpl)
· added a variants/ subdirectory to examples/hpcc to exhibit other approaches
· added stream-promoted.chpl to show use of promotion in global STREAM Triad
· added ra-cleanloop.chpl to show cleaner (but currently slower) RA kernel
improved top-level examples:
· renamed existing "hello, world" examples to suggest a logical reading order
· (see examples/hello*.chpl)
· added data parallel and distributed data parallel hello, world examples
· (see examples/hello3-datapar.chpl, examples/hello4-datapar-dist.chpl)
· added comments to the various hello, world examples (examples/hello*.chpl)
· updated all examples to current language semantics
· use 'proc'/'iter' rather than 'def'
· update to reflect new range semantics
· Platform-specific Notes
· for Cray XT/Cray XE, improved the aprun and pbs-aprun launchers
· (see "Launcher-specific notes" below)
· for Cray XMT, added support for parallel loops over ranges
· for Cray XMT, added generation of noalias pragmas to forall loop variables
· added support for BSC's MareNostrum including docs and a special launcher
· (see doc/platforms/README.marenostrum)
· Launcher-specific notes
· added launcher-specific options to --help capability
· improved propagation of exit status codes through launchers
· changed launchers to support exec-based (rather than system-based) commands
· made launchers use 'unlink' rather than system('rm') to remove temporary files
· added a launcher for BSC's MareNostrum
· reduced number of temporary files used to capture output of 'system' commands
aprun launcher improvements:
· added a --cc flag to specify CPU assignment w/in a node
· added a -q flag to run the launcher in quiet mode
· added debug capability via CHPL_LAUNCHER_DEBUG to keep tmp files around
pbs-aprun launcher improvements:
· added a --cc flag to specify CPU assignment w/in a node
· added debug capability via CHPL_LAUNCHER_DEBUG to keep tmp files around
· cleaned up output to get rid of some extraneous printing
· made launcher support our testing system
· added --walltime and --queue flags to launcher as alternatives to env. vars.
· Compiler Changes
· made the compiler print 'true'/'false' out in type signatures rather than 1/0
· added config param 'noRefCount' to disable reference counting (may leak memory)
· Compiler Flags
· added a --print-callstack-on-error flag to show what led to a bad call
· added a --no-codegen flag to skip the code-generation and linking phase
· Interoperability Changes
· added support for extern C "classes" (pointer-to-struct types)
· added support for extern consts (see README.extern)
· Error Message Improvements
· added a warning orphaned 'use' statements outside of declared modules
· (e.g., 'use M1; module M2 { }' should typically be 'module M2 { use M1; }')
· made parse-time error message use the standard 'filename:lineno:' format
· generated an error message for referring to a class name in a primary method
· (e.g., 'class C { def C.m() {...} }' now generates an error message)
· Bug Fixes / New Semantic Checks (for old semantics)
· prevented config types from being set using execution time command-line flags
· fixed the compiler's ability to handle unions with no fields
· fixed the minloc/maxloc reductions to handle empty ranges/subranges of values
· fixed a bug in which the 'path' argument to file constructors was ignored
· made empty unions work correctly
· fixed an overflow issue in chunking up ranges for distribution/parallelization
· fixed a bug involving support for empty extern record types
· fixed a bug involving extern functions that return records
· fixed a bug related to copying external records
· fixed implementation of +/- operators on associative/sparse domains
· fixed a bug relating to filename-based module names containing multiple '.'s
· added error messages for expand/exterior/interior on irregular domains
· added an error for constructors/destructors with a specified return type
· fixed a pair of bugs relating to the 'fast on' optimization
· added a check against constructing classes without specifying generic fields
· Packaging Changes
· added syntax highlighter code for GNU source-highlight
· (see etc/source-highlight/README)
· improved emacs coloring support for version 22.x
· (see etc/emacs/README)
· updates to vim syntax coloring to reflect new 'proc'/'iter' keywords
· (see etc/vim/README)
· added a script for converting existing codes' use of 'def' to 'iter'/'proc'
· (see $CHPL_HOME/util/convert-defs)
· removed multirealm examples & documentation for the time being
· Third-Party Software Changes
· updated GASNet to version 1.16.1
· added copies of BSC's Nanos++ and Sandia's Qthreads
· (see third-party/README)
· made a post-install step for GASNet that changes absolute paths to relative
· removed PVM for the time being due to instability
· Runtime Library Changes
· added single-locale task layers for Nanos++ (BSC) and Qthreads (Sandia)
several improvements to the runtime tasking layer:
· added a new interface for having the tasking layer call chpl_main()
· changed tasking init function to take maxThreadsPerLocale/callStackSize args
· added a task yield capability to the tasking layer interface
· improved runtime code to avoid using sync vars before initializing tasking
· removed macro-ized form of tasking interface; using standard names instead
· unified naming of all task layer routines to chpl_sync_*() and chpl_task_*()
· removed requirement to implement the single variable interface
· moved termination of threads from fifo tasking layer to pthreads threading
· simplified implementation of sync variables in the pthread threading layer
· moved responsibility for thread counts from fifo tasking to pthread threading
several improvements to the runtime communication layer:
· restructured the communication interface to support length/type arguments
· added an interface for non-blocking get operations to the comm. interface
· unified all remote get operations to use CHPL_COMM_GET() macro
· refactored/renamed the communication interface headers
· Testing System
· vastly improved the performance testing and graphing capabilities
· (see comments at the front of start_test for documentation)
· improved the testing system's support for cleaning up after itself
· added ability to avoid using any indirection of stdin
· added an option to provide a system-wide prediff option
· added ability to use a launcher's native timeout feature rather than Python's
· improved how the testing system kills a test that times out
· fixed a bug in which .preexec files only worked if '.' was in your path
· Internal
· added a --break-on-id compiler flag for developers to locate AST node creates
· improved organization of util/ directory contents
· changed the way version numbers are computed/displayed for SVN-based users
· added support for task-/thread-specific module code
· added a capability to print the AST counts allocated between each pass
· added a new gdb alias to compiler --gdb: 'loc' prints an AST node's location
· greatly improved implementation of pragmas/flags to avoid error cases
· removed several instances of unnecessary string comparisons in the compiler
· removed error-prone use of CHPL_TASKS and CHPL_THREADS as preprocessor symbols
· added bestPractices documentation for developers (not included in release)
· changed internal munging of '=' and '==' to 'ASSIGN' and 'EQUALS' respectively
· added a --print-id-on-error developer flag to print AST ID on errors
· improved the strictness of C++ prototype checking
· added external contributor agreements to the SVN tree (not in release)
· added a notion of internal types used by the compiler but not the user