Project Goals
We hope to demonstrate that it is possible to provide in one language all of the following desirable features.
|
C |
Java |
Python |
OCaml |
Welly |
Rapid development |
No |
No |
Yes |
Yes |
Yes |
Safe for large programs |
No |
Yes |
No |
Yes |
Yes |
Easy for beginners |
No |
Yes |
Yes |
No |
Yes |
Resource efficient |
Yes |
No |
No |
Yes |
Soon |
Platform Integration |
Yes |
No |
Yes |
Yes |
Soon |
C-like syntax and types |
Yes |
Yes |
No |
No |
Yes |
In more detail...
Rapid Development
- Welly provides a REPL for learning, for prototyping, for debugging, and for general inspection of the program's internal state.
- Welly avoids or automates all build steps, so as to minimise the time between typing in code and seeing the results.
- Welly encourages code reuse, through metaprogramming.
Safe for Large Programs
- Welly uses static checks to detect errors as early as possible, before the program starts running.
- Welly is designed from the ground up to avoid the errors that are historically most common.
- Welly is a fully specified, write-once-run-anywhere system.
Easy for Beginners
- Welly is a simple language, free of historical or ill-conceived cruft that confuses beginners for no benefit.
- Welly is a non-mathematical language that deals in concrete concepts.
- Welly has a garbage collector, so you can spend less effort on memory management, and more on what you care about.
Resource Efficient
- Welly is a (just-in-time) compiled language, that automatically makes use of both static and dynamic information to optimise the performance-critical parts of the program.
- Welly encourages compact data structures, to minimise the cache footprint of the program.
- Welly exposes low-level decisions to the programmer in cases that cannot be optimised automatically by the compiler.
Platform Integration
- Welly is open-source and vendor-neutral, so there is no political obstacle to integrating Welly with the platform of your choice.
- Welly allows access to all of its internal layers, right down to assembly language, if you need it.
- Welly can produce stand-alone executables.
C-like Syntax and Types
- Welly syntax uses curly braces around code, round brackets around function arguments, and square brackets around lists. It uses the standard arithmetic operators, such as
+
, /
, &
, <<
and ? :
. It uses standard control-flow constructs such as if
, for
, while
, switch
, break
and continue
, and try
and catch
.
- Welly semantics is imperative. Welly keeps the concepts of "statement" and "expression" separate.
- Welly uses standard primitive datatypes, like integers (8-bit, 16-bit, 32-bit and 64-bit), floats (32-bit and 64-bit), references (64-bit pointers), and compact structures and arrays. All the operations behave as you would expect.
Non-goals
To focus on what we're trying to prove, we've sacrificed things that many other projects treat as goals, including:
- Using existing code (other than by porting it);
- Making money, attracting users, or being "successful";
- Expertly fitting a niche role;
- Protecting our jobs or our intellectual property.
Sub-goals
Simplify the tool chain.
Who needs a "compiler" tool? Only the computer should care. Welly includes a JIT compiler that adapts to the behaviour of your program. Code that is only run once is optimised for size and start-up time, whereas the performance-critical inner loops are optimised for speed and memory efficiency.
Who needs a "make" tool? Who needs a preprocessor tool? Such tools are just programming languages, and they're typically not very good. Welly is more than capable of building its own programs.
[TODO: Write more, including the following items.]
- Provide proper structs. Especially, provide arrays of structs, and functions to/from structs.
- Provide proper (tagged) unions. If Java needed enumerations (it did), it also needs unions.
- Don't make any basic mistakes (see later).