In support of comfortable stream-centric (and functional) programming
Go to file
Glen Whitney f93499acfd
Some checks failed
continuous-integration/drone/push Build is failing
feat: Add typing for Sequence() operation
Also move the signature of the semantic sort TYPE into its own
  file to facilitate sharing between Statix and Stratego.
  (Currently it is shared via symbolic link, but that may cause
  problems down the line; if/when it does, will have to look at
  physically copying the file into src-gen via an "Additional
  build step" using either Stratego or Ant.

  Also documents using Statix types from Stratego.
2021-02-17 11:20:26 -08:00
.mvn init: SDF3/Statix project as initialized by Spoofax 2021-01-30 12:27:10 -08:00
bin feat: Initial statix assignment of types to expressions 2021-02-14 10:25:23 -08:00
docs docs: Get mkdocs working 2021-01-30 19:48:03 -08:00
editor feat: Initial statix assignment of types to expressions 2021-02-14 10:25:23 -08:00
signature feat: Add typing for Sequence() operation 2021-02-17 11:20:26 -08:00
src/main/strategies/fostr/strategies init: SDF3/Statix project as initialized by Spoofax 2021-01-30 12:27:10 -08:00
statics feat: Add typing for Sequence() operation 2021-02-17 11:20:26 -08:00
syntax feat: Type-dependent Haskell code generation 2021-02-16 09:46:12 -08:00
tests feat: Add typing for Sequence() operation 2021-02-17 11:20:26 -08:00
trans feat: Add typing for Sequence() operation 2021-02-17 11:20:26 -08:00
.drone.yml chore: Switch to this repository from predecessor 2021-01-30 15:37:53 -08:00
.gitignore feat: Implement enters operator >> (#8) 2021-02-01 01:46:31 +00:00
LICENSE chore: Switch to this repository from predecessor 2021-01-30 15:37:53 -08:00
metaborg.yaml feat: sequencing of expressions with newline to same indent (#11) 2021-02-06 05:11:41 +00:00
mkdocs.yml docs: Add statics development documentation 2021-02-12 17:08:55 -08:00
pom.xml init: SDF3/Statix project as initialized by Spoofax 2021-01-30 12:27:10 -08:00
README.md feat: Type-dependent Haskell code generation 2021-02-16 09:46:12 -08:00

The fostr programming language

I don't really like to write code, but I do like the things that coding can build for me: accounting systems for non-profits I care about, spreadsheets that have a reasonable calculation language for cell contents, geometric visualizations that really help to understand three (and maybe even four!) dimensions.

So I embarked on this project to see if I could produce as comfortable a language as possible to work in, given that I inevitably will be doing a bunch of coding. The language will be centrally organized around the concept of "streams" (somewhat in the spirit of streem and/or Orc, or to a lesser extent, Sisal-is). In fact all higher-type entities will be cast in terms of streams, or in slogan form, "++f++unctions and (binary) ++o++perators are ++str++eams" (hence the name "fostr").

Other guiding principles:

  • Maximize signal to noise ratio in code, which means minimizing the number of symbols that have to be there just for the syntax; reducing punctuation; seeking brief syntax that is not too terse; etc.

  • Since code is always structurally indented anyway, make use of that and don't repeat information that's in the whitespace. This principle meshes well with the previous one, and if whitespace significance is baked into the language design from the ground up, it can be kept both effective and natural.

  • fostr code uses streams (and their specializations to functions and operators) all the time, so they are first-class entities that are easy to create, pass around, compose, etc.

  • Try to keep the constructs available as simple to reason about as possible, and practical to use. So side effects are OK, and it should be clear when they occur and in what order. And if possible, fostr will consist only of expressions, no other syntactic constructs. Everything has a value.

Like just about every other language, this documentation begins with a whirlwind tour.