
Is it a language, or an operating system, or a virtual machine? - tvvocold
http://akkartik.github.io/mu/
======
acveilleux
Oh, add a transactional hierarchical DB and you've got yourself a clone of
MUMPS.

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

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

~~~
akkartik
Nah, that's ok. Thanks!

------
paxcoder
>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.

------
derefr
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.

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

------
tekknolagi
Didn't expect to see this on HN :)

------
WorldWideWayne
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](http://www.urbandictionary.com/define.php?term=mu)

~~~
fancy_pantser
Aaaaaand I'm officially old.

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

[http://www.catb.org/jargon/html/M/mu.html](http://www.catb.org/jargon/html/M/mu.html)

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

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

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

~~~
akkartik
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.

~~~
jdeisenberg
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.

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

~~~
jdeisenberg
Thanks. Seems improved.

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

