jtm.dev/swittestorm.txt

28 lines
3.6 KiB
Plaintext

* Highly parallel processing-- distribute code over CPU cores, GPU cores, or computers on a network-- completely transparently.
* Free networked programs-- location-agnostic code can be run anywhere or everywhere, and multi-user systems via a multi-entry point program.
* Streamable computations-- computation can begin even when not all of the data has arrived yet.
* High performance-- simple and fast computations on CPU or GPU, easy to compile.
* Hard real-time, strict determinism-- extremely simple program semantics and implementation allow making very strong guarantees, including precise computation times and results.
* Secure-- deterministic and provable program behavior allows trivially creating secure subsets of the language.
* High-quality debugging tools-- the compiler is aware of a large amount of metadata for generating messages, and program images allow easy reproducibility/analysis.
* Portability-- no programming language behavior is platform-dependent, so only calls to native libraries are platform-dependent.
* Provable correctness-- everything else not good enough for you? prove your programs correct using the formal semantics.
* Low- or high-level-- the programming language depends on virtually no runtime (just malloc), not even a garbage collector, and would be suitable for writing OS-level code wherever C would be. In fact, it could be feasible to implement Switte as a CPU instruction set.
* High-quality type inference-- strongly and statically typed, but you'd never know it.
* Code inference-- built-in proof helper can automatically infer your code based on its type.
* Highly granular versioning-- hash and graph-based version control applies not just to libraries, but individual functions and types. This could theoretically be used for a completely decentralized/distributed package manager.
* High-quality documentation-- every aspect is formally specified and explained for academics, developers, or laymen, such that anyone can learn it.
* Extreme simplicity-- a very small yet complete set of primitives and virtually no syntax makes learning or porting it easy.
* Extensibility-- if you don't appreciate the simplicity, you can simply encode your favorite syntax or language structures directly into the language.
* Mathematician- and logician-suitable-- basis in a very general type theory makes it suitable for mathematicians (though unfortunately it is not Homotopy-based)
* Linguist-suitable-- the Lambek fragment is suitable for describing categorical grammars
* Staticstics interpretation-- the non-associative fragment corresponds with concepts in statistics.
* Programmer-suitable-- if you don't care about all that stuff, the full fragment is Turing-complete and a suitable programming language.
* Native literate programming support
* Rich code editing-- textual source code is possible but unneccessary. Compiled code and source code are essentially equivalent, so between the instruction set and hash-graph VCS, it is possible to interact with code entirely non-textually.
* Eager or lazy?-- irrelevant! Switte's linear semantics make evaluation strategy definitionally irrelevant. In other words, Switte is strongly normalizing (with a few exceptions related to the full fragment).
* Stateless-- dump a running program and restart it anywhere. You might even argue that all Switte programs are always running, in a sense.
* Flatness-- Switte has no syntax, and therefore arbitrary partitions of programs are equivalent.
* Simplicity-- a very small set of primitives and no syntax.
* Derived from type theory-- clear formal semantics makes it easy for both humans and compilers to reason about programs.