This feature list is derived from the Chapel specification.  It is
organized by Section.

2 Base Language

2.5 Primitive Types and Literal Constants

  byte widths for int, uint, float and complex
  floating point literals
X variable size strings
  fixed size strings
X enumerated types

2.6 Expressions

  bytes iterator
X conditional expressions
X let expressions

2.7 Statements

  variable declarations (and with the same type)
  config in the compiler and interpreter
  config parameters
  type aliases
X like
X if statements
X label and goto
X while loops
X break and continue
X select

2.8 Functions

X with and without parentheses
  intents like in, out, inout, and/or ref
X lvalue functions
X named arguments
X default arguments
X function values
X currying
  function types
  function arguments

2.9 Tuple Types

X tuple assignment
X tuple destructuring
  and _
X homogeneous tuples
X tuple indexing

2.10 Modules

X multiple modules, one with main
  module named variables (mod1.x)
  versions
X use
  use only, use except
  use rename
  public vs. private
  nested modules
X using modules in other files
  using modules in files not explicitly passed to the compiler

2.11 The With Statement

  with on modules

2.12 Conditional Declarations

X on function declarations
  on variable or parameter declarations

2.13 Program Execution

  user-level module initialize function
  user-level module finalize function
  predefined argv sequence

3 Structured Types

3.2 Record Types

X record declarations
X fields and field access
X record assignment

3.3 Bound Functions

X access to fields with implicit this
X as primary methods
X this argument
  detection of static bound functions

3.4 Constructors

  design
X default constructor
X separate initialize function called at construction time

3.5 Anonymous Records

  inline declarations
  + to combine records

3.6 Derived Record Types

X with on records
  shadowing fields from a with
  rename on with
X and base methods
  and private fields

3.7 Class Types

X reference semantics
X and constructors
  assignment of records to classes

3.8 Derived Classes

X inheritance

3.9 The Use Statement

  use on classes or records
  use only, use except, use rename

3.10 Nested Type Definitions

  nested classes
  detection of static nested classes

3.11 Variable Sharing

  => in constructors

3.12 Interface Classes

  function prototypes in classes

4 Union Types

4.2 Declarations

  union design
  unions
  union field access
  with in unions

4.3 Typeselect Statement

  typeselect and unions

5 Sequences and Iterators

  empty sequence support

5.2 Sequence Operations

  # for prepend
  # for append
X # for concatenation
X sequence literals
X sequence indexing
  sequence indexing with negative integer
  sequence indexing by a tuple
X length function
X arithmetic sequences
X by operator on arithmetic sequences
  sequence of length-1 strings

5.3 Sequence Assignment

X sequence assignment

5.4 For Loops

X for over sequences
  zipper product
X cross product
  check for goto across for loops

5.5 Expression Iterator

  for expressions
X as forall around statements

5.6 Sequence Promotion of Scalar Functions

  scalar function promotion
  zipper product application of multiple arguments
  cross product call of functions
  sequence indexing with a sequence

5.7 Sequence Equality

  any and all reductions
  implicit all in if and while condition context
  interpretation in select condition context

5.8 Filtering Predicates

  conditional expression in for expression context

5.9 Indefinite Sequences

  arithmetic sequences without low or high bounds
  usage in zippered context
  usage in zippered context but not immediately
  usage to index into a bounded sequence
  fill function

5.10 Arithmetic Sequences and Strings

X indexing into a string with an integer
X indexing into a string with an arithmetic sequence
  indexing into a string with an indefinite sequence

5.11 Iterators

x used as functions
X yield statement
? and returning references

5.12 Arithmetic Index Sets

???

5.13 Sequence Primitives

X reverse on 1D sequences
  reverse function
  spread function
  transpose function
  reshape function
  tuple to sequence cast
  sequence to tuple cast
  reductions

5.14 Cursor

  cursor types
  cursor methods
  iterators and cursors

6 Function Overloading

6.2 Type Constraints on Function Arguments

X dispatch constraints
X nominal constraints

6.3 Most Specific Definition

X resolution

6.4 Function Candidates

X lexically visible functions
X visible functions with class arguments

6.5 Bound Functions

X resolution
X as a separate name space

6.6 Function Results

X ignore return types in resolution

6.7 Typeselect Statements

X for function resolution
  and wild-card _

6.8 Function Values

  candidate functions in function values

6.9 Nested Function Definitions

  private nested functions
  shadowing other functions
X public visibility because of class arguments
  checking for public functions that access variables in outer scope

6.10 Operator Overloading

X operator overloading

7 Type Parameterization

7.2 Type Variables

  introduced with ?
X functions with type arguments
  in variable declarations
X classes/records with type fields
X generic parameters

7.3 Type Constraints

X simple where clauses
  structural type constraints

7.4 Overloading

X dispatch

7.5 Type Constructors

X default constructors for generic classes/records

7.6 Variables with Variable Types

7.8 Element Types

X of and elt_type

8 Arrays and Domains

8.2 Arrays

X arithmetic arrays
X array indexing
  scalar function promotion

8.3 Domains

X domains in for loops
  index types of domains
X arithmetic domains
  set_range method on arithmetic domains
  domain assignment
  enumerated domains
X indefinite domains
X associative arrays
  indefinite domains over arbitrary types
  remove method on indefinite domains
X += on indefinite domains
  -= on indefinite domains
  member? method on indefinite domains
  opaque domains
  new indexes for opaque domains
  remove method on opaque domains
  sub-domains
  index values of sub-domains
  product domains
  sparse domains
  += on sparse domains
  -= on sparse domains
X anonymous arithmetic domains
  anonymous product domains
  anonymous enumerated domains

8.4 Domain Arguments

  domains as arguments to functions

8.5 Array-Domain Association

  association of domains to arrays
  association of sub-domains to domains
  domain allocate method to reallocate its domains
  reallocate and set_range on domains
  reallocate on subdomains
  reallocation based on domain assignment

8.6 Expressions and Domains

  _ and slices
  * and projections

8.7 Array Aliasing

  array aliasing via =>
  _view of arrays

8.8 Array Arguments

  reference passing of arrays
  querying a domain from an array argument
  array arguments with explicit domains

8.9 Array Functions and Objects

  array functions, functions declared with square brackets

Additional time sinks

1. We need to improve the quality of our error messages.
2. We need to test and debug more.
3. Serial reductions and scans
4. I/O
5. Standard libraries, e.g., math
