Update FUBS authored by Eron's avatar Eron
......@@ -5,10 +5,13 @@ Linus Torvalds
I had enjoyed programming since I was 10 years old. By 2016 I was programming an Android App with Google's shit and I hated my life. Apple's shit was more infuriating. Don't get me started with the embarrassment known as the "Javascript ecosystem". FUBS is a software development system that made me like programming again.
It can perhaps best be described as what C++ should have been. It will continue to be a private work in progress for many more months.
It will continue to be a private work in progress for many more months. It will be made public and open source when it is ready:
* It must be [self hosted](https://en.wikipedia.org/wiki/Self-hosting_(compilers)) on bare metal with nothing written in another language (no Linux, no LLVM, no gnu, not even legacy text editors).
* It must be self hosted on it's own source code repository.
* It must be be under a new open source license that ensures our core principal is not violated by other programmers' forks.
## Core Priciples (roughly in order of importance)
1. Have a unified execution and authoring environment. Any program must also provide the tool with which it was created and allow itself to be modified. We endeavor to make it as frictionless as possible for a user of a program to understand or modify it. **Anyone using a program can become its programmer within seconds.**
## Core Principles (roughly in order of importance)
1. Have a unified execution and authoring environment. Any program must also provide the tool with which it was created and allow itself to be modified. We endeavor to make it as frictionless as possible for a user of a program to understand or modify it. **Anyone using a program can become its programmer within seconds.** We will insist on this via our open source license.
1. Anyone can code. Make it easy for anyone to modify any part of the system. Imposing restrictive [encapsulation](https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)) is selfish and elitist.
1. Milliseconds matter. A programmer should see the results of a program modification instantaneously.
1. It is extremely important for systems to be [self hosted](https://en.wikipedia.org/wiki/Self-hosting_(compilers)). Only use other programming systems as a bootstrap mechanism. If your system uses nothing written with another system, then you can rest assured that it is complete.
......@@ -34,12 +37,11 @@ It can perhaps best be described as what C++ should have been. It will continue
## Details so far
* FUBS is basically an imperative language with decent support for closures and class hierarchies.
* Classes can contain inner classes, data fields (singleton or per object), and functions (singleton or bound to an object).
* Inner classes exist soley for the purpose of providing name spaces.
* A class may specify one or more super classes for inheritance.
* Inner classes exist solely for the purpose of providing a hierarchical name space.
* A class may specify one or more parent classes for inheritance.
* Diamond inheritance is prohibited.
* Name collisions for singletons and object fields are prohibited.
* Name collisions for object functions create a function group for [dynamic dispatch](https://en.wikipedia.org/wiki/Dynamic_dispatch).
* Because diamond inheritance is prohibited, a class can have another type of parent class (called a "trait") that permits diamond inheritance. A class may not be instantiated if it has an unrealized trait in its ancestry. A class can realize a trait by having the specified class declared as a super class somewhere in its ancestry.
* Only classes exist at the top level. All functions and data are fields of a class.
* Strongly typed.
* Supported types:
......@@ -62,7 +64,7 @@ It can perhaps best be described as what C++ should have been. It will continue
* No automatic coercion except for widening of object types
* Any primitive type may be cast to any other primitive type.
* Class parameters provide for [generic programming](https://en.wikipedia.org/wiki/Generic_programming).
* An object type is provided to speciy how wide a class parameter may be.
* An object type is provided to specify how wide a class parameter may be.
* Heap management so far:
* No dynamic reachability analysis except when debugging.
* A reference type may be "prime", which means that it will be automatically freed when it leaves scope (for local variables), or its parent is freed (for object fields).
......
......