Well, that was fast

Blink

You blink, and six months go by. That’s what having kids is like, apparently. I could swear we were just gearing up for Thanksgiving, and now it’s spring and the daffodils are springing up. I just realized how long it’s been since I’ve even seen some of my closest friends. I used to joke about asking “What year is it?” And now, well, that question is starting to seem more legitimate every day.

But haven’t got a lot of news, really. Lots of time spent at work, and a business trip to California. Saw my sister and brother-in-law out there, and their little girl. Worked on the house a bit during the cold months: We have a proper ladder to the garage attic now, and the garage is not exactly clean but cleaner than it used to be. Spent some of the time going to doctors for my injured foot. And Alan’s growing fast; he’s at nearly 18 months now and running around like a lunatic. Kid’s cute as a button, and my wife and I couldn’t be more pleased.

Got a little bit of work done on SpaceMonger’s scanner, but nothing really notable. I’d like to get the core scanner 64-bit compatible and change how it shares data between threads; that’ll improve both performance and stability, and early experiments with it have been promising, but again, time just slips away from me.

Smile

I’ve made a handful of commits to the Smile interpreter. It consumes a lot of my driving-to-work and standing-in-the-shower brain cells. The interpreter is slow as heck (s’what I get for writing it in C#), but the performance can be fixed over time (or a better interpreter can be written). More importantly, it works, and is really quite unlike any programming language I’ve ever used, and I’ve used quite a lot of them. Smile reads simply, a little like a mash between BASIC and JavaScript and Ruby, but it’s actually Lisp and Smalltalk under the hood: Stupid-crazy powerful. I can do things in one line of code in it that would have required large whole programs in C. I don’t have macros or continuations yet (and you have no idea how much I want both of those), but I still can’t get over the fact that it works. This bizarre idea I had fifteen years ago that you could add an object-oriented syntax translation layer on top of Lisp to de-Lisp-ify it actually works, and not only looks good but feels good.

I own smile-lang.org, and I’ve been thinking about possibly publishing the interpreter there for download. I have some (hidden) documentation there right now. I want the interpreter to be open-source — I’ll probably host it on Github, and the source is under an Apache license — but I’m still nervous about sharing a work-in-progress. Things still change in it as I work on it, and as we found the other day, some programs from last year wouldn’t work under the latest interpreter. Many would, but a few were quite busted.

It’s a tough question for me: Share it, and let people complain that stuff is incomplete and some stuff doesn’t work; or keep it private until it’s more polished?

So I’m opening up comments on this posting, because after a year of working on Smile, I really can’t decide about sharing it. If you have a thought over the next month or so, feel free to write a comment, as long as it’s constructive. If the crowd leans toward sharing, I’ll do that; and if not, well, I’ll keep muddling along as I have been until the code’s pretty solid in, say, 2017.

Anyway, that’s that. It’s late, and I’m tired. And yes, 9:30 PM is apparently now late. You see what having kids does to you?

When you’re Smiling

Every once in a while, I go back and reread the Reddit thread where they were first talking about Smile. Each time I read it, it’s a reminder of what I’m up against. There are a lot of interesting notions about what’s good in a programming language; everybody has their own pet feature: It has to be as fast as C! It has to allow infinite threads! It has to be 100% type-safe! It has to be type-inferring! It has to be designed for building web services! Did you see how X implemented generics!? And you’d better not leave out Intellisense!!!

It reminds me of back in the ’90s when I worked with this lady who was convinced that client-server would take over the world — by which she meant custom apps running on PCs talking to mainframes. Our worldviews and past experiences skew our expectations toward what we want, and the future often doesn’t play out the way we hope or expect.

(This is gonna be a long post, and I’m going to talk a lot about Smile, including some philosophy and history, a deep-dive into the core syntax, and a bunch of additional examples at the end. I feel like writing a bit on one of my favorite topics. Don’t feel obligated to read the whole thing.)

Continue reading “When you’re Smiling”

And that was a year

Alan

My son turns one year old tomorrow. Boggles the mind. Feels like he was born yesterday, or last week or something. This should explain pretty well where I’ve been lately. He’s a cute kid, and incredibly photogenic and well-behaved. My wife and I are really lucky.

But, yes, he’s turning one, and my wife wishes he was still a cuddly tiny ball of joy, and instead he’s now a giggling toddler. This weekend, we’ll have everybody and their brother’s uncle’s cousin’s nephew’s former roommate dropping by for his birthday party. Gifts have already started filling the hall, and I’m getting this weird feeling that I don’t own the house anymore, even though my name’s on the mortgage. The place is gonna be a madhouse, but the kidlet’s gonna have an incredible first birthday party.

SpaceMonger

Sales of SpaceMonger 3 are continuing nicely, courtesy of my friends at EdgeRunner. It’s really nice to be able to sit back and think about the algorithms instead of the business model. Some time between SM 3.0 and whatever the next really major version is (3.5? 4.0? I’ll leave that to EdgeRunner’s branding gurus), I’d really like to rebuild SM’s scanner from the ground up. The original design was decent, but I’ve had a better model in my head for years that would make its already-quick scanning even faster. The new design uses crazy stuff like lock-free queues, and functors as messages, and sector-ordered scanning to avoid head seeks, and would be awesome, and that would open up a lot of interesting possibilities for the future for things like persistent scans and automatic background scans — if I could find the time to code all that.

Continue reading “And that was a year”

Continuation

I’m quite overdue for a status update, so here we go.

I spent most of July with a busted ankle. Crutches are fun, I tells ya. That helps sum up the whole lotta nothin’ I did this month. It’s a really bad sprain I got late June, and it took many weeks and many doctors, and it’s still not fully healed yet, but at least I’m not on the crutches anymore.

Oh, you want to know more about Smile, right. Y’all come here to find out what I’ve been coding, not for personal stuff. So let’s talk about Smile.

The language grammar is now fully implemented in the interpreter, and a number of bugs in the methods on the core objects have been fixed. It has a REPL now, which makes experimenting and testing much easier.

Continue reading “Continuation”

Uniconundrum

I really want to get the Unicode support in Smile right. I really do.

The unfortunate thing is that it seems there’s no consensus on what “right” looks like. Some people argue that UTF-8 is the right answer, some argue that UTF-16 is the right answer, some argue that UCS-4 is the right answer, and if you ask a hundred people, you get a hundred different answers as to what’s right.

Y’all are complicatin’ my life ‘cuz ya can’t agree on nothin’, I tells ya what.

Continue reading “Uniconundrum”

Let there be Unicode

So a few weeks ago, I was reading this essay by Ramsey Nasser. I’ve debated back and forth several times as to whether Smile should keep its strings and identifiers as 8-bit characters, or whether they should be upgraded to full Unicode. It’s a tough question.

On the one hand, I’m trying to build a language that will be able to grow well with the needs of the future, and the future argues for Unicode. There are a lot of people out there, and not all of them speak English. Or read or write English. As Nasser notes, Arabic is poorly supported by, well, everything, and there’s only a few bajillion people out there speaking Arabic. (It so happens that Arabic is possibly a pathologically-bad worst case for programming language support, too, since it’s a proportional cursive writing system and not fixed-with, with concepts like initial, medial, and final forms, instead of a single letterform per phoneme, and for the icing on the cake, it writes in the dead opposite direction of most other languages on planet Earth.) And beyond Arabic there’s Chinese and Russian and Devanagari and Japanese and a thousand others, and a really good future-proof programming language ought to be able to support all that in a very natural, native kind of way.

Continue reading “Let there be Unicode”

Time keeps on slippin’

Well, that was a quick month.

So what’s happened? I’m a married father with a baby, so family eats up a lot of time. And there’s that full-time employment thing I do most of the week. And a secret project I can’t tell you much about but that you’re gonna love (psst, that link’s not a link yet :-P). And yard work, and chores around the house; with spring comes mowing and mulch and weeds. We also had our basement flood when the big rainstorm came through last week, and pumping out that water and cleaning up afterwards was just loads of fun.

But you probably don’t care about all that; what most of you in reader-land care about is Smile, this suddenly-notorious little programming language I’ve spent so much of the last decade-plus thinking about and working on. So let’s talk about that.

I’ve been busily shoring up the implementation of the interpreter, trying to knock out bugs and fix issues, getting it to the point where it at least parses and executes the whole language correctly, and is a full implementation of both the core language and the base-level libraries. I’ve also been writing documentation, lots and lots of documentation, so that when you do get your hands on a copy of it, you won’t just throw your hands up in disgust and confusion, and you’ll be able to learn it and try demos and look up answers when you don’t understand things. This has been a lot of work, to put it mildly, and there’s a lot more to go.

Continue reading “Time keeps on slippin’”

A couple more responses to Reddit

There are a few posts on Reddit about this that I just had to give direct replies to.

I always thought lisp was a platonic form

Lisp is not really a “platonic form,” although really what should be argued is the number of operators required for Turing-completeness. Lambda calculus could make a better claim to something like that, although it’s a Turing tarpit. Lisp had a certain degree of elegance by being able to describe its own evaluation using seven fundamental operators (or five, or six, or eight, or whatever, depending on who you talk to). But you can define a Turing-complete language using a single operator. Even the simplest Lisp is a lot bigger. Smile has about a dozen fundamental operators (and its unique parsing/translation layer): That core is not as small as McCarthy’s Lisp, but it’s not exactly a gallumphing dirigible either. That said, of that, only six or seven of those operators are truly necessary; you can write a simple but working eval function for Smile in Smile with just that much, and one of the sample programs I’ll include is exactly that.

I suggest Sean release the language specification and let alternative implementations begin.

Doesn’t there have to be a first implementation before there can be alternative ones? I’d like to get the formal language specification nailed to the floor and etched in stone — and build good conformance tests — before really thinking about alternative implementations. When I’m done squishing bugs in the interpreter, and I have enough documentation that people can learn Smile and become comfortable coding in it, that’s when it’s time to start talking about alternative (faster) implementations. Right now is just too early.

That said, the current interpreter has the Apache open-source license stamped all over its source code. You will be able to get your hands on it from stem to stern, optimize it, clone it, and rebuild it to your heart’s content — when it’s ready for the general public, which it definitely isn’t yet.

> Actually Smile code is very similar to Rebol however it’s exponentially more powerful

> what does that mean?

I don’t know either.

So now what?

I’ve been pondering this question all day: What the heck do I do next?

The intarnetz has discovered Smile, which is kinda cool, in a terrifying sort of way.

But the language is still barely in its infancy. I have a semi-working interpreter (release package 0.3!), but there are lots of bugs and some stuff is far from built. The language grammar is pretty well nailed-down at this point. But the libraries are severely lacking, even for really common operations, and even a few of the standard data types don’t exist. I have some documentation, but it’s far from complete.

Yet people want to know more. They got a taste of something interesting, and for a fleeting moment, it’s become news, after a fashion. I don’t want to starve and disappoint potentially-interested folks, but I don’t want to give out junk and crush what could be something pretty neat.

So tomorrow, I’m going to talk with some folks at work who’ve been following Smile through its development, and we’ll see if our brain trust can figure out what a good next step is. I’m a coder: I develop algorithms, not marketing plans, and I’d rather stick to what I know.

For tonight, I got the current Smile interpreter running under Mono on Linux, so w00t on that.

Anyway, uh, stay tuned, I guess.