Nice work. One note: what you defined in your example is an algebraic data type, but not a generalized algebraic data type. The data constructors' are implicitly defined, as opposed to being explicitly defined. I liked this wiki page as a guide <a href="https://wiki.haskell.org/GADTs_for_dummies" rel="nofollow">https://wiki.haskell.org/GADTs_for_dummies</a>
Looks like you had fun making this project!<p>I'm throwing out a challenge for you:<p>What will Verve do well, that no (major) language does well?<p>I hope you continue developing it, and that you keep having fun creating it.
Hi! Nice work!<p>Reading through it, I'm unsure whether the VM is necessary or included. To me, 'unnecessary' and 'runs on it by default' seem slightly contradictory, or at least surprising. I don't have time to read through your source code right now, but if you're not running on your VM, what output do you produce? elf executables against the x86-64 Linux ABI?<p>I was also surprised that so many terms in your post have links to the definition in Wikipedia. After finishing the article and scrolling all the way down, I got to your paragraph that explained your rationale for doing so, so that's fair. However, I admit I expected these terms to link to some Verve documentation about that particular component or concept to explain details about your implementation. I realize that you may have a different audience in mind than, say, the Haskell or Python docs, but I wouldn't expect those sites to link to dictionary definitions at all.<p>Thanks for posting!
Looks really cool! I'm gonna have to watch this one.<p>I cloned the repo locally to try to build it (ubuntu 15.10) and hit 9 of compile errors. My stdout and sterr are here: <a href="http://sprunge.us/TdXb" rel="nofollow">http://sprunge.us/TdXb</a>
Verve? Okay, nostalgia drive, activate:<p>...<p>Residents of the San Francisco Bay area should also check out Verve, a coffee roaster based out of Santa Cruz. There's two locations (the Opal Cliffs one on 41st Ave is nicer, IMHO, and easier to find parking for - plus there's the cliffs/beach nearby). It's one of the better roasters, the cafes have good atmosphere, and it's just one of those things you miss when you move away from California.<p><a href="http://vervecoffee.com/pages/locations" rel="nofollow">http://vervecoffee.com/pages/locations</a><p>We now return you to your regularly scheduled programming language.
> <i>But first of all, why am I writing this language? The short answer is: For fun.</i><p>> <i>One of the first things I usually hear is “Why don’t you target LLVM?” (or some other runtime), and the answer is: because that wouldn’t be as much fun. Sure, it’d be much easier to get “production ready” that way, but as I said, the goal here is really to learn and have fun.</i><p>This is awesome. So glad to see people writing languages just for fun.<p>For anyone else into that kind of thing, check out #proglangdesign on freenode. Several really smart people who also just want to write languages for fun often chat there, about language design and implementation.
What I want to see is a functional language that embraces structural typing and extensable records/variants, instead of nominal typing. This would be an excellent fit for a world full of SQL databases and JSON documents. It would also be a considerable implementation challenge!
I have a question about the "extern" keyword. If this is a interpreter, how this can possible work? ie: How is the interface between the host and the language?<p>I'm doing a interpreter (F#) and I have find that surfacing functions from the host is not that easy as I have imagined before.