1. [Comment removed by author]

    1. 8

      “it seems that it’s so difficult to make a web browser that there’s only really 3 or so fully implemented, up to date ones.”

      That’s a simple, great point. Obviously too complicated when it takes massive, development teams by large corporations to build and maintain them. The biggest ones also use codebases that go way back in time.

      1. 10

        Well, there’s also only 3 or so fully usable desktop operating systems. And whatever the web was originally intended to be, it is becoming an operating system.

        1. 4

          But the criterion that prevents a lot of operating systems from being “fully usable” is the lack of a fully functional web browser. Plan 9 for example falls short of being “fully usable” because the task of porting Firefox is too daunting.

          I think OpenBSD faces a similar issue, where today’s web requires HTML5 with hardware acceleration, which is apparently not simple enough for them to write themselves (maybe someone who knows more about this can weight in).

      2. 5

        The software necessary to function in society should be implementable by a handful of programmers. When the complexity of a core technology reaches the point where you need thousands of programmers just to maintain the software and keep up with “progress,” it poses severe threats to freedom and democracy.

        1. 1

          How to factor a full-featured web stack into simple, separate concerns is, itself, a very tough engineering challenge, but I think it’s fundamentally tractable. We would have to re-design the visual and programmatic elements of the modern web on much firmer theoretical foundations. This would mean getting rid of HTML/CSS, getting rid of javascript, etc.

          The JavaScript part we’ve probably figured out. There are all sorts of elegant memory-safe computation systems that can be compiled to efficient machine code. Something like a Spineless Tagless G-machine would probably work great, and be simple enough that many people could write a (slow) interpreter with little effort. Experts could write compilers to fast machine code while maintaining security guarantees by construction.

          The visual/media part I’m not so sure about. We have some clean ways of mixing UIs with code (like query algebras), but none of them stand out to me as particularly simple or elegant, and I can’t think of a graphics format that can do the kind of stuff we expect from HTML yet is theoretically sound. Such things may exist, but I’m unaware of them.

          1. 2

            We have some clean ways of mixing UIs with code (like query algebras)…

            What do you mean by that?

            1. 1

              I always wondered if something like WebAssembly + WebGL + Web Audio + Fetch API could work, with UI frameworks and layout engines delegated to CDN hosted libraries.

              Browsers still need to offer a bunch of APIs for various things, though. Stuff to inspect current context, open/close windows/tabs, manage passwords, etc.

          1. 7

            Do you use Rust as your daily driver for your work/hobby stuff?

            It was my main language at my last job. My current hobby project is written in Julia but might get pushed into Rust when it settles down.

            What language features do you leverage from Rust, and how do they make those projects easier?

            Why aren’t you using your non-Rust languages for that project?

            Control over memory layout. Predictable performance.

            I do DB and PL research. It’s just not feasible to write a competitive query engine in a language where everything is boxed on the heap, and where capricious gods (JIT, GC etc) can reach in at any time and ruin your day. C++ is the standard, but I’m more productive in Rust because I don’t have to be on guard all the time, because the language core is much simpler and because the stdlib and cargo simplify a lot of day-to-day tasks.

            There are lots of other features that are nice-to-haves - static checking of error handling, easy to embed, awesome community - but it’s control without insanity that really matters for me.

            The other usecase where I can imagine reaching for Rust in the future is general thriftiness (ala COST). People like to say that programmers are expensive and hardware is cheap, but as soon as your program doesn’t fit on one machine you have a distributed system and that costs programmers. Similarly for having to deal with cache invalidation bugs because your server is too slow. Any time I’m reasonably sure that performance will make my life simpler, I’d be tempted to reach for the not-handicapping-myself-from-the-start option.

            What could Rust do to make your life easier?

            Things that are happening anyway:

            Things that probably noone else cares about: