Skip to content
Philip Diffenderfer edited this page May 14, 2021 · 1 revision

Mission Statement

Expangine is a modern visual programming language with advanced features .

Features

Common features

  • Strict type system
  • Algebraic data types
  • Type inference
  • Generics
  • Functions are first-class objects
  • Interface system
  • Operators can be redefined for classes (operator overloading), and new operators can be defined.
  • System types
    • Primitive: any, boolean, date, number, text
    • Composite: enum, object, tuple, color, list, map, set
    • Algebraic: tuple, many, not
    • Other: function, optional, null, user-defined type, global data reference

Unique to Expangine

  • Automatic refactoring of data, functions, and programs when data types are changed
  • Transparent algorithmic and memory complexity for all operations and functions
  • Documentation/comments can be attached to types & expressions
  • User specified unit testing for any function/operation
  • Easily refactor any expression into a reusable function
  • Types and expressions are stored as JSON and could be parsed by any language and transformed into a callable function or code in another language.

TODO for v2

  • Add comments to Expression and Type
  • Remove Comment expression
  • Add Log expression that adds message to program log. Accepts any Expr.
  • Update Invoke to accept Expression as function name/reference. When it resolves to string, look at global functions. When it resolves to function expression or function object, call it.
  • Definitions keeps a list of the types. You can create your own based on an existing type.
  • Add global operations, detached from types.
  • Each type when registers with Definitions - adds which operations it implements. Simple list of operation names.
  • Method expr is a path node that extends Invoke but doesn't have function name, the parent/previous type is the this.
  • Add ForEach expression which takes a collection/iterable
  • Remove GetEntity?
  • Remove GetRelation?
  • EntityType is copied to make Named/User/CustomType
  • EntityType is renamed RelationalType
  • Remove legacy support
  • Remove explicit ColorType and add as "user type"
  • Add proper Date †ype that doesn't rely on terrible JS Date
Clone this wiki locally