I think I just figured out how to add a `typeof` operator to Flabbergast and not have it suck.

The problem with `typeof` in Javascript (ignoring that it returns `object` for `null`) is that it returns a string. This is not the Flabbergast way. Why a string? Why not a frame or an integer? The purpose is for the user to take this value and then either compare it or do a lookup in some other structure. Why should it be tied to a particular type? The answer, is, now so clearly, lookup.

If you do `TypeOf "x"`, it should do a lookup for `str` and return whatever that is. This creates a relatively small binding between the language and user's namespace: one name for each of the 7 types (bringing the total number of magic words to 9: args, value, bin, bool, int, float, frame, str, tmpl)

Unfortunately, this design is awkward since we have no namespace control on those new magic words, unlike `args` and `value`, where the structure of the program controls their scopes.

So, let's introduce a namespace prefix:
`Type foo Of "x" ` would resolve to `foo.str`
Now, the user can have namespace control. This means one could do:

type_id : { bin : 0 bool : 1 int : 2 float : 3 frame : 4 str : 5 tmpl : 6 }
value : Type type_id Of x == Type type_id Of y

has_sql_literal : { bin : True bool : True int : True float : True frame : False str : True tmpl : False }
value : Type has_sql_literal Of x

We can even be craftier:
create_shell_literal : {
bin : Template { value : ... }
bool : Template { value : If input Then "true" Else "false" }
int : Template { value : input }
float : Template { value : input }
frame : Template { value : Error "Cannot convert frame to shell." }
str : Template { value : ... }
tmpl : Template { value : Error "Cannot convert template to shell." }
}
value : (Type create_shell_literal Of x)(input : x)

That is, use `Type Of` to find a function and then call that function on the value.


Post has attachment
I've been thinking about adding visibility modifiers to Flabbergast. I'd like some thoughts.

Version 0.13 is released with bug fixes and a JSON importer.

The time on the meeting tomorrow was set to something strange. It's been reset to something sensible (when Dublin, Toronto, and SF are awake).

Post has attachment
Some frequently asked questions about the language design. At the very least, read the last one.

Version 0.9 is out with an SQL interface and automatic documentation generation.

Post has attachment

New release out. In addition to being on Launchpad (Ubuntu PPA), the Java edition is also on Maven Central under `com.github.apmasell.flabbergast`.

Language changes: based on some feedback from +Brian Brazil, I've changed some of the definition operators (?:, %: and !:) to be more wordy (: Required, : Used, and : Now). After making a joke with +Kyle Schaffrick, I've changed the extension for files from .flbgst to .o_0 for the lulz (it's also 3 characters). I've also added Let and Accumulate clauses to the fricassée operation, making it easy to write things like a cumulative sum operation.

I'm currently fighting with a strange bug, and then I will release a new version. In addition to an Ubuntu package, I will also be putting JARs on Maven Central, thanks again to Brian.

Post has attachment
USENIX hasn't posted the companion paper for my talk, so I'm posting it myself. It describes the problems with current config files. Note that there are problems that are beyond what I think Flabbergast can address.
Wait while more posts are being loaded