Chapel Changelog

What's new in Chapel 1.12.0

Jan 18, 2016
  • Highlights:
  • significantly expanded the coverage of our online documentation (see http://chapel.cray.com/docs/1.12/ and "Documentation" below)
  • added new 'Barrier', 'Spawn', and 'LAPACK' modules to the standard set (see "Standard Library/Modules" section below)
  • added chplvis: a new tool for visualizing Chapel communication and concurrency (see http://chapel.cray.com/docs/1.12/tools/chplvis/index.html)
  • added a new chapter describing Chapel's memory consistency model in detail (see 'Memory Consistency Model' in the language spec)
  • added a 'vectorizeOnly()' iterator that vectorizes without task creation (http://chapel.cray.com/docs/1.12/modules/internal/ChapelIteratorSupport.html)
  • new performance optimizations, particularly intra- and inter-node locality (see "Performance Improvements" section below)
  • removed the 'local' block from stream-ep based on the above optimizations (see examples/benchmarks/hpcc/stream-ep.chpl)
  • changed the default tasking layer on 'cray-x*' to 'qthreads' for performance
  • added support for type methods and iterators (see 'Classes::Class Method Calls::The Method Receiver and the this Argument')
  • added support for public/private module-level variables, functions, modules) (see 'Modules:Access of Module Contents::Visibility of Module's Symbols')
  • domains in formal array arguments are now interpreted as a constraint (see 'Arrays::Array Arguments to Functions' in the language spec)
  • significantly revamped and improved correctness and performance testing system
  • improved how internal error messages are displayed to users
  • added Chapel Improvement Proposals (CHIPs) framework for proposing changes (see https://github.com/chapel-lang/chapel/blob/master/doc/chips/1.rst)
  • made more bug fixes than any release since version 1.1 (see "Bug Fixes" section below)
  • addressed portability issues for a number of platforms and compilers
  • Process Improvements:
  • added Chapel Improvement Proposals (CHIPs) framework for proposed changes (see https://github.com/chapel-lang/chapel/blob/master/doc/chips/1.rst)
  • Environment/Configuration Changes:
  • 'printchplenv' now indicates which settings come from environment variables
  • made the quickstart scripts turn CHPL_LLVM off by default
  • removed dependencies on 'bc' and 'patch'
  • Tool Changes:
  • added chplvis: a new tool for visualizing Chapel communication and concurrency (see http://chapel.cray.com/docs/1.12/tools/chplvis/index.html)
  • chpldoc improvements: - improved handling of enum, real, imag, and complex initializers - 'chpldoc' now generates values for enum symbols - automatically skip documentation of 'private' symbols - squashed generation of 'inline' in output - added support for --print-commands with chpldoc
  • chpl-ipe: - added a quit() primitive for clean exits from the environment
  • Syntactic/Naming Changes:
  • changed 'use' to 'require' for header files and external libraries (see http://chapel.cray.com/docs/1.12/technotes/extern.html)
  • replaced the standalone format() routine, with string.format() (http://chapel.cray.com/docs/1.12/modules/standard/IO.html#IO.string.format)
  • renamed memory diagnostics capabilities for clarity (see http://chapel.cray.com/docs/1.12/modules/standard/Memory.html)
  • changed the '##.##' writef() pattern so that it requires '%{...}' around it (see http://chapel.cray.com/docs/1.12/modules/standard/IO.html#specifiers)
  • added support for form-feed characters ('\f') as whitespace (see 'Lexical Structure::White Space' in the language specification)
  • changed the term 'blank intent' to 'default intent' (see 'Functions::Argument Intents::Abstract Intents::The Default Intent')
  • Semantic Changes / Changes to Chapel Language:
  • domains in formal array arguments are now interpreted as a constraint (see 'Arrays::Array Arguments to Functions' in the language spec)
  • Chapel no longer keeps referenced variables alive past their lexical scope
  • c_strings are no longer made into strings when passed to generic extern args
  • 'select' statements now only evaluate their argument expression once
  • New Features:
  • added a 'vectorizeOnly()' iterator that vectorizes without using multitasking (http://chapel.cray.com/docs/1.12/modules/internal/ChapelIteratorSupport.html)
  • added support for type methods and iterators (see 'Classes::Class Method Calls::The Method Receiver and the this Argument')
  • added support for public/private module-level variables, functions, modules) (see 'Modules:Access of Module Contents::Visibility of Module's Symbols')
  • added support for methods on enumerated types (e.g., 'enum color {red};' permits 'proc color.foo() { ... } color.red.foo();')
  • added support for hexadecimal floating point literals (see 'Lexical Structure::Tokens::Literals' in the language specification)
  • added the ability to rename extern records for use within Chapel (see 'Interoperation::...::Shared Types::Referring to External C Structs')
  • added support for -lchplmalloc for compilers supporting weak symbols (see http://chapel.cray.com/docs/1.12/technotes/allocators.html))
  • added the ability to use 'continue' statements in 'param' for-loops
  • added support for == and != operators on domain maps
  • Standard Library/Modules:
  • added a new 'Barrier' module defining a simple collective barrier capability (see http://chapel.cray.com/docs/1.12/modules/standard/Barrier.html)
  • added a new 'Spawn' module for creating new subprocesses (see http://chapel.cray.com/docs/1.12/modules/standard/Spawn.html)
  • added a new 'LAPACK' module that provides an interface to LAPACK (see http://chapel.cray.com/docs/1.12/modules/standard/LAPACK.html)
  • added support for common mathematical constants to 'Math.chpl' (see http://chapel.cray.com/docs/1.12/modules/standard/Math.html#Math.e)
  • replaced standalone format() routine with string.format() in 'IO' (http://chapel.cray.com/docs/1.12/modules/standard/IO.html#IO.string.format)
  • unified string.format() format strings with writef() (http://chapel.cray.com/docs/1.12/modules/standard/IO.html#formatted-i-o)
  • added a getFileSize() routine to the 'FileSystem' module (see http://chapel.cray.com/docs/1.12/modules/standard/FileSystem.html)
  • merged the contents of the 'UtilMath' module into 'Math' (see http://chapel.cray.com/docs/1.12/modules/standard/Math.html)
  • improved the 'Memory' module: - renamed memory diagnostics capabilities for clarity - added a --memLeaksByDesc flag to track only certain types of leaks - stopped tracking memory allocations not related to Chapel code by default (see http://chapel.cray.com/docs/1.12/modules/standard/Memory.html)
  • errorToString(ENOERR) now portably returns "No error" in 'Error' module (see http://chapel.cray.com/docs/1.12/modules/standard/Error.html)
  • applied the 'private' keyword to standard modules as appropriate/possible
  • Performance Improvements:
  • parallelized large numeric array initialization for better first-touch
  • improved analysis and optimization of variables that are provably local
  • fixed a bug in which non-blocking 'on's were counted as local running tasks
  • improved task counting when one task is waiting for others to complete
  • optimized task counts to use processor atomics when profitable
  • made 'cray-x*' systems default to 'qthreads' over 'muxed'
  • moved polling threads to the last available CPU to avoid contention
  • made array allocation use calloc(), not malloc() for better first-touch
  • enabled more optimizations and streamlined code when using the LLVM back-end
  • Memory Improvements:
  • stopped leaking sync and single variables on all platforms except Cygwin
  • eliminated leaks for heap allocated variables used in cobegin/coforall
  • Documentation:
  • mirrored many of the READMEs from the release onto our online documentation (see http://chapel.cray.com/docs/1.12/usingchapel/ and .../1.12/technotes)
  • added online documentation for built-in types, functions, methods (see http://chapel.cray.com/docs/1.12/modules/builtins.html)
  • added online documentation for standard domain maps (layouts and distributions) (http://chapel.cray.com/docs/1.12/modules/distributions.html and layouts.html)
  • added a copy of the online html documentation to the release itself (see $CHPL_HOME/doc/html)
  • converted most READMEs to ReStructured Text (.rst) or markdown (.md) (for example, see $CHPL_HOME/doc/and $CHPL_HOME/doc/technotes/*)
  • refreshed the contents of most former READMEs as part of this effort
  • language specification updates: - added a new chapter on Chapel's memory consistency model - added documentation of the I/O operator, - improved the specification's page numbering and format - retired standard library chapters from the spec now that they're online (see http://chapel.cray.com/spec/spec-0.98.pdf)
  • standard module documentation improvements - added a "Formatted I/O for C Programmers" table to the IO module (see http://chapel.cray.com/docs/1.12/modules/standard/IO.html#formatted-i-o) - refreshed the documentation of other standard modules
  • refreshed the contents of the C interoperability technical note (see http://chapel.cray.com/docs/1.12/technotes/extern.html)
  • retired README.format due to its documentation as part of a standard module (http://chapel.cray.com/docs/1.12/modules/standard/IO.html#IO.string.format)
  • removed Tilera-specific documentation due to lack of use and testing
  • Example Codes:
  • rewrote the 'stream-ep' example to remove the now unnecessary 'local' block (see examples/benchmarks/hpcc/stream-ep.chpl)
  • added a copy of Chapel code from learnXInYMinutes site to examples/primers (see examples/primers/learnChapelInYMinutes.chpl)
  • added a primer for the new 'chplvis' tool (see examples/primers/chplvis/README)
  • added a primer for the new LAPACK module (see examples/primers/LAPACKlib.chpl)
  • added a new examples/patterns directory for storing common code patterns (see examples/patterns/README)
  • added patterns/recordio.chpl to demonstrate reading tab-delimited records (see examples/patterns/recordio.chpl)
  • updated shootout/nbody.chpl to use 'ref's rather than nested procedures (see examples/benchmarks/shootout/nbody.chpl)
  • replaced uses of format() with writef() in SSCA2 benchmark (see examples/benchmarks/ssca2/)
  • made the fileIO primer more tolerant of floating point roundoff (see examples/primers/fileIO.chpl)
  • made the FFTW primer self-validating w.r.t. numerical differences (see examples/primers/FFTWlib.chpl)
  • removed 'param' from lulesh loops that probably don't want/need it (see examples/benchmarks/lulesh/)
  • Compiler Flags (see 'man chpl' for details):
  • redefined --fast to no longer imply --no-ieee-float
  • added --[no-]ieee-float support for CHPL_TARGET_COMPILER 'clang' and 'intel'
  • made --ccflags arguments stack rather than override one another
  • added support for --print-emitted-code-size for the LLVM back-end
  • Execution Flags:
  • added a --memLeaksByDesc flag to track only certain memory categories
  • made --memLeaks[ByDesc] be governed by the --memTreshold flag
  • Error Message Improvements:
  • improved how internal error messages are displayed to users
  • improved error messages for runaway comments
  • improved source location provided by 'noinit' warnings
  • Bug Fixes:
  • forall loops over a single array now correctly use the standalone iterator
  • fixed bugs with applying reduce intents to forall loops over domains/arrays
  • fixed bugs with scope resolution's choice of which symbol to resolve to
  • fixed a bug in which overloads of '|' broke internal modules
  • fixed a bug related to extern variables of types like c_ptr(c_int))
  • fixed an internal error when a class calls its parent class's destructor
  • fixed a bug in which large array copies could overflow runtime arguments
  • fixed a bug in which calls of the form '(x)' would cause internal errors
  • fixed a bug in I/O when skipping whitespace encountered illegal characters
  • fixed printing/reading of integers with '%{##.##}' format
  • made readf() calls without error arguments halt on mismatches
  • fixed a bug in which trailing whitespace was being consumed too aggressively
  • made default rectangular arrays print in JSON as arrays-of-arrays
  • fixed EOF-related bugs in Reader/Writer
  • fixed a bug in which channel.read(style) was ignoring its style argument
  • fixed a bug in which non-blocking 'on's were counted as local running tasks
  • fixed a compiler exception caused by dividing by param '0'
  • fixed a bug in the is*() FileSystem functions when given an invalid path/link
  • improved chpldoc's handling of failure to create output and tmp directories
  • added an error message for too-long compiler flags rather than truncating
  • fixed a bug in which calls to malloc/free/etc in extern blocks caused errors
  • fixed 'text file busy' errors in certain situations when invoking 'chpl'
  • fixed a bug in which overloading was being permitted based on argument intents
  • fixed a segfault in the glob() iterator when following 0..0 with 0 matches
  • fixed a bug in which bad source location info was passed to string routines
  • preserved source location information for cobegins
  • fixed a bug relating to inlined iterators and generic array fields
  • fixed a bug relating to passing c_strings to extern C functions
  • Platform-specific Changes:
  • made 'cray-x*' systems default to 'qthreads' over 'muxed'
  • 'muxed' tasking now supports stack guard pages for non-hugepage heaps (see http://chapel.cray.com/docs/1.12/platforms/cray.html)
  • added support for 'clang-included' to work with GASNet on Cray systems
  • removed support for cray-prgenv-pgi from the module build on 'cray-x*'
  • for cray-prgenv-cray compilations, stopped throwing -hipa2 by default
  • Platform-specific bug fixes:
  • fixed a stack underflow problem with 'muxed' tasking causing segfaults
  • fixed a race in stack management for 'muxed' tasking
  • Portability Improvements:
  • eliminated warnings related to [_BSD|_SVID]_SOURCE being deprecated
  • improved portability of building the SysCTypes.chpl for Fedora 22
  • removed symmetric address assumptions from error-handling code in the runtime
  • fixed a number of I/O portability errors on cygwin
  • fixed tcmalloc when compiled with clang 3.6 and used from C++
  • fixed I/O for 32-bit Ubuntu 14.04
  • added support for building GASNet with segment=fast on OS X
  • fixed hwloc's cairo detection for certain OS X installations
  • eliminated some Xcode-specific warnings
  • Third-Party Software Changes:
  • added 'fltk' to the third-party directory for use by 'chplvis'
  • enabled the use of GMP with the LLVM back-end
  • made LLVM build in non-debug mode and without asserts by default
  • improved cross-compilation of third-party packages for 'cray-x*' platforms
  • we're now storing RE2 in an unpacked form due to all of our local changes
  • fixed a valgrind issue in RE2
  • Launcher-specific Changes:
  • improved 'slurm' launcher's handling of non-zero exit() codes
  • changed how the 'amudprun' launcher deals with quoted arguments
  • Runtime Library Changes:
  • added support for out-of-segment put()/get() calls
  • changed I/O to allocate buffer space out of the Chapel heap
  • Testing System:
  • rewrote 'start_test' and 'computePerfStats' in python
  • replaced --suppress feature with .suppressif files
  • added ability to write chpldoc tests using the .doc.chpl extension
  • updated testing system to support testing of 'chpl-ipe'
  • made the parallel testing system print an estimated end time
  • added support for a -valgrindexe flag to 'paratest.server'
  • made 'start_test' work when it's located outside of $CHPL_HOME/util
  • added the ability to have multi-line COMPOPTS file
  • improved support for #defines with quotes for C testing
  • made C testing system more accepting of C compilers that print filenames
  • specialized testing system to recognize some common launcher errors
  • improved ability to use chpl_launchcmd.py from NFS-mounted Lustre filesystems
  • extended timeout mechanism to work under Cygwin
  • Makefile Changes:
  • rewrote 'make check' to remove reliance on start_test/tcsh/python
  • Performance Testing/Graphing System:
  • added a 'screenshot' capability for performance graphs
  • added the ability to annotate cray-xc performance graphs
  • retired the old gnuplot-based graphing system
  • reduced graphing system's reliance on CHPL_HOME being set
  • improved graphing system's stability when there is no ANNOTATIONS.yaml file
  • Developer-oriented changes: Process Improvements:
  • began using Jira for issue tracking
  • Developer-oriented changes: Documentation Improvements:
  • added notes about testing nightly scripts to util/cron/README
  • Developer-oriented changes: Compiler Flags:
  • added a --break-on-resolve-id flag for stopping when calling a function
  • Developer-oriented changes: Module improvements:
  • cleaned up how filename/line# information is attached to network atomics
  • added support for casting directly to c_strings
  • started using specific I/O read/write functions for int/real/imag types
  • cleaned up handling of bool values in IO.chpl
  • made initOnLocales() a standalone parallel iterator and added 'chpl_' prefix
  • Developer-oriented changes: Makefile improvements:
  • added a top-level Makefile rule for building the parser
  • Developer-oriented changes: Compiler improvements/changes:
  • rewrote the compiler passes that widen references as necessary
  • rewrote major portions of the scope resolution pass
  • reduced reliance on homegrown ADTs with their STL equivalents
  • improved the sharing of flags between 'chpl' and 'chpldoc'
  • turned off sugaring of type names in --devel mode
  • internal improvements to how tuples are handled
  • removed unused flag FLAG_NO_USE_CHAPELSTANDARD
  • renamed FLAG_PRIVATE to FLAG_LOCALE_PRIVATE for clarity
  • retired the "auto destroy fn" pragma
  • added tracking of zippered loops throughout compilation
  • ensured the lexer returns a heap-allocated const charfor each literal
  • Developer-oriented changes: Runtime improvements:
  • added support for task callbacks in the runtime
  • eliminated reliance on __always_inline
  • added chpl_mem_goodAllocSize() to runtime to support minimizing wasted memory
  • added the ability to flag certain memory types to avoid tracking them
  • added a capability to generate a header file #defining CHPL_variables
  • turned off remote caching for tasking layers where migration can occur
  • Developer-oriented changes: Third-party improvements:
  • cleaned up local modifications to Qthreads for contribution back to master
  • updated third-party GMP/RE2 READMEs to refer to online module documentation

New in Chapel 1.11.0 (Apr 3, 2015)

  • HIGHLIGHTS:
  • revamped 'chpldoc' and used it to create web docs for all standard modules
  • (see http://chapel.cray.com/docs/latest/)
  • added a new FileSystem standard module supporting operations on files/dirs
  • (see http://chapel.cray.com/docs/latest/modules/standard/FileSystem.html)
  • added a new FFTW standard module supporting key FFTW routines
  • (see http://chapel.cray.com/docs/latest/modules/standard/FFTW.html)
  • added task intents to forall loops, plus new intents such as 'in' and 'reduce'
  • (see 'Semantic Changes' and 'New Features' sections below)
  • added support for standalone parallel iterators, used by non-zippered foralls
  • (see examples/primers/parIters.chpl)
  • added support for vectorization of data parallel loops and operations
  • (see '--vectorize' flag in 'man chpl')
  • optimized away communication code for module-scope variables and local arrays
  • (see release note slides at http://chapel.cray.com/download.html#releaseNotes)
  • added an early prototype interactive/interpreted mode for writing Chapel code
  • (see doc/technotes/README.chpl-ipe.rst for more details)
  • initial support for Python->Chapel interoperability via PyChapel
  • (see http://pychapel.readthedocs.org/ for more details)
  • made 'ugni'/'muxed' the default comm/tasking choices for cray-xmodule users
  • (see doc/platforms/README.cray and doc/README.chplenv)
  • added a new 'chpltags' utility to generate emacs/vim tags for Chapel code
  • (see 'util/chpltags --help' and 'util/README')
  • numerous other improvements for better performance and cleaner generated code
  • (see 'Performance Improvements' section below)
  • improved portability to NetBSD and additional flavors of Linux
  • (see 'Portability Improvements' section below)
  • upgraded the bundled versions of GASNet, hwloc, llvm, and dygraphs
  • (see 'Third-Party Software Changes' section below)
  • numerous bug fixes
  • (see 'Bug Fixes' section below)
  • ENVIRONMENT/CONFIGURATION CHANGES:
  • made the setchplenv.scripts prepend to PATH and MANPATH rather than append
  • made the "quickstart" scripts set CHPL_COMM to 'none' and not set CHPL_MEM
  • improved the logic for auto-detecting when CHPL_ATOMICS should be 'intrinsics'
  • added auto-detection of CHPL_*_PLATFORM for 'cray-xc'/'cray-xe' systems
  • added support for building runtime/third-party with the bundled clang version
  • (see references to 'clang-included' in README.chplenv)
  • split the 'cygwin' CHPL_*_PLATFORM value into 'cygwin32' and 'cygwin64'
  • added new 'netbsd32' and 'netbsd64' values for CHPL_*_PLATFORM
  • changed CHPL_COMM/TASKS to default to ugni/muxed when using the cray-xmodule
  • (see doc/README.chplenv, doc/platforms/README.cray, and/or doc/README.tasks)
  • made CHPL_TASKS default to 'fifo' for 'cray-prgenv-cray' CHPL_TARGET_COMPILER
  • PACKAGING CHANGES:
  • updated Makefiles to support building Chapel in parallel via 'make -j'
  • avoid rebuilding gmp and re2 speculatively when previous builds have failed
  • TOOL CHANGES:
  • added an early prototype interactive/interpreted mode for writing Chapel code
  • (see doc/technotes/README.chpl-ipe.rst for more details)
  • revamped 'chpldoc' to create HTML files via Sphinx for documenting Chapel code
  • (see doc/technotes/README.chpldoc.rst and 'man chpldoc' for more details)
  • added a new 'chpltags' utility to generate emacs/vim tags for Chapel code
  • (see 'util/chpltags --help' and 'util/README' for more information)
  • SYNTACTIC/NAMING CHANGES:
  • removed the placeholder keyword 'refvar' in favor of the new keyword 'ref'
  • removed support for the use of 'var' as a return intent (use 'ref' instead)
  • SEMANTIC CHANGES / CHANGES TO CHAPEL LANGUAGE:
  • added support for task intent clauses and semantics to forall loops
  • (see 'Data Parallelism: Forall Intents' in the language specification)
  • added initial support for 'reduce' intents on forall loops
  • (see doc/technotes/README.reduceIntents)
  • removed the 'type select x' syntax in favor of simply using 'select x.type'
  • made read()s of sync/single variables result in a compiler error
  • NEW FEATURES:
  • added "blank", 'const', 'in', 'const in' and 'const ref' task intents
  • (see 'Task Parallelism: Task Intents' in the language specification)
  • added "standalone parallel iterators", used by non-zippered forall loops
  • (see examples/primers/parIters.chpl)
  • added support for aliasing of domains via the '=>' operator
  • NEW INTEROPERABILITY FEATURES:
  • inital support for Python->Chapel interoperability via PyChapel
  • (see http://pychapel.readthedocs.org/ for more details)
  • added a prototype capability to embed external dependences to source via 'use'
  • (e.g., use "foo.h", "-lfoo"; is like adding these to the 'chpl' command-line)
  • added support for passing multidimensional arrays to external routines
  • (see doc/technotes/README.extern)
  • added munging of all user identifiers by default to avoid naming conflicts
  • (see --[no-]munge-user-idents in 'man chpl' and doc/README.executing)
  • added an error when passing Chapel strings to C routines; use c_string instead
  • STANDARD LIBRARY/MODULES:
  • added a new module, FileSystem, containing numerous file system operations
  • (see http://chapel.cray.com/docs/latest/modules/standard/FileSystem.html)
  • added support for key 64-bit FFTW routines (single- and multi-threaded)
  • (see http://chapel.cray.com/docs/latest/modules/standard/FFTW.html and
  • http://chapel.cray.com/docs/latest/modules/standard/FFTW_MT.html)
  • added parity() and rotate() operations to the BitOps module
  • (see http://chapel.cray.com/docs/latest/modules/standard/BitOps.html)
  • added parallel versions of the glob(), walkdirs(), and findfiles() iterators
  • (see http://chapel.cray.com/docs/latest/modules/standard/FileSystem.html)
  • started a new module, Path, supporting realPath(), curDir, parentDir, pathSep
  • (see http://chapel.cray.com/docs/latest/modules/standard/Path.html)
  • added a new module, Assert, defining a simple assertion capability
  • (see http://chapel.cray.com/docs/latest/modules/standard/Assert.html)
  • added support for C types c_ptrdiff, c_uintptr, and c_intptr to SysCTypes.chpl
  • (see http://chapel.cray.com/docs/latest/modules/standard/gen/doc/SysCTypes.html)
  • changed cwd() and chdir() from standalone functions to locale methods
  • (see http://chapel.cray.com/docs/latest/modules/standard/FileSystem.html)
  • made mkdir(parents=true) behave more like 'mkdir -p'
  • added a .safeCast() method to integer types to value-check downcasts
  • (see http://chapel.cray.com/docs/latest/modules/standard/Types.html)
  • changed min(t) and max(t) to return 'param' values for integral types 't'
  • (see http://chapel.cray.com/docs/latest/modules/standard/Types.html)
  • parameterized RandomStream by an 'eltType' and updated its methods accordingly
  • (see http://chapel.cray.com/docs/latest/modules/standard/Random.html)
  • removed the parSafe arguments from RandomStream's methods in the Random module
  • (see http://chapel.cray.com/docs/latest/modules/standard/Random.html)
  • added support for escaping pattern-style format strings using %{}
  • (e.g., "writef("#%{##}", 10)" => "#10")
  • added support for readf()/writef() of octal values
  • changed 'BigInt' methods to use Chapel types rather than C types
  • folded the prototypical 'Filerator' module into the new 'FileSystem' module
  • retired the 'Containers' module in favor of vector operations on arrays
  • (see examples/primers/arrayVectorOps.chpl)
  • PERFORMANCE IMPROVEMENTS:
  • added support for vectorization of data parallel loops and operations
  • (see '--vectorize' flag in 'man chpl')
  • optimized away the creation of anonymous ranges in loops
  • (e.g., 'for i in 1..10' no longer creates an anonymous range object for 1..10)
  • optimized away communication code for module-scope variables and local arrays
  • optimized iterations over ranges in data parallel constructs like 'forall'
  • added standalone parallel iterators for ranges and default domain maps
  • extended loop-invariant code motion to include certain global variables
  • added an 'assertNoSlicing' config that can be used to optimize array accesses
  • (see $CHPL_HOME/PERFORMANCE)
  • avoided creating new singleton tasks within serial execution contexts
  • MEMORY IMPROVEMENTS:
  • reduced memory leaks due to compilerWarning()s and runtime string arguments
  • distinguished between "owned" and "unowned" c_strings in implementation
  • improved the handling of strings across multiple locales
  • LAUNCHER-SPECIFIC CHANGES:
  • in the 'pbs-aprun' launcher, removed reliance on the mppoptions
  • added a --nodelist option to the 'slurm-srun' launcher
  • in the 'slurm-srun' launcher, stopped using expect scripts
  • PLATFORM-SPECIFIC CHANGES:
  • fixed an issue in which Qthreads would not handle sleep() correctly for darwin
  • added a micro-sleep when yielding threads on Cygwin to improve throughput
  • changed CHPL_COMM/TASKS to default to ugni/muxed when using the cray-xmodule
  • (see doc/README.chplenv, doc/platforms/README.cray, and/or doc/README.tasks)
  • enabled 'ugni' tasking to be usable with 'qthreads' as well as 'muxed'
  • reduced default heap size used for CHPL_COMM='ugni' to 2/3 free node memory
  • (see doc/platforms/README.cray)
  • changed 'muxed' tasking to use # of threads equal to the # of CPUs by default
  • (see doc/platforms/README.cray)
  • disabled optimizations by default for cray-prgenv-cray compilations
  • split the 'cygwin' platform value into 'cygwin32' and 'cygwin64'
  • split the 'netbsd' platform value into 'netbsd32' and 'netbsd64'
  • made CHPL_TASKS default to 'fifo' for 'cray-prgenv-cray' CHPL_TARGET_COMPILER
  • PORTABILITY IMPROVEMENTS:
  • fixed several portability issues on NetBSD platforms
  • fixed the use of the --llvm flag on Mac OS X ('darwin') platforms
  • fixed some portability issues with the use of hwloc and -lnuma for 'qthreads'
  • fixed some static/dynamic linking issues with certain platforms/compilers
  • fixed a gmp build issue for 32-bit platforms
  • THIRD-PARTY SOFTWARE CHANGES:
  • updated the bundled version of GASNet to 1.24.0
  • updated the bundled version of hwloc to 1.10.1
  • updated the bundled version of llvm to 3.6.0
  • upgraded the bundled version of dygraphs to version 1.1.0
  • added support for dynamically installing Python packages required by 'chpldoc'
  • (see 'chpldov-venv' in third-party/README)
  • rearchitected scripting framework for third-party dependences
  • made the re2 build do a better job of propagating errors back to the Makefiles
  • changed Qthreads to avoid using guard pages when mprotect() won't work
  • fixed a bug in limiting the maximum size of Qthreads memory pools
  • DOCUMENTATION:
  • added web-based docs for all standard modules and removed from spec/READMEs
  • (see http://chapel.cray.com/docs/latest/)
  • made some minor improvements to the Quick Reference document
  • added documentation for class and record destructors to the spec
  • removed an outdated distinction between function calls using () vs. [] in spec
  • clarified that integer literals may be 'int' or 'uint' in the spec
  • added a note for 'zsh' users to the top-level README
  • added a note to CONTRIBUTORS noting mis-attributed code authors within GitHub
  • improved the documentation of the slurmlaunchers
  • (see doc/README.launcher, doc/platforms/README.cray)
  • added a note about ugni memory registration and concurrency with slurm
  • (see doc/platforms/README.cray)
  • added a note about a longstanding undocumented feature to squash ref counting
  • (see $CHPL_HOME/PERFORMANCE)
  • EXAMPLE CODES:
  • added a new primer example demonstrating use of the FFTW module
  • (see examples/primers/FFTWlib.chpl)
  • added standalone parallel iterators to the leader-follower primer and renamed
  • (see examples/primers/parIters.chpl)
  • updated and renamed the chpldoc primer example to reflect chpldoc's changes
  • (see examples/primers/chpldoc.doc.chpl)
  • updated the random numbers primer to reflect changes to the interface
  • (see examples/primers/randomNumbers.chpl)
  • fixed a bug in our lulesh implementation when using the 3D representation
  • updated miniMD's Stencil distribution to track changes in BlockDist
  • changed miniMD to work around a bug in passing remote records by blank intent
  • updated the HPCC FFT example to use new BitOps
  • updated SSCA2 to reflect new intent semantics for forall-loops
  • updated the regexdna shootout to accept extra arguments as used by framework
  • made stream and ra save their problem sizes when performance testing
  • replaced the use of format() in example codes with writef()
  • COMPILER FLAGS (SEE 'MAN CHPL' FOR DETAILS):
  • added --[no-]use-noinit to permit 'noinit' to be ignored
  • added support for setting --fast via environment variable CHPL_FAST
  • added --[no-]ignore-classes to disable local class optimizations
  • added --[no-]vectorize to enable/disable generation of vectorization hints
  • added --[no-]cast-checks to enable/disable value checking in safeCast methods
  • added --[no-]munge-user-idents to control munging of generated identifiers
  • removed all documentation-related options; use 'chpldoc' instead
  • added a flag --[no-]task-tracking to enable/disable runtime task tracking
  • NEW SEMANTIC CHECKS (FOR OLD SEMANTICS):
  • Improved 'const' checking for array/tuple fields and array/domain aliases
  • ERROR MESSAGE IMPROVEMENTS:
  • added an error when compiling for a configuration whose runtime is not built
  • improved error messages for several range overflow conditions
  • BUG FIXES:
  • fixed a bug with dynamically dispatched iterators
  • fixed a bug with parallel iteration over non-naturally-aligned ranges
  • fixed a bug in which record variables did not call user-defined constructors
  • fixed a bug in which arrays of associative domains could cause a segfault
  • fixed a bug in which user identifiers could easily conflict with C identifiers
  • fixed a bug with formatted writes of integers using "###."
  • fixed an infinite loop in binary reads of strings when EOF is reached
  • fixed a bug preventing sparse domains from having 'uint' indices
  • fixed a bug when casting param 'int(64)' and 'uint(?)' to 'c_string'
  • fixed a bug in which secondary parentheses-less methods did not work well
  • fixed a buffer overrun issue in certain I/O routines
  • fixed a bug in which defining multiple destructors caused a segfault
  • fixed some bugs in the standard Buffers module
  • fixed a bug in which filenames generated by --cpp-lines would get corrupted
  • fixed a bug in --cache-remote for 32-bit platforms
  • fixed a bug with loop invariant code motion in the context of nested functions
  • fixed a crash when using multiple formal type queries for primitives types
  • fixed a bug in which iterators yielding locale types caused an internal error
  • fixed a bug in which --no-remove-copy-calls would break certain extern records
  • fixed a bug in the parser causing issues with &&= and ||= for --baseline
  • fixed a bug in which developer pragmas were only attached to the first symbol
  • PLATFORM-SPECIFIC BUG FIXES:
  • fixed a bug in which I/O errors would print "unknown" for paths for 'cygwin'
  • fixed a warning in our calls to glob() when compiling with 'prgenv-cray'
  • fixed an issue in which generated identifiers could be too long for 'pgi'
  • fixed a bug in which 'gmp' would not build cleanly for 32-bit Ubuntu systems
  • fixed a bug in atomic operations on 'real' types for CHPL_COMM='ugni'
  • RUNTIME LIBRARY CHANGES:
  • enabled 'ugni' tasking to be usable with 'qthreads' as well as 'muxed'
  • changed Qthreads to yield after uncontested sync var locks to avoid starvation
  • COMPILER PERFORMANCE:
  • accelerated compilation times by disabling the task table by default
  • (see '--[no-]task-tracking' on the 'chpl' man page and doc/README.executing)
  • TESTING SYSTEM:
  • added support for specifying 'skipif' files as executable scripts
  • added a mode in which only futures with .skipif files are tested
  • check for .skipif conditions before wasting any effort on a test
  • switched to a consistent and simpler naming scheme for test configurations
  • added timing measurements to the log for various aspects of testing
  • revamped emails sent by testing scripts for maintainability and spam avoidance
  • made the test system less sensitive to line/versions #s in .bad comparisons
  • added a --test-root flag, improving start_test when run from outside CHPL_HOME
  • fixed a bug in which '-nl' was passed to C tests for multilocale testing
  • added support for jUnit XML-style report generation to start_test and paratest
  • made paratest.server's compopts/execopts accumulate rather than overwrite
  • added CHPL_TEST_UNIQUIFY_EXE to support simultaneous test runs on a directory
  • added the ability to set the default testing timeout via CHPL_TEST_TIMEOUT
  • added support for CHPL_TEST_NUM_TRIALS to be set by a user's environment
  • squashed duplicate error messages due to sub_test failures
  • fixed a bug with stdin redirects for tests with multiple .execopts
  • made start_test smarter about stdin and launchers for multilocale testing
  • improved the testing system's handling of timeouts when launchers are used
  • added validation for CHPL_NIGHTLY_LOGDIR in nightly testing
  • fixed a bug for tests with multiple execopts settings that timed out
  • permitted suppression files to contain blank lines
  • fix bug in which suppression-based issues only appeared in the test summary
  • fixed a bad interaction between env. vars. set in sub_test vs. execenv files
  • made sub_test ignore OS errors during unlinking to quiet false negatives
  • PERFORMANCE TESTING/GRAPHING SYSTEM:
  • allow scrolling of the list of graphs independently from graphs themselves
  • embed more information in the URL of performance graphs for sharing purposes
  • improved the portability of URLs from the performance graphing system
  • added support for 'today' as a date in the perf graph system's URL encodings
  • accelerated graphs by moving sorting of graphs' legends into genGraphs script
  • track top processes between performance runs to look for causes of noise
  • improved support for comparing multiple performance testing configurations
  • started logging the sha values for performance runs, for historical reference
  • changed performance graphs to use json rather than csv
  • automatically strip punctuation characters from the end of graph keys
  • DEVELOPER-ORIENTED CHANGES - UTILITY CHANGES:
  • added a new compiler gdb command 'locid' which prints an AST's source location
  • made build_configs.py support parallel execution
  • DEVELOPER-ORIENTED CHANGES - COMPILER FLAGS:
  • added --report-order-independent-loops to note loops with vectorization hints
  • added --remove-unreachable-blocks to attempt early removal of dead code
  • fixed a code pointer in the --help message for --log
  • DEVELOPER-ORIENTED CHANGES - MODULE IMPROVEMENTS:
  • added a pragma for asserting that a class field is local to the object
  • moved routines in support of iterators to a new module ChapelIteratorSupport
  • split _build_range() into several routines with better names
  • refactored overloads of range operator definitions
  • changed Filerator routines to use new isLink(), isDir(), and isFile() routines
  • removed requirement to add 'no ChapelStandard' pragma to internal modules
  • DEVELOPER-ORIENTED CHANGES - MAKEFILE IMPROVEMENTS:
  • added a "WARNINGS" macro that can be used to turn on C-level warnings
  • moved check for standard C headers into the post-commit smoke test
  • simplified and regularized third-party Makefiles
  • DEVELOPER-ORIENTED CHANGES - COMPILER IMPROVEMENTS/CHANGES:
  • changed the parser to a "pure push" style of parser
  • changed the compiler to require bison 2.5 (or later)
  • dramatically reworked representation and manipulation of loop AST nodes
  • made more AST members private and increased the use of query methods
  • added a new, prototype AST pretty-printer for Chapel-oriented output
  • made improvements to list_view()
  • made flags on a symbol print in a deterministic order
  • extended DeadCodeElimination to reclaim degenerate C for loops
  • made 'narrowWideReferences' its own compiler pass and refactor it
  • moved the 'docs' pass earlier in compilation
  • reorder localCopyPropagation to avoid a ref-before-def bug
  • improved verification of expressions to check correctness of AList links
  • fixed a bug in which failed chpl__tryToken resolutions could roll back too far
  • removed flags: FLAG_LABEL_BREAK, FLAG_LABEL_CONTINUE, FLAG_USER_NAMED
  • distinguished FLAG_WIDE from FLAG_WIDE_REF
  • deprecated the use of the MOD_MAIN tag
  • simplified code related to calling user-defined constructors vs. _defaultOf
  • converted the collapsing of nested BlockStmts to use a visitor
  • added a predicate to determine if an expression is a "statement expression"
  • converted some uses of C arrays to std::vector in compiler
  • added binary operators to the BitVec implementation
  • replaced the basic block macros with private static functions
  • fixed a bug in basic block analysis
  • moved the handling of boolean short-circuiting from 'parse' to 'normalize'
  • renamed 'by' operators in the compiler's IR to avoid naming conflicts
  • refactored fix_def_expr() in the normalize pass
  • refactored constant folding vs. dead code elimination for CondStmts
  • fixed several code issues identified by coverity scan
  • many other code refactorings and improvements
  • DEVELOPER-ORIENTED CHANGES - RUNTIME IMPROVEMENTS:
  • simplified interactions between locale models and the runtime
  • improved the non-blocking communication interface
  • added support for the main process to run Chapel tasks
  • guarded against some src==dst calls to memcpy()
  • for optimized builds of the runtime, set NDEBUG to turn off assertions
  • fixed several code issues identified by coverity scan
  • DEVELOPER-ORIENTED CHANGES: GENERATED CODE IMPROVEMENTS:
  • improved the spacing when printing IDs via --gen-ids

New in Chapel 1.10.0 (Oct 3, 2014)

  • The runtime tasking layer has switched to the lighter-weight Qthreads-based implementation by default, resulting in performance improvements for most computations. This release also includes initial support for Intel Xeon Phi Knights Corner (KNC) processors using the 'fifo' tasking layer.
  • New capabilities on arrays and domains include: support for set-based operations on associative domains and arrays; draft support for vector methods on 1D arrays that have their own individual domain; the ability to query distributed arrays to determine the subdomain that a given locale owns; and the ability to pass contiguous Chapel arrays to external procedures.
  • The standard library has been expanded to support library routines for bit operations, utility functions for files and directories, and prefetch; regular expression and multiple precision arithmetic support has also been enabled when using a back-end C compiler that supports re2 and GMP, respectively.
  • The compiler has been improved to implement better const-ness checking, to fix the semantics for passing sync/single variables to generic arguments, and to improve the support for constructor calls. More generally, the release includes improvements to performance, the quality of the generated code, error messages, and numerous bug fixes.
  • The example code section has been expanded to include new primer examples for associative domains and arrays, for vector operations, and for random numbers; in addition, two new Computer Language Benchmark Game computations have been added, and several others have been improved.
  • The auxiliary file system features now include web requests with libcurl and Lustre, in addition to better integration of HDFS.
  • This release of Chapel contains stable support for the base language, and for task and regular data parallelism using one or more locales. Data parallel operations on irregular domains and arrays are currently supported in a single-locale implementation. While performance has received a great deal of attention in Chapel's design and is generally improving from release-to-release, this release is lacking a number of crucial performance optimizations. See $CHPL_HOME/PERFORMANCE for additional notes on Chapel performance.

New in Chapel 1.9.0 (Apr 18, 2014)

  • Highlights:
  • Improved operator precedence for bitwise operators, '..', and 'in'
  • Added the ability for users to overload assignment operators
  • Intrinsic atomic variable support for Cray and Intel compilers
  • Significant performance improvements and reductions in compiler-introduced memory leaks
  • Several new versions of the Computer Language Benchmark Games in the examples/ directory
  • An improved default nested parallelism policy w.r.t. the dataParIgnoreRunningTasks flag
  • Significant improvements to the LLVM back-end
  • Improved symmetry of program startup and execution across the locales a program is running on
  • A new 'make check' rule to the top-level Makefile that can be used to validate a build
  • Significant improvements to the testing system, particularly for performance testing
  • And numerous bug fixes

New in Chapel 1.8.0 (Oct 19, 2013)

  • Highlights:
  • added initial support for user-defined locale models and a NUMA locale model
  • added initial support for accessing HDFS file systems via files/channels
  • improved tasking semantics w.r.t. references to variables from outer scopes
  • added new example codes for MiniMD and the Computer Language Benchmark Game
  • performance optimizations related to array base pointers, loop-invariant code
  • removed a number of compiler-generated memory leaks
  • added new types for interoperating with C: c_string, c_ptr(type), c_void_ptr
  • improved support for small-int computations, ranges, domains, and arrays
  • support for dygraph-based performance monitoring in the testing system
  • updates to the GASNet, Qthreads, MassiveThreads, LLVM, and CLANG packages
  • added a new 'cray-cs' platform to represent Cray Cluster Supercomputers
  • made 'gemini' the default GASNet conduit for 'cray-xe' and 'cray-xk'
  • added support for a SLURM + GASNet-over-Infiniband launcher
  • New Features:
  • added initial support for specifying locale models ('hierarchical locales')
  • (see doc/technotes/README.localeModels)
  • added support for a prototype NUMA locale model
  • (see doc/technotes/README.localeModels)
  • added initial support for accessing HDFS file systems via files/channels
  • (see doc/technotes/README.hdfs)
  • added new 'const in' and 'const ref' argument intents
  • (see the 'Argument Intents' section in the language specification)
  • added built-in config params for all CHPL_* environment settings
  • Semantic Changes / Changes to Chapel Language:
  • improved tasking semantics w.r.t. references to variables from outer scopes
  • (e.g., in 'var x=0; begin { ...x... }', 'x' is a const copy within the task)
  • (see 'Task Intents' section in the language specification)
  • added 'ref' clauses to obtain the previous reference tasking semantics
  • (e.g., 'var x: int; begin ref(x) { ...x... }' causes '...x...' to refer to x)
  • (see 'Task Intents' section in the language specification)
  • made blank intents for atomic variables get interpreted as 'ref'
  • (see the 'Argument Intents' section in the language specification)
  • added support for ranges, domains/arrays with small-int index types
  • (e.g., 'range(int(8))' is now a supported type)
  • added operator support for pairs of small int/uint types
  • (e.g., 'int(8) + int(8)' now generates an int(8) rather than int(32))
  • added operator support for homogenous tuple/scalar pairs
  • (e.g., (1,2,3) + 1 => (2,3,4))
  • extended the member() method on domains to support varargs as well as tuples
  • (e.g., 'var D = {1..n, 1..n};' supports 'D.member(i,j)' and 'D.member((i,j))')
  • the compiler now only creates '==' operators for matching record types
  • made 'bool' types prefer dispatching to 'int' args over smaller-int options
  • (e.g., foo(true) will prefer to dispatch to foo(x:int) over foo(x:int(8)))
  • New Interoperability Features:
  • added support for 'c_ptr(type)' and 'c_void_ptr' to refer to local C pointers
  • (see doc/technotes/README.extern)
  • added support for a 'c_string' type to refer to local C char* pointers
  • (see doc/technotes/README.extern)
  • Deprecated Features:
  • removed experimental GPU work to prepare for a revised approach to GPU support
  • removed the callStackSize() query from the locale type
  • removed certain config consts to control runtime arguments
  • (see "Flags on Generated Executables" section below)
  • Standard Modules:
  • added a new 'UtilReplicatedVar.chpl' standard module for replicated variables
  • new 'HDFSiterator' and 'RecordParser' modules to help with parsing HDFS files
  • Documentation:
  • added a new README to describe the new locale model concept and NUMA model
  • (see doc/technotes/README.localeModels)
  • added a new README.hdfs file to describe HDFS file system access in Chapel
  • (see doc/technotes/README.hdfs)
  • made significant improvements to the README.cray file
  • (see doc/platforms/README.cray)
  • refreshed the 'chpl' man page, particularly the SYNOPSIS/ENVIRONMENT sections
  • refreshed the Chapel Quick Reference document
  • major updates to the 'Task Parallelism' section of the spec for task intents
  • made minor updates to several chapters in the language specification
  • updated README.chplenv to reflect new CHPL_* environment variables
  • minor updates to various README files
  • Example Codes:
  • added an initial port of the Mantevo MiniMD miniapp to Chapel
  • (see examples/benchmarks/miniMD)
  • added Chapel ports of four codes from the Computer Language Benchmark Game
  • (see examples/benchmarks/shootout)
  • fixed a bug in the atomics.chpl primer example
  • cleaned up the beer.chpl example
  • Cray-specific Notes:
  • added a new 'cray-cs' platform to represent Cray Cluster Supercomputers (CS)
  • (see doc/platforms/README.cray for more information)
  • made 'gasnet' the default CHPL_COMM setting for all Cray platforms
  • made 'gemini' the default GASNet conduit for 'cray-xe' and 'cray-xk' platforms
  • (see doc/platforms/README.cray)
  • added support for the GASNet 'aries' conduit for the 'cray-xc' platform
  • (see doc/platforms/README.cray)
  • made 'aprun' the default launcher for 'cray-x*' systems when available
  • removed support for the 'xmt', 'x1', and 'x2' platforms and related features
  • generated warning messages on cray-x* systems when no PrgEnv is loaded
  • removed -target=linux flag from cray-prgenv-* compiler options
  • Launcher-specific Notes:
  • added support for a SLURM + GASNet-over-Infiniband launcher
  • (see 'slurm-gasnetrun_ibv' in doc/README.launcher)
  • made the aprun-based launchers use the system's default number of CPUs
  • brought the pbs launchers up-to-date with the current NCCS wrapper of qsub
  • Portability of code base:
  • worked around a PGI portability issue with C structs in the generated code
  • improved const checking for actuals passed to out/inout/const ref/ref intents
  • improved error messages for programs with bad type resolution cycles
  • added a warning for while loops over constants
  • errors for assignments to non-lvalues no longer halt compilation immediately
  • Performance Improvements:
  • improved performance of local arrays by storing a shifted base pointer
  • added a loop-invariant code motion optimization
  • passed more things by value ('this', array/domain/domain map wrappers)
  • made some improvements to the bulk copy optimization
  • Memory Leak Improvements:
  • reduced memory leaked by strings by sharing them more aggressively
  • improved support for destroying more automatic variables as they leave scope
  • fixed a memory leak relating to inlining of iterators
  • plugged memory leaks related to file types
  • freed temporary buffers used for formatted I/O on complex values
  • Bug Fixes / New Semantic Checks (for old semantics):
  • fixed bugs in extern blocks containing #define's
  • fixed a bug when reading string literals that began with whitespace
  • fixed a bug in which whitespace was written to binary files for array output
  • fixed bugs related to writef() for complex values
  • fixed size mismatches in IO code for 32-bit linux systems
  • fixed a bug in the compareExchange implementation for atomic reals
  • fixed bugs in Regexp convenience functions and the naming of string.split()
  • fixed some bugs in BigInt functions in the GMP module
  • fixed a bug in which AdvancedIterators would serialize if #chunks < #tasks
  • fixed a bug related to 'ref' intents and the fast segment for GASNet
  • fixed a bug related to using --make on the chpl command line
  • bug fix for lost updates to fields of 'this' in certain scenarios
  • fixed dead code elimination for blocks that are their own sole in-arc
  • Third-Party Software Changes:
  • updated to GASNet version 1.20.2 which improves the Cray native conduits
  • updated to Qthreads version 1.10 and turned on support for stack overflow
  • (see reference to QT_GUARD_PAGES in doc/README.tasks for more information)
  • updated to MassiveThreads version 0.95 with support for task-private data
  • updated the LLVM back-end to use version 3.3 and packaged it with the release
  • packaged CLANG 3.3 with the release rather than requiring a separate download
  • Runtime Library Changes:
  • made several interface changes to support locale models/hierarchical locales
  • Generated Code Cleanups:
  • declared non-exported symbols 'static' in generated code
  • added support for targeting 'op=' operators in the back-end
  • removed chains of unnecessary autocopy/autodestroy calls
  • Compiler Performance:
  • disabled compiler internal verification by default to improve compile time
  • LLVM Back-end Changes:
  • added wide pointer support for the LLVM back-end via CHPL_WIDE_POINTERS
  • (see doc/technotes/README.llvm and doc/README.chplenv)
  • added support for LLVM-based communication optimizations via --llvm-wide-opt
  • (see doc/technotes/README.llvm)
  • Testing System:
  • changed performance graphing to use dygraphs
  • added support for filing .bad files against futures to track behavior changes
  • added support for setting environment variables on a per-test/-directory basis
  • added the ability to use an external 'time -p' command for performance tests
  • added directory-level PERFCOMPOPTS/PERFEXECOPTS files
  • added a timeout feature for performance testing (separate from correctness)
  • fixed a bug in which spec tests weren't being generated correctly
  • added the capability for the test directory to clean itself up more thoroughly
  • Makefile Changes:
  • changed the naming scheme for intermediate object file directories
  • added a 'cleanall' target between 'clean' and 'clobber'
  • (see README.building)
  • made the 'clean' and 'cleanall' targets preserve a working installation
  • accelerated the Makefile framework, particularly for no-op re-builds
  • made the Makefiles smarter about rebuilding the compiler when necessary
  • Internal/Developer-oriented:
  • added a new 'createTaskFunctions' pass that creates functions defining tasks
  • added a new 'resolveIntents' pass which resolves 'blank' and 'const' intents
  • added a per-pass consistency/verification framework
  • added a --verify compiler flag for running optional verification steps
  • added an --ignore-errors-for-pass compiler flag for developers
  • added a compiler analysis to compute dominators
  • fixed a bug in isDefAndOrUse() for op= primitives
  • rearchitected the QIO framework to support multiple file systems
  • refactored the memory interface to better separate checking/tracking concerns
  • switched to using 'ref' intents rather than 'inout' for I/O routines
  • added "atomic type" flag for identifying atomic types to the compiler
  • added "donor" function concept, making the callee responsible for deletion
  • added "runtime type init fn" pragma to clarify overloaded "has runtime type"
  • fixed a bug in which 'begin's in internal modules broke compilation
  • restructured iterators so that not all yields would share the same variable
  • improved cases where filename/line numbers aren't set correctly
  • continued transition toward STL collections within the compiler
  • added new capabilities to the bit vector class
  • removed several instances of strcpy()s in the compiler
  • added a functional interface for invoking remote functions by ID
  • restructured #includes to avoid reliance on compiler-specific search policies
  • added new features for debugging the compiler
  • Changes In Support of Hierarchical Locales:
  • made ranges and default rectangular domains/arrays use sublocales, if present
  • made on-clauses get invoked through locale model module code in Chapel
  • moved optimization of local on-clauses from the compiler to locale model code
  • made task invocation flow through locale model module code written in Chapel
  • mapped the tasking interface's support for hierarchical locales to Qthreads
  • made hierarchical locale model compilations use wide pointers and on-clauses

New in Chapel 1.7.0 (Apr 19, 2013)

  • Environment Changes:
  • renamed the platform 'cray-cascade' to 'cray-xc'
  • renamed the platforms 'xmt'/'xmt-sim' to 'cray-xmt'/'cray-xmt-sim'
  • enabled GMP support by default if it is already built in the third-party dir
  • Syntactic/Naming Changes:
  • added support for associative domain/array literals
  • (e.g., {"red", "blue"} is an associative domain of strings)
  • (e.g., ["red" => 0, "blue => 1] is an assoc. array from strings to ints)
  • Semantic Changes / Changes to Chapel Language:
  • added support for injecting C declarations into Chapel via "extern blocks"
  • (see "Support for Extern Blocks" section of doc/technotes/README.extern)
  • added support for iteration over homogenous tuples
  • (see "Tuples" section of the Chapel spec)
  • added a capability for main() to take arguments and return a status value
  • (see doc/technotes/README.main)
  • added a 'requestCapacity()' capability to pre-size associative domains
  • (see "Domains:Predefined Functions" section of the Chapel spec)
  • added a warning() routine to generate warnings, similar to halt(), assert()
  • (see "Standard Modules" section of the Chapel spec)
  • Newly Implemented Features:
  • added support for the .localSlice() method to take a domain argument
  • (e.g., A.localSlice({loRow..hiRow, loCol..hiCol}))
  • Deprecated Features:
  • removed the tuple() function
  • (i.e., instead of tuple(x) or tuple(x,y,z), use (x,) or (x,y,z) instead)
  • deprecated warning for old-style domain literals by default
  • (i.e., [1..m, 1..n] is an array of ranges; re-enable w/ --warn-domain-literal)
  • Standard Modules:
  • added support for regular expression operations on strings and channels
  • (see doc/technotes/README.regexp for details)
  • added support for readf()/writef() routines for formatted I/O
  • (see doc/technotes/README.formattedIO for details)
  • refactored communication diagnostics into its own module (CommDiagnostics)
  • (see doc/technotes/README.comm-diagnostics for documentation)
  • added isDomainType(type t)/isArrayType(type t)/isRecordType(type t) queries
  • Documentation:
  • added README.formattedIO to describe support for writef()/readf() routines
  • (see doc/technotes/README.formattedIO)
  • added README.regexp to describe support for regular expression operations
  • (see doc/technotes/README.regexp)
  • added README.main to describe support for arguments/return values for main()
  • (see doc/technotes/README.main)
  • updated README.extern to describe C type aliases and extern blocks
  • changed READMEs that used csh-style syntax to use bash-style consistently
  • fixed a semantic typo in README.atomics
  • minor updates and fixes to various chapters in the language specification
  • minor updates to several READMEs
  • Example Codes:
  • improvements to the Chapel implementation of LULESH
  • (see examples/benchmarks/lulesh/ for more details)
  • configuration improvements (see README for details):
  • added ability to compute the cube input set rather than reading from disk
  • support for 3D vs. 1D representations via 'use3DRepresentation'
  • support sparse vs. dense material representations via --sparseMaterials
  • added a --maxcycles config that can be used to stop the computation early
  • converted 'dtfixed' into a config const
  • added a per-iteration timing when doTiming and showProgress are enabled
  • code improvements:
  • refactored setup code into a helper module: luleshInit.chpl
  • changed the representation of nodesets to use a sparse subdomain
  • switched to using 'ref' intents rather than 'in' or 'inout'
  • converted vars to consts where appropriate
  • general code cleanup
  • performance improvements:
  • improved performance by avoiding an unnecessary reindexing operation
  • made some unnecessarily serial loops parallel
  • replaced error-oriented reductions with forall loops + halt
  • param-unrolled the loop in localizeNeighborNodes() for performance reasons
  • removed a redundant zero-initialization of an array
  • documentation improvements:
  • updated README to document new configuration options
  • added the LULESH callgraph to the README
  • improved the Chapel implementation of RA:
  • added the ability to use an LCG random number generator via 'useLCG'
  • added a config const 'verify' that permits verification to be skipped
  • fixed a typo in HPL that inflated the calculated GFLOPs by 10x
  • improvements to the Chapel implementation of SSCA2:
  • fixed a bug in the torus representation
  • fixed a bug with VALIDATE_BC=true
  • Platform-specific Notes:
  • enabled GMP using the system-installed version on cray-x* platforms by default
  • Portability of code base:
  • fixed an issue related to vsnprintf on OS X Lion
  • fixed an assumption that platforms defining INT8_MIN will also define INT*_MIN
  • Launcher-specific Notes:
  • improved use of cnselect in launchers that use 'aprun'
  • Compiler Flags:
  • added --novariants of the following compiler flags: --count-tokens, --llvm,
  • --print-code-size, --print-commands, --print-passes, --print-search-dirs,
  • added --[no-]warn-tuple-iteration to warn against old-style zipper iteration
  • (see man page for details)
  • added --[no-]warn-special as a meta-flag for all old-style syntax uses
  • (see man page for details)
  • improved support for environment variable setting of '--no-'style flags
  • (see man page for details)
  • Error Message Improvements:
  • improved type mismatch error messages when assigning scalars to arrays
  • added an error for extern functions with formal arguments of array type
  • made Ctrl-C and the like result in a user, rather than internal, error
  • added an error for associative domains with unsupported index types
  • Bug Fixes / New Semantic Checks (for old semantics):
  • fixed a bug in which sizeof() had leaked into the user namespace in v1.6
  • fixed a regression in v1.6 in which type aliases of arrays were broken
  • fixed a bug in which 0-element arrays of arrays would free domains prematurely
  • fixed a bug related to writing out instances of the RandomStream class
  • I/O bug fixes:
  • QIO_HINT_PARALLEL now works for new/zero length files
  • fixed bugs related to bit-oriented reads and writes
  • fixed a bug w.r.t. EOF and preemptive mmap
  • fixed portability bug related to Intel compilers
  • changed channels so that once EOF is hit, it will never read further
  • fixed issues related to ssize_t/int(64) mismatches on 32-bit platforms
  • fixed an issue related to reading empty strings
  • fixed some bugs in the implementation of atomic variables
  • fixed a bug in which AdvancedIters didn't default 'numTasks' as documented
  • improved shape checking for array assignment
  • restricted reshape() to be applied for rectangular domains only
  • restricted reshape() to only work when the source and destination sizes match
  • improved support for Cyclic distributions of idxType uint(64)
  • fixed INFINITY and NAN to be of type 'real' rather than 'real(32)'
  • fixed a bug with '/*/' within a nested comment
  • fixed a bug in which uses of ** would dispatch to a user's pow() overload
  • fixed a few bugs in the Buffers.chpl module
  • fixed a bug in which memory leak tracking would mislabel some allocations
  • fixed a bug with recursive iterator inlining
  • fixed a bug in broadcasting large values at program startup
  • Packaging Changes:
  • added Chapel mode support for emacs version 23.x (see etc/emacs/README)
  • Performance Improvements:
  • switched to using processor atomics for reference counting on Cray systems
  • improved bulk transfer optimization (use -s useBulkTransferStride to enable)
  • put fewer variables on the heap in the presence of nested functions
  • enabled remote value forwarding for more constants/arguments than before
  • made atomic variables use compiler intrinsics for cray-prgenv-intel
  • made associative domains of 'imag' indices more efficient
  • Runtime Library Changes:
  • split chpl_task_begin() to distinguish between new tasks and migrating ones
  • improved the ability to build the Chapel runtime with a C++ compiler
  • Third-Party Software Changes:
  • updated to version 1.20 of GASNet
  • updated to version 1.9 of Qthreads
  • made the LLVM checkout script grab version 3.2 to ensure compatability
  • removed the nanox tasking layer due to lack of support/champion
  • Testing System
  • extended the 'skipif' capability to support the ability to skip a subdirectory
  • improved the robustness of start_test in cross-compiled environments
  • added support for .no-local.good files for --no-local-specific test output
  • fixed a bug in which the test system looked at incorrect .future files
  • removed artificial limiting of stacksize in start_test
  • refactored test system environment setup into util/test/testEnv
  • made the test system use $cwd rather than 'pwd'
  • made 'nightly' compopts/execopts get added to end of the command line
  • made 'nightly' support a --no-futures option
  • Internal/Developer-oriented
  • --------added some code that sets the groundwork for supporting hierarchical locales
  • fixed portability of bswap.h (for once and for all?)
  • restructured internal modules corresponding to specific runtime layers
  • removed uses of alloca()
  • removed PRIM_CHPL_ALLOC_PERMIT_ZERO
  • deprecated 'make depend' and made use of gcc -MMD/-MP instead
  • made 'rm -rf' commands a little safer in Makefile clean/clobber rules
  • refactored Makefiles for Cray systems/compilers to avoid repetition
  • added a map_view() function for printing out SymbolMaps
  • removed some dead and possibly incorrect methods from Map and Vec classes
  • refactored _cast functions for booleans
  • made the _isPrimitiveType test more concise
  • improved the mechanism by which line numbers are assigned to AST nodes
  • factored sync/single out of ChapelBase.chpl and into ChapelSyncvar.chpl
  • fixed the --gen-extern-prototypes flag
  • improved the correspondence of FLAG_* and string forms of AST flags
  • improved the correspondence of PRIM_* and string forms of primitives
  • refactored chplrt.h
  • added initial support for a .localAccess accessor to Block/Default arrays
  • renamed compiler-generated types for classes in generated code
  • refactored QIO code in the runtime
  • converted macros in the compiler to inline functions for sanity/performance
  • cleaned up the functions that build array/domain literals
  • refactored and commented lowerIterators.cpp
  • keep dtObject alive even if unused after function resolution
  • added EOF to the list of reserved symbol names
  • protected some C identifiers introduced by PGI when compiling with -Kieee

New in Chapel 1.5.0 (Apr 20, 2012)

  • completely revamped and improved Chapel's I/O features
  • added support for atomic bool/int/uint variables to Chapel
  • added a version of the LLNL/DARPA LULESH benchmark
  • improved GMP support for integer types
  • added an initial implementation of a 2D Dimensional distribution
  • added Cray XE (TM)-specific tasking/thread/communication layers for
  • the Cray XE module (binary only)
  • updated GASNet from 1.16.2 to 1.18.0 which includes initial ugni support
  • made integers default to 64-bits in most contexts rather than the previous 32-bits
  • numerous performance improvements, bug fixes, and documentation improvements

New in Chapel 1.3.0 (Apr 22, 2011)

  • This release of Chapel contains stable support for the base language, and for task and regular data parallelism using one or more locales.
  • Data parallel operations on sparse and associative domains and arrays are currently supported in a single-locale implementation.
  • Data parallel operations on opaque domains and arrays are currently only supported in a single-threaded, single-locale implementation.
  • While performance has received a great deal of attention in Chapel's design, this release lacks a number of crucial performance optimizations and is not suitable for in-depth performance comparisons and studies.

New in Chapel 1.1.1 (Sep 23, 2010)

  • High-Level Themes
  • single- and multi-locale task parallelism
  • improved single- and multi-locale data parallelism
  • all data parallel operations on arithmetic arrays are now parallelized
  • improved control over task quantity and granularity for data parallelism
  • improved completeness and stability of Block and Cyclic distributions
  • bug fixes
  • Environment Changes
  • added CHPL_TASKS to select the tasking layer to use (was CHPL_THREADS)
  • (see doc/README.chplenv and doc/README.tasks for details)
  • CHPL_THREADS now describes lower-level threading and is typically inferred
  • (see doc/README.tasks)
  • changed the name of the default tasking layer from 'default' to 'fifo'
  • (see doc/README.chplenv and doc/README.tasks)
  • added CHPL_TIMERS to select between timer implementations
  • (see doc/README.chplenv)
  • changed the CHPL_*_PLATFORM string for 32-bit linux from 'linux' to 'linux32'
  • (see doc/README.chplenv)
  • Syntactic/Naming Changes
  • several changes related to the naming and syntax of distributions:
  • renamed "distributions" to "domain maps" (or 'dmap's in Chapel syntax)
  • redefined the term "distributions" to refer to multi-locale domain maps
  • defined the term "layouts" to refer to single-locale domain maps
  • replaced placeholder 'distributionType'/'distributionValue' with 'dmap'
  • (e.g., 'const D = distributionValue(...)' => 'const D = new dmap(...)'
  • changed the 'distributed' keyword to 'dmapped'
  • added a syntactic sugar to drop 'new dmap(new' for anonymous domain maps
  • (e.g., '...dmapped new dmap(new Block(...))...' => '...dmapped Block(...)')
  • (see 'Domain Maps' chapter of language specification for more information)
  • renamed maxThreads to maxThreadsPerLocale (see README.tasks)
  • renamed the 'ind2loc' method on domain maps to 'idxToLocale'
  • renamed the Cyclic constructor 'low' argument to 'startIdx'
  • (see 'Standard Distributions' chapter of the specification)
  • replaced the use of underscore (_) to ignore things to leaving the space blank
  • (e.g., '(_, x) = getTuple()' => '( , x) = getTuple()')
  • made underscore (_) a legal identifier
  • changed name of the Random module's SeedGenerator from clockMS to currentTime
  • (see 'Standard Modules' chapter of the specification)
  • added support for empty (no-op) statements within a class declaration
  • added ability to elide the # of arguments specification/query from varargs fns
  • (e.g., can now do 'def f(x...)' in addition to 'def f(x...?n)'/'def f(x...n)')

New in Chapel 1.02 (Nov 30, 2009)

  • replaced uses of "[unsigned] long long" with [u]int64_t for sane portability
  • some unification of reserved names, though more remains
  • improved Chapel's launcher runtime interface to be more general
  • added a mechanism for intercepting printf/fprintf calls if required
  • Makefile refactorings working toward supporting parallel make
  • refactored runtime/mem- directories to decrease duplicated code
  • renamed runtime files to improve standardization, though more remains
  • removed linked list pointers from memory tracking table
  • reduced amount of runtime code linked into the launcher binary
  • made the use of chpl_globals_registry more consistent across locales
  • relaxed compiler assumptions about classes with the "data class" pragma
  • added support for generating type and offset information for communications
  • some initial work toward supporting execution on heterogeneous architectures
  • some initial work toward supporting CPUGPU computations in Chapel
  • some initial work toward supporting profiling tools with Chapel
  • removed "valid var" pragma
  • made wrapper functions use blank intent rather than inheriting from wrappee
  • changed strategy for determining when value types should be copied/destroyed
  • made domain and array classes always have reindexed set to true by default
  • added a developer flag for disabling compiler-introduced memory frees
  • removed support for _init functions from the compiler
  • removed assumptions that replicated global constants are stored symmetrically
  • added thread cancel and join functions to the threading runtime interface
  • added a type, chpl_threadID_t to pass thread IDs between C and Chapel
  • changed point at which variables are put on the heap
  • made all built-in modules be filename based
  • refactored directory structure of $CHPL_HOME/modules into standard/internal...
  • added optimizations to remove unnecessary autocopy/autodestroy calls
  • improved robustness of internal modules that use standard ones
  • changed the scan implementation to generate an array rather than a list
  • changed array assignments to use array iteration rather than random access
  • made --no-cpp-lines the default for -g for developers
  • improved handling, robustness of built-in configuration variables
  • split chpl_comm_md.h into two files to permit platform- and comm- overrides

New in Chapel 0.9 (Apr 24, 2009)

  • High-Level Themes:
  • multi-locale task parallelism
  • very initial/limited support for data parallelism, distributed arrays
  • improved stability, portability, and performance
  • target audience: general public
  • Environment Changes:
  • added a script to print out set and inferred CHPL env vars
  • (see util/printchplenv.pl)
  • added support for the IBM xlc/xlC compilers by setting CHPL_*_COMPILER to ibm
  • added an environment variable for naming a queue for the PBS launcher
  • (see doc/platforms/README.xt-cle)
  • added an environment variable for specifying #cores/locale to pbs/aprun
  • (see doc/platforms/README.xt-cle)
  • improved the logic for inferring host and target compilers for xt-cle
  • Changes to Chapel Language:
  • added a typeToString() function for converting a static type into a string
  • Newly Implemented Features:
  • added queries for task/thread counts per locale for CHPL_THREADS=pthreads
  • (see doc/README.threads)
  • added a printMemTable() routine to the Memory module for use in Chapel
  • (see doc/README.executing)
  • added a prototype multidimensional Block distribution: MultiBlockDist.chpl
  • (see examples/tutorials/block2D.chpl)
  • Portability of code base:
  • improved our general method of building and using GASNet for portability
  • improved portability of GASNet configure + build steps for xt-cle
  • improved the heuristic for setting GASNET_MAX_SEGSIZE for xt-cle
  • (see doc/platforms/README.xt-cle)
  • added initial support for IBM Power5 and Power6 systems
  • (see doc/platforms/README.ibm)
  • made flex and bison generate .cpp files rather than .c files for portability
  • added capabilities to build Chapel on Macs using xcodebuild
  • (see doc/platforms/README.macosx)
  • added a -d option to our use of aprun in the aprun and pbs launchers
  • removed the assumption that function pointers are identical between nodes
  • Syntactic/Naming Changes:
  • disallowed identifiers that start with $
  • removed compilerError and compilerWarning as keywords
  • permitted binary and hex literals to be written using uppercase B/X
  • renamed classes used for defining distributions
  • Runtime Library Changes:
  • added support for communication diagnostics and debugging
  • (see doc/technotes/README.comm-diagnostics)
  • Documentation:
  • added a new ACKNOWLEDGEMENTS file for financial and machine time support
  • refactored the doc directory, pushing platform & technical notes into subdirs
  • minor changes and improvements to the language specification
  • minor edits to many of the README files
  • updated the man page
  • Example Codes:
  • pushed most top-level examples into tutorials/ and programs/ subdirectories
  • added new tutorial examples for variables, ranges, classes, generic classes
  • added new tutorial examples for timers and the prototype Block distribution
  • changed quicksort to ensure levels beyond thresh do not re-enable parallelism
  • Compiler Flags:
  • added a flag to disable/enable the remote value forwarding optimization
  • Bug Fixes/New Semantic Checks (for old semantics):
  • fixed a number of spurious errors caused by how we were using GASNet
  • fixed problems in how we terminated multithreaded GASNet programs
  • added the ability for _chpl_comm_fork[_nb] to handle large arguments
  • applied a GASNet patch that fixes an x86 alignment error
  • fixed a bug which had previously limited execution to 1024 locales
  • fixed a bug in which arrays could only store 2**31 elements
  • eliminated a race condition when two tasks initialize the same module
  • fixed a bug in which integer exponentiation was being computed using pow()
  • fixed a bug in which slicing via .. could only be done for int(32) indices
  • fixed a bug with Block1D domains that exceed the bounding box argument
  • added a check to ensure that return statements are not used at module scope
  • improved verification of formal/actual argument types
  • fixed a bug in which long program names broke the PBS launcher
  • fixed a bug with incorrectly spacing operators in generated code
  • fixed Chapel error messages that referred to C's errno variable
  • fixed a bug with accidentally shared state during parallel iterations
  • fixed a bug related to reductions involving forall expressions
  • Error Message Improvements:
  • added a runtime error message if the launcher binary can't find the _real one
  • Compiler Analysis and Optimizations/Performance of Generated Code:
  • improved the correctness and effectiveness of remote value forwarding
  • optimized performance of local communications
  • optimized parallel iteration for Block1D to minimize remote references
  • parallelized declarations of Block1D distributions, domains, and arrays
  • optimized implementation of broadcasts used to initialize private data
  • optimized away a thread per locale used for progress+termination
  • improved reclamation of compiler-allocated memory
  • improved the correctness and effectiveness of re-privatization optimizations
  • privatized the default distribution object
  • removed array/domain wrapper records
  • Compiler Performance and Cleanup:
  • removed hand-baked and occasionally incorrect integer types int32, int64
  • fixed an infinite loop when inlining recursive iterators
  • fixed cases in which compiler temps were used outside the variable's scope
  • Cleanup of Generated Code:
  • removed redundant reference types from the generated code
  • Internal:
  • switched iterator implementation to use records rather than classes
  • improved the naming of identifiers in the runtime and generated code
  • removed compiler support for (undocumented) anonymous record types