The fundamental challenge:
Enable developers to do whatever they conceive.

Plange may not accomplish a developers goals for them, but it strives to stay out of the way while maintaining its usefulness. In other words: do not obstruct any use case, and anticipate many of them. As the developer explores the languages capabilities, they discover new potential domains rather than boundaries. A small number of specific goals stem from this notion, and provide an outline for the project.

Strongly-Connected Model Of Computation

Plange must provide all the same functionality at run time as it does at compile time. This facilitates self-modifying code, symbolic computation, and makes it possible to endow an end-user with the capabilities of the developer. See the main page.


Introspection and meta-programming facilitate extensibility and DSLs.(see metaobject on Wikipedia). See the metaobjects page.


A programming language has zero or more algebraic systems for the verification of programs. Haskell has types. Java has exception declarations. Rust has single ownership. Prolog has predicate logic. Javascript has none at all. Languages are designed around the algebraic systems they leverage, if any, and appeasing these systems is required to produce a functioning program. The effect is robust but inflexible. A language that offers many algebras and calculuses at the discretion of the developer is desirable.


Useful semantic features are included from each generation of programming languages.

Solver and C.A.S.

Constraints on systems, in the form of expressions in predicate logic, differentials, and other problem domains are solved symbolically, or numeric methods are used at runtime. The user may initiate and abort symbolic evaluation within the IDE, especially for techniques that may have unbounded running time.

Scripting friendly

Simple problems should have simple solutions. The "Hello World" program must be one line of source code. As such, functions for printing, manipulating files, and other basic operations are automatically in scope of each translation unit. See the standard library. Further, the barrier to entry must be low. Install once, configure by a gui, no package management.

Bare Metal

The highest-level languages create an abstraction of the physical hardware that's dramatically different from the reality. This approach is very powerful. But as with all things, it is not the optimal solution for all problems. For high level abstractions, developers often (and sometimes unwittingly) exchange the ability to reach the "bare metal." Instead, a well-rounded language maintains the accessibility of the system hardware as a semantic feature of the language. The most obvious approach is to provide first-class inline assembler support. See: asm

Comprehensive Libraries, Documentation, Support

The "standard" libraries are modular and transparently retrieved from the server when using the "import" keyword. The developer can also indicate which libraries should be compiled into the executable, making embedded systems and non-networked applications possible. Third-party libraries are accessed by providing a URL to the import keyword. Documentation will (in part) be generated from docstrings within the source code. will have a user forum, and premium support should be available.

Communicate Well

Documentation is exhaustive, generated whenever possible, and available wherever possible. This website serves as the primary source for structured and unstructured information used in the building of the tool chain.

Error message, diagnostics, etc. should be helpful. e.g. Think of clang's template error messages versus gcc's.

This website does not use cookies or javascript, excluding the Google search bar and Google analytics.
copyright © Brent Lewis 2013-2018