Hacker News new | comments | show | ask | jobs | submit login
Is it a language, or an operating system, or a virtual machine? (akkartik.github.io)
25 points by tvvocold on June 23, 2015 | hide | past | web | favorite | 20 comments

Oh, add a transactional hierarchical DB and you've got yourself a clone of MUMPS.

Author here. OP isn't exactly the best link to start reading about this project. Please check out http://github.com/akkartik/mu#readme and tell me what you think.

Do you want us to change the URL to that one?

Nah, that's ok. Thanks!

Heh. MUMPS has a significantly higher order operating system/semantic language than a lot of other languages from the same 1960's era.

>Make simple changes to any project in an afternoon, no matter how large it is. How? How do you help me "orient myself"? What do traces have to do with this? And please don't say mu.

A complete tangent from the project itself, but it's important to get in the mindset of asking the question in the title about every language you meet. It's a step on the path to enlightenment.

• Ruby: a language; now also a VM. Its language semantics can exist on other VMs and people still consider that "Ruby"; nobody really uses the VM outside of the language. So, we call Ruby a language. However, its language semantics require a lot of the VM (the ability to redefine methods of existing classes, for example), so one could say Ruby has its own Abstract Machine that a lot of VMs just happen to be adequate implementations of already.

• Erlang: a language, and a VM (itself called BEAM.) The VM's semantics are the important part; the language is just an arbitrary syntax. Other languages on the BEAM VM (or rather, the Erlang Abstract Machine, which the BEAM VM implements) all "taste" very strongly like Erlang, because the flavour of Erlang comes from the VM, not the language. (And then "OTP" is the operating system for that VM. You could write your own, but I'm not sure anyone has. All the current BEAM VM languages assume they're running inside OTP.)

• C, C++, Rust: different languages, all for the same Abstract Machine, which has no real name but assumes a "C Runtime" with POSIX-like abstractions is available. You could call it the "C Abstract Machine": it's the effective assumptions of hardware instruction-set that allow one to talk about things like "signed pointer-length integers". When something hits "undefined behaviour" in one of these languages, it's behavior undefined by the C Abstract Machine—likely because different ISAs do different things and it's too costly to try to smooth that over. (Note that the POSIX abstractions could be said to be an "abstract operating system" of sorts, one which is implemented by multiple different real C-AM operating systems.)

• Smalltalk: its own syntax, its own OS, and its own VM. All three are just known as "Smalltalk" in general, with the name of the implementation prefixed. Simple!

• Java, C#: languages that created VMs (the JVM and the CLR) that are now more important than those languages. The JVM has no operating system, just a bunch of libraries. The CLR has an implicit dependency on a lot of Windows to be its operating system; Mono and Wine have a weird relationship because of this.

• Lua: a language. The actual VM is irrelevant (there are multiple), though the "Lua abstract machine" has the interesting requirement of being an embeddable sandbox. No operating system; everything inside the VM comes in along with the application.

• JavaScript: a language that spawned an abstract machine with three choices of operating system: a very small one (Node), a very large one (the browser runtime), and one in the middle (Macromedia Flash.) Node-Webkit and Electron are examples of a non-embedded instance of the JavaScript abstract machine running the browser OS.

C really is defined in terms of the C abstract machine, in the specs, essentially a naive interpeter.

Didn't expect to see this on HN :)

I had to look up what it means to be answered with just the word Mu. I've seen it before, but I never really bothered to look it up. The humorous explanation is here - http://www.urbandictionary.com/define.php?term=mu

Aaaaaand I'm officially old.

I learned the word from JARGON.TXT, a text file passed around BBSes in the 90s.


Dates back to at least 1979 with Godel, Escher, Bach.

Actually, to a long time before that: https://en.wikipedia.org/wiki/Mu_(negative)

Author here. I'm curious, did you click on the "Robert Pirsig" link?

Interesting concept, but the examples are extremely difficult to read because the color contrast on the black background is too low.

Thanks for the feedback! Could you possibly send me a screenshot of how it looks on your screen? My email is in my profile and also on the OP.

Done. It's a combination of the color and the small font; the black tends to "swallow up" the edges of the white characters, and the teal and red are difficult to distinguish. Also, probably my eyes are significantly older than yours are.

Many thanks! I can certainly increase the font size, that seems like an easy way to improve matters.

Thanks. Seems improved.

I made an x86_64 operating system with a compiler. The compiler compiles a dialect of C/C++. It operates both JIT and AOT.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact