Hacker News new | ask | show | jobs
by Ruud-v-A 3645 days ago
I find the original blog posts [1] a really interesting read. Nowadays Urbit is indeed full of buzzwords, “your personal cloud computer” and the like. But initially, Urbit was this [2]:

> Urbit is a new programming and execution environment designed from scratch. Any resemblance to existing languages or operating systems is coincidental, cosmetic, or inevitable.

It was based on this idea: suppose that a different civilization (Martians specifically) had invented computing long before humans. Then by now they would have perfected it. What would their system look like? Urbit is an attempt to rethink computing without the bias of human research and our current intuition. At the heart of Urbit is Nock, a “functional assembly language”. Zero is intentionally used to denote “true” to defy programmer intuition.

[1]: https://moronlab.blogspot.com/2010/01/urbit-functional-progr... [2]: https://github.com/cgyarvin/urbit/blob/master/doc/book/0-int...

3 comments

Zero is intentionally used to denote “true” to defy programmer intuition.

OK, that was just perverse. Except check out the latest iteration of point of sale credit card terminal keypads. "0" is Yes and "X" is no.

For unix processes, exit status zero is conventionally considered success and non-zero is failure.
Now that Urbit is not entirely vaporware any more they regret this, but reverting the decision is not worth the trouble:

https://www.reddit.com/r/urbit/comments/4okcm6/were_the_core...

There are more interesting insights in that thread about Urbit’s unorthodox decisions.

That's normal in Asia. (They swap everything in the UI when porting Playstation games over here.)
Indeed, ine may want to earch for "batsu and maru".
0 == true is also used in C error return values, where nonzero means "false" as in "did not succeed." So it's not without precedent.

It's not a terrible idea. In most types of computing there's often only one way for something to be true but N ways for it to be false.

This is really not the case.

The C language and the standard library are distinct things. C originally did not define any values at all for booleans (true / false), but later implementations did and even in the oldest C compilers (0 == 0) would evaluate to '1', which caused the most repeated lines of C preprocessor input ever written:

#define TRUE 1 #define FALSE 0

Guarded by some #ifdefs if your compiler supported that.

Some standard library functions return nonzero on error (which can be < 0 or > 0), zero on 'success' which is not the same as true, and others (annoyingly) return 1 on 'success' or 'true' (such as the isalpha function/macro).

So this is some kind of art project? I was trying to figure out why someone would actually want to use it, but maybe it is meant to be looked at and discussed instead of being used?
It definitely started out as one but--and this is one of my favorite things about programming-- it's very possible to be an art project and a... not-art project at the same time.