11 ms·
I am not convinced that urbit is not just some sort of ironic performance-art criticism of computer science. Perhaps it would be elucidating if someone would be
by wyager 11y ago
I am not convinced that urbit is not just some sort of ironic performance-art criticism of computer science. Perhaps it would be elucidating if someone would be so kind as to explain what the point is.
- micaeked 11y agoI'm not involved with the project, but here's what I got: - Programming/computing is very new. - Many mistakes were made. - Due to human stuff, mistakes stick around. - It's pretty clear that computing as it is today is very far from optimal. - What can computing/programming look like if we start from a clean slate?
- mjfl 11y agoNo. I did a project on Urbit for an OS course. It is deliberately obfuscated. For example, take the specification of Nock, the lisp-like "assembly code": https://github.com/cgyarvin/urbit/blob/master/doc/book/1-nock.markdown https://github.com/cgyarvin/urbit/blob/master/doc/book/1-noc... The symbol evaluation is designed to take whoever is trying to program in Nock in circles around the specification. It makes even the most basic operations unnecessarily verbose and hard to memorize. To increment a number, you must put it adjacent to the expression [4 0 1]. So 42 [4 0 1] evaluates to 43, after several steps. There is no reason that an "assembly code" should have a decrement operator that must be evaluated more than once in order to get to the final expression. Hoon, the "high-level" langauge is worse. A function to decrement an input by one is specified by the expression: (a=. =+(b=0 |-(?:(=(a +(b)) b $(b +(b)))))) Like a postmodernist artists asks "what makes art?" and answers that there can be no objective answer, Urbit asks the question "What makes good software engineering?" Unfortunately there are many objectively bad design decisions you can make in software engineering. Forcing even the most basic operations to be incredibly verbose and unintelligible is one of them.
- state 11y agoIs your project online anywhere?
- mjfl 11y agoIt is not. It might still be on the school's network, but I did it back in the spring and our department's network admin might have wiped my account since I graduated. Didn't accomplish too much to be honest, as might be hinted at by the frustration underlying my post.
- yarvin9 11y agoYou can certainly blame our (old) doc for that. Sorry for the bad experience -- we're definitely still at the stage where I wouldn't expect people to be playing with Urbit and not asking for handholding. Even more so this spring.
- yarvin9 11y agoWell, normally, if you want to decrement a, you write (dec a). But yes, if you want to write your own implementation of decrement, you could do it this way. It's just as bad an idea in Urbit as in any other language. Nock is a functional assembly language, so it's not meant as a human interface. I think you mean "increment" instead of "decrement." Yes, [4 0 1] is an increment formula in Nock; 4 is the increment operator, 0 dereferences a tree address in the subject, 1 is the root of the tree; so [4 0 1] means "increment the subject," where your subject is 42. If you know Lisp, you can think of Nock as Lisp without symbols or an environment; instead of having this hardcoded key-value store, the environment, you have a subject which is referenced with tree addresses (1 is the root, n2 is the left child, n2 + 1 is the right child). Is this horribly arcane? It doesn't seem that way to me, but de gustibus non disputandum.
- openasocket 11y agoNock just seems deliberately obtuse. The website boasts that "Nock is also the easiest thing in the world to learn" and that the spec "gzips to 340 bytes", but I can't seem to make heads or tails of it. Sure, you can defend Nock by saying it's not meant to be used directly, but can you give any advantages Nock offers over anything else? Because lambda calculus is even easier to implement and is more intuitive.
- zaphar 11y agoSo I get that Nock is hard to wrap your head around. But that's like complaining that your cpu's machine code is deliberately obtuse. You aren't going to be writing nock unless it's for fun. Hoon may be a little deliberately different which can be construed as obtuse but it actually takes less time than you might think to get up to speed in it.
- openasocket 11y agoI still don't understand why this thing was chosen to be the basis for all of Urbit. What advantages do you get from building on top of Nock vs. lambda calculus or SKI combinators or anything else?
- derefr 11y ago> There is no reason that an "assembly code" should have a decrement operator that must be evaluated more than once in order to get to the final expression. Doesn't this ignore the concept of Urbit's "jets"? You write code that does things in a stupid-but-canonical way; it's then the runtime's responsibility to take canonical patterns and provide optimized implementations. The cool thing is that you get to write a naive interpreter for all existing code in a couple-hundred lines, while also being able to write a good interpreter that makes the same code run quickly. Like regular Lua vs. LuaJIT, but much moreso.
- Rusky 11y agoJets are pretty ignorable. Pattern-matching an incredibly obtuse language against a distributed database of machine language is not in any way comparable to LuaJIT, nor do I see any good way for it to do any meaningful optimization beyond e.g. replacing peano numbers with machine integers.
- derefr 11y agoI would note that Nock is a representation of an ISA for an abstract machine, not a language. Aren't loop-unrolled x64 code, LLVM bitcode, BEAM bytecode, etc., also "obtuse"? In fact, the best thing to compare it to, in my mind, would be RarVM bytecode: another ISA designed to be "forward-compatible" in the sense of ensuring that even the first interpreter will be able to run code from years in the future. Nobody ever sees RarVM bytecode; nobody even realized it existed for decades. It was just there, an implementation detail of the RAR encoding/decoding process, doing its job of enabling the RAR format to change its algorithm over time.
- Rusky 11y agoAbstract ISAs are still languages. And at least loop-unrolled x64 code describes what it's doing straightforwardly, instead of throwing around redundant mathematical abstractions and hoping the interpreter will magically pattern-match them away.
- zaphar 11y agoAt this point I think it's part performance-art criticism and part a serious attempt at rethinking the entire computing stack from the bottom up. Either way it's undeniably fun to play with right now.
- state 11y agoFair! We do a pretty good job of generating this response. The point is that we ought to have a permanent, immutable home for our personal computation that's universally available on the network. Not an app, not a service, but a general-purpose tool that I trust and can program. I have one on my desk, but I want one in the cloud that doesn't feel like flying a 747 (aka being a unix sysadmin). Our approach is simple: the reason this doesn't exist is not because it's not a good idea, but because existing old-school system software is too complicated.
- Rusky 11y agoThis reasoning is great and makes perfect sense. The thing that makes it look like performance art is where Urbit appears to replace that complexity with something incredibly obscure that does not look like it will do anything helpful.
- Niksko 11y agoI think this is just borne out of the stark and daunting difference between the way Urbit works and everything else we're familiar with. I'm daunted by it, but I'm intrigued by it. I'm also pretty convinced that if I devote some time to it, it will make sense. And as a bonus I'll probably understand the rest of my computing a little better as well. Which is why I'm cloning the repo right now to have a play. PS. Big repo. 400mb and counting.
- Rusky 11y agoJust because a system is unfamiliar does not mean that it hides some new insights, though the reverse is often true. Urbit's problems are much bigger than that- it is full of redundancies and poor choices of abstractions, like using "jets" to optimize away peano numbers.
- state 11y agoUgh! So sorry about the repo size. We can archive some old binaries to get that down.
- kungfooguru 11y agoThere is no point.
- unimpressive 11y agoUrbit is a reinvention of the Old Internet with a lot of the principles from ancient computer lore thrown in. (eg. Lisp Machines) It reintroduces the social computing environment, emphasis on the word computing. The Old Internet and timesharing systems like ITS and Unix were based around this model: https://medium.com/message/tilde-club-i-had-a-couple-drinks-and-woke-up-with-1-000-nerds-a8904f0a2ebf https://medium.com/message/tilde-club-i-had-a-couple-drinks-... So you have a standard identity layer, instead of a million little fiefdoms of identity competing for sign ups. You have proper one-to-one connections between individual users on the system, with modern cryptography inbetween. You have a functional, very very small kernel out of which the rest of the system is built. This kernel and core concept is a sort of distillation of the ACID concept from database systems, so that your computer has transactions and forgives mistakes. It bakes the social layer and the community layer of the Internet into the protocol. Urbit tries to be community-aware and politics-aware and handle this gracefully. This sort of formal acknowledgement of necessary human factors in technology is certainly in line with Curtis Yarvin's previously expressed views on social organization. (And is mostly what people are talking about when they say he 'baked neoreaction' into Urbit. This accusation strikes me as intellectually dishonest on multiple levels, but I'd rather not digress on it.) If nothing else it's a very interesting piece of new research in computer science, you should be excited about it. EDIT: Curtis I know you're lurking, can I get an invite?
- yarvin9 11y agoThanks! The appropriate authorities have been contacted :-)
- wyager 11y agoWhy do you think it is a good idea to make things "social" at the OS level? That seems like a very strange abstraction policy. And how is this system "politics-aware"? I'm not even sure what that would entail from what basically seems to amount to a collection of esolangs.
- unimpressive 11y ago>Why do you think it is a good idea to make things "social" at the OS level? That seems like a very strange abstraction policy. Social means a bit more than just Facebook. It also means primitives for things like collaborative editors and coworking spaces, video conferencing, etc. IMO the ideal social system would look a lot like a mix between the old timesharing systems, the early Internet and Douglas Engelbarts "Mother of All Demos": https://archive.org/details/XD300-23_68HighlightsAResearchCntAugHumanIntellect https://archive.org/details/XD300-23_68HighlightsAResearchCn... >And how is this system "politics-aware"? I'm not even sure what that would entail from what basically seems to amount to a collection of esolangs. Well it comes with the community. The way Urbit is structured your personal cloud/ship/etc is intended to be linked up to a community of other users. Politics are part of being social and part of communities. If you don't have a structured way of handling it it'll happen regardless and can be made less ugly with official support. "The part that is stable we are going to predict, and the part that is unstable we are going to control." - John Von Neumann, 1948
- phlandis 11y agoA narrow example, but maybe it will give you a better perspective. Traditionally every app has its own backend and database storage. With urbit your personal credentials live as variables on your ship (personal cloud computer). Apps can then utilize the API. Correct me if I'm wrong.
- powera 11y agoIt is performance art. Any language that brags that addition is O(n^2) is pure performance art.