Live data from Hacker News

SCRIPT-8: An 8 Bit Fantasy Computer Programmed with Javascript

script-8.github.io

61–63 of 63 posts

Re: SCRIPT-8: An 8 Bit Fantasy Computer Programmed with Javascript

#61

Unlike most, I don't see a problem with it being Lua or JavaScript. I'm just curious why people pick such high-level languages in the first place. I'm planning to make a fantasy computer myself (basing it off the z80), and would never think to make it scriptable in something other than machine code.

> I'm planning to make a fantasy computer myself (basing it off the z80)

This is so much fun, I did this last year, although initially it only ran inside Unreal Engine. Later on I did a "native" port to Linux. It can run CP/M 2.x and Wordstar (https://i.imgur.com/rIY1he8.png), it had a telnet+VT100+zmodem client for accessing BBS's (https://i.imgur.com/VszSPkB.png), and I even added a graphics mode later on (https://i.imgur.com/t3kreQM.png).

I'm working on a 68000 based one now as well. It's a really great learning experience.

Re: SCRIPT-8: An 8 Bit Fantasy Computer Programmed with Javascript

#62

Earlier quoted context omitted.

Honest question: pointing out programming design warts that allow for WAT-level code[0] is perfectly valid, and I obviously prefer elegantly designed languages. Having said that, how realistic are the odds of being bitten by these issues when using CoffeeScript? Also, if our point of comparison is Lua and MoonScript, how do those compare? EDIT: regarding TypeScript and PureScript, can those be compiled in the browser…

> how realistic are the odds of being bitten by these issues when using CoffeeScript? In my experience, minimal if you know the language well and can work around its quirks. Having said that, I prefer working with a language that doesn't require much time to tame and let me do concrete work, at the same time holding my hand when necessary (because of time schedule and pressure and so on). This is less of an issue wit…

> About typescript and purescript being compiled in browser, I have never even looked into such approach, they feel unrealistic, because from the top of my head it would require a compilation tool written in JS

Eh, not really: you could write the compiler in any language that compiles to JS, then use the compiled output as your compiler. In the case of TypeScript or PureScript you could basically write a self-hosting compiler this way.

Walt is a compiles-to-WASM language that has partialy done so[0]. Its compiler written in JavaScript, and the generated compiler is also JavaScript. While not self-hosting, the guy developing it has rewritten parts of it in WASM to figure out what the best language design for strings and related JavaScript interop would be.

> which is not particularly efficient for this kind of task that benefits from parallelization

First of all, isn't WebPack written in JavaScript? Seems to do just fine.

Also, if we are talking about a somewhat modern browser that supports Web Workers parallelization is perfectly viable, no? Add Web Assembly and TextEncoder/TextDecoder in the mix and things could get even faster[1][2][3].

(The main performance issue I see is that due to SharedArrayBuffers being disabled (for now), each worker would need its own Uint8Array copy of the source input[4])

> Can we dump it into a file and load it programatticaly? I would be surprised if we could.

Saving a file is easy these days, just use a Blob[5].

> Eval() the output? Not without some serious security checks that would further compromise performance.

Creating Function object works. It just requires a string as input. I also don't see why this would be more insecure than compiling the same source string ahead of time - you end up running the same code. This isn't the typical user-context in which eval is dangerous.

> So I believe there is no motivation in not pre-compiling and distributing the result dist code.

You are arguing this from a technical point of view, which misses the entire point. Namely, that client-side compilation allows for browser-based apps, demos, and sharing. It greatly lowers the threshold to trying things out.

You may dislike CoffeeScript, but being able to try it out in the browser is quite a good sales pitch[6].

For a more ambitious example: Observable is a notebook environment similar to IPython, but for JavaScript, and with one of IPython's biggest quirks removed: cells track dependencies on other cells and re-evaluate as necessary[7]. The server is there for cloud storage and remote collaboration, allowing you to instantly share the notebook. However, I think it does most, if not all of its compilation client-side, since it still works when you are temporarily off-line (also, Jeremy Ashkenas is part of the developer team).

The aforementioned compiler for Walt can easily run in the browser, so last year I tried combining the two. It took me only a couple of hours to get it working[8].

Of course, you lose the benefit of a developer environment made for the language (but IIRC supporting compiles-to-JS languages is on the long-term Observable roadmap), but still: being able to quickly try out some simple WASM code without needing anything except a modern browser is quite powerful.

[0] https://github.com/ballercat/walt

[1] https://dzone.com/articles/webassembly-web-workers

[2] https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder

[3] https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder

[4] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

[5] https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob

[6] https://coffeescript.org/#overview

[7] https://beta.observablehq.com/

[8] https://beta.observablehq.com/@jobleonard/compiling-walt-in-...

Re: SCRIPT-8: An 8 Bit Fantasy Computer Programmed with Javascript

#63
post #60
post #59

Earlier quoted context omitted.

But BASIC on those computers was interpreted, and thus far too slow. Even the C compilers weren't that great. Every real game, AFAIK, was written in 6502 assembly.

True, yet it made lots of kids happy to try out programming their own games and now they work across the industry, including myself. Not everything is about the ultimate performance.

The point is that it's not "javascript interpreted in machine code", which in my opinion would make these computers far more fun, otherwise they're just fancy game frameworks.
Post reply on HN