Everything about ooc
ooc is perhaps one of my proudest achievements, but at the same time it's one of the most annoying thorns in my side.
The main reason is that its design is flawed, and some things can't be easily fixed at this point. Now don't get me wrong: every design is flawed to some extent. Design, either when done by a lone coder, or by a committee, never comes out "perfect" — ignoring the fact there is no universal/objective measure of "perfectness".
I've spent the past few weeks after rock 0.9.8's release working on some of the neglected aspects of ooc, namely tooling support and performance.
My kingdom for a vim plug-in!
In the previous article, We've built a nagaqueen-based tool that can parse one ooc file, detect class declarations and print its doc strings. Today, we're making a bit of infrastructure for our app to support more sizable projects.
Source path and lib folders
Today I decided to release sam 0.2.0. There are only a handful of new features in there but it's still releaseworthy! See the previous sam announcement for more information on the tool itself.
Source path and lib folders
In the previous article, I gave brummi a go. However, we've seen that it still doesn't fit our requirements: we need a tool that's fast, easy to install and configure, produces beautiful and usable docs.
A few days ago I posted an ooc quine. But while browing HackerNews, I found an even shorter one. The shortest!
Here it is, in its full glory
In the previous article, we saw how to use NaturalDocs, a language-agnostic documentation generator. Today we'll see how to use brummi, a tool specific to ooc, written by Friedrich Weber.
Generating .json files
While preparing my next post about ooc documentation yet again, I stumbled upon an old ooc quine of mine. Here it is in integrality for your pleasure:
q := 34 as Char l := [ "q := 34 as Char" "l := [" "]" "for (i in 0..2) {" " l[i] println()" "}" "for (i in 0..12) {" " q print(); l[i] print(); q println()" "}" "for (i in 2..12) {" " l[i] println()" "}" ] for (i in 0..2) { l[i] println() } for (i in 0..12) { q print(); l[i] print(); q println() } for (i in 2..12) { l[i] println() }
Documentation in ooc land has sucked for quite some time. The standard response is pretty much: "use the code, Luke!" — which is fine when doing small projects that don't matter much, but not so when you want to get serious.
Just 8 days after the last release, rock 0.9.6 is out.
To update, run git pull && make rescue
as usual. To install from scratch,
clone the repo, cd into it, and run make rescue
from there - it'll download the latest bootstrap, compile itself from
C, then recompile itself from ooc.
rock 0.9.5 is out! It's the meanest, slimmest, baddest rock release yet.
To update, run git pull && make rescue
as usual. To install from scratch,
clone the repo, cd into it, and run make rescue
from there - it'll download the latest bootstrap, compile itself from
C, then recompile itself from ooc.
I want to write blog posts, but right now I have too much to do.
So instead, here are bullet points:
-
I wrote an ooc tool named sam, which helps you keep your git repos up-to-date, and helps to remind you what to push when switching workstations. It's pretty neat, and portable.
The ooc language is known to be friendly to C libraries, and we have a slew of them covered on GitHub, but one common hurdle is how to correctly declare extern functions.
Argument types
Unfortunately, the ooc language could have better documentation. In the meantime, I'd like to blog about about some features that might not be very well-known.