alma
alma copied to clipboard
ALgoloid with MAcros -- a language with Algol-family syntax where macros take center stage
À la many Lisps and Smalltalk. There are many aspects to this, but here's one thing I'd expect would work, by Least Surprise: ``` my three: Real = 3; ```...
The thing I talk about in [this old blog post](http://strangelyconsistent.org/blog/macros-nesting-macros). I talked with jnthn about it yesterday, without remembering much of the blog post. Like the blog post points out,...
Starting from the languages listed in https://en.wikipedia.org/wiki/Macro_(computer_science)#Syntactic_macros, make a table with the languages on the rows and capabilities on the columns. After the table, also summarize each language in prose,...
So I was reading [Oleg's latest about session types](http://okmij.org/ftp/Computation/types.html#sessions), and I realized a couple of things. One was that I still really haven't dug into MetaOCaml, and... I really should....
Picture a `Q::Statement::Yield`, working pretty much like a `return` statement. Now we have a source transformation that takes a function with a `yield` statement in them, and [CPS transform](https://en.wikipedia.org/wiki/Continuation-passing_style) the...
There's [a paper](https://www.cs.utah.edu/plt/publications/popl16-f.pdf), [a talk](https://www.youtube.com/watch?v=Or_yKiI3Ha4), and [a GitHub repository with lots of branches](https://github.com/mflatt/expander), and [an extended version of the paper, as a Scribble documentation page](https://www.cs.utah.edu/plt/scope-sets/), and (edit) [a seminar/course](https://www.youtube.com/watch?v=OmA6oTxWMBs). Let's...
There's a risk that when we've implemented modules — that is, being able to import a file from another through the `import` statement — there's a whole part missing in...
Eight operators in total: `ff ff^ ^ff ^ff^ fff fff^ ^fff ^fff^`. I dunno why we haven't done these long ago. They are the *perfect* poster child for macros. As...
``` macro name(expr) { if expr ~~ Q.Postfix.Property { expr = expr.property; } assertType(expr, Q.Identifier); return quasi { expr.name }; } my info = { foo: "Bond", bar: { baz:...
So, I was checking out the examples, and came to the implementation of [Nim addition](https://github.com/masak/alma/blob/ae49b69eac1d787452197ee904da4b3d97ceb2f9/examples/nim-addition.alma): ``` func infix:(lhs, rhs) is equiv(infix:) { my lb = binfmt(lhs); my rb = binfmt(rhs);...