broom-lang / broom Goto Github PK
View Code? Open in Web Editor NEWA programming language with first-class modules and algebraic effects.
Home Page: https://broom.readthedocs.io
License: BSD 3-Clause "New" or "Revised" License
A programming language with first-class modules and algebraic effects.
Home Page: https://broom.readthedocs.io
License: BSD 3-Clause "New" or "Revised" License
E.g. val foo = 1 val foo = 2
should not be accepted (because forward and recursive references are allowed).
It isn't useful in error reporting because types flow around.
I.e. the box
trickery from "A Type System for Well-Founded Recursion", except that we would only use it for functor parameters (and not local recursion as that paper does also).
(Parametrically) polymorphic intrinsics for e.g. arrays.
Use __iAdd
syntax like e.g. C and Python.
So that e.g. subtyping coercions can produce sloppy code. See Shrinking Lambda Expressionsin Linear Time and Shrinking Reductions in SML.NET. #12 should make this a lot easier.
Empty, extension (with
), update (where
), restriction (without
) for records, modules, record types, interfaces. Also field access and patterns for records and modules.
with
and where
for recordswith
and where
for record typesextends
and override
syntax for modules and interfaceswithout
for records and record types, exclude
for modules and interfacesThe 'anti-modularity' of type classes is even more awkward with first-class modules than regular ones. Plus we don't have generalization so type class parameters can't be inferred any more than implicit parameters. Obviously the challenge with implicits is that implicit search must be exhaustive, which is potentially very slow.
I.e. back-convert types to Cst.typ
.
With lazy sweep using wraparound counter mark bytes.
Some sort of use-def/def-use pointers and stuff like in the imperative version of "Shrinking Lambda Expressions in Linear Time" and "Shrinking Reductions in SML.NET" would be convenient for optimization. Alphatization is not as convenient and mangles the names, which is bad for debugging and especially error messages.
E.g. ATM the well-foundedness analysis must construct scope trees to deal properly with scoping without mangling the names (to keep error messages intelligible).
It should be convenient to integrate this to WellFounded
.
WellFounded
elaborating, adding the functionality of lex-straighten.Much as in Haskell, except we need to deal with more advanced modules which I've heard can get tedious.
We do have some rudimentary highlighting support in /vim
.
Simplify it until it can be formalized.
It would be cool to do something like Thorin and Guile's "CPS Soup".
NJ uses its own CM format instead of MLB files. For extra points, generate the CM and MLB from the same source with cm2mlb or similar.
pi a b -> a
= pi a -> pi b -> a
and pi a b => a
= pi a => pi b => a
.
Just plagiarize GHC's setup.
So that defs are unique and error-reportable, respectively.
Vim and Emacs have their own issues since we should at least have those.
Add some exposition of goals/features/syntax so that people can decide whether they want to contribute to or (eventually) use this.
ATM we just have the pure/impure distinction of 1ML. I would like something like Koka or Multicore OCaml. There will be nontrivial interactions with 'large' (higher-rank etc.) types and functor generativity.
begin
and module
(and toplevel) contain recursive, unique definitions. Runtime effects are forbidden because of the continuation capturing variable initialization trainwreck, but it also makes sense on a higher level to demand purity. The 'dynamically determined implementation of static type' effect should be allowed though. Could even ban expression-statements here is since they are useless anyway.do
contains sequential statements that can have side effects and shadow names.do
-> begin
do
It is repetitive spaghetti.
Obviously local functions should not cause closure allocation. With a bit more effort this can also subsume conversion of (self) tail recursion to loops.
Unlike #16, just requires parser support.
Should help correctness of WellFounded
tremendously. Can also remove ScopeId
:s from FAst.
Fn
and TFn
should be fused as in 1ML so that type lambdas have no runtime component that the compiler needs to reason about (closures, passing continuation to calls etc.).
Add string literals with \-escapes.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.