The Bosque Programming Language
microsoft.com
microsoft.com
As a bit of an update, this project is not at Microsoft Research anymore. The new (main) repository is at https://github.com/BosqueLanguage/BosqueCore. MSR was a great place to work and do the initial work on this project, but was not the right place to make this a fully free and open language for real users.
Progress was a but slow in the last year while I found a new home but I am very excited to be starting as a professor at the University of Kentucy in January where Bosque will be the main project for my group! There is a paper from earlier this year that describes the language design, based on our experiments over the last few years, and shows some results from prototype tools built on the language. The Intro and Section 7 are pretty good for a quick overview of things: https://github.com/BosqueLanguage/BosqueCore/blob/main/docs/...
I would love to use a language that implemented even just the "simple" parts, and I doubt I would be the only one.
One specific suggestion I have about the overview and docs is that I think the language around "Cloud" and "Restful/API computing" is more specific than it needs to be. While features like the APITypes would definitely be most useful for cloud/web software, I think the same ideas could be very useful for any kind of software. Anything that even writes a JSON config file could benefit from that concept if I understand it correctly.
EDIT: Oops, I misread the comment. The following the following "check arg2 != none;" indeed seems redundant.
> Many features that make the Bosque IR amenable for automated reasoning involve simplifying and removing sources of irregularity in the semantics.
I do find it strange that it both shows a bug in the logic which causes an irregularity, but also that this irregularity is allowed because of the need of a second check, rather than failing to compile because the type would be narrowed by the initial constraint (if the op argument is add/sub then arg2 MUST be non-none).
This example is from an earlier version of the language that was experimenting with aggressive flow sensitive typing. Interestingly, I came to the conclusion that, while sometimes magically nice, it was also often confusing. So, in the version that is (slowly) getting built as the first _release_ version has a simpler and more explicit algorithm.
The feature set looks pretty neat, and it's probably the first project by a larger company that I've seen use deno (required for building).
Docs are pretty light, but there is _some_ here: https://github.com/BosqueLanguage/BosqueCore/blob/main/docs/...
Also, there is the additional check... line which seems to imply the same thing.
The example (disregarding the small errors) resembles constraints from Liquid Haskell / F*...
So there must be something I don't get.
In simpler cases, these systems may have similar feels but as the application gets larger then they will start to look very different in terms of developer effort (for proofs) and completeness of correctness guarantees.
I have no context about intermediate representation or regularised programming languages.
Is it about speed, size, safety? Does it enable automatic proving?