JS is 22 years old today.

I joined Netscape on 4 April 1995, lured by jg&mtoy to "do scheme in the browser". Upon joining I found (1) headcount wars in pre-IPO NSCP left the client group unable to hire me as planned, so I joined the server team; (2) Sun was doing the Java deal with Netscape. Sun viewed Netscape as the vector for its Java virus, didn't care about integration with HTML -- but Bill Joy "got it" and along with Marc Anddressen supported me doing "Mocha". After a month on server side

(where I worked with the McCool twins and Ari Luotonen) I transitioned to the client team under Tom Paquin and dove into JS. On May 5, 1995, I started by implementing a JS scanner/parser in a day or so, then a bytecode interpreter (as the Livewire server product wanted to avoid recompiling from src on every request). I also wrote a decompiler (this bit back; my friend Lars Thomas Hansen formerly of Opera had similar experience). I was aiming for demo day, Monday, May 15, 1995, & hit the target.

My demo was a "JS console" via a javascript:-URL-addressed post-method build-in form request handler. The first JS console. After showin basic math and the recursive Fibonacci function, I had a crash, which I back-traced in gdb and joked "everyone's to blame!" as my code, Lou Montulli's netlib, Eric Bina's layout engine, and jwz's X front end were all on-stack, lol.

I had designs on ebina's layout code, but it parsed very quickly (modems!) into a flat display-list-like structure - no hierarchy.

So the "DOM level 0" was very flat: document.{links,forms,anchors,tables} and indexing deeper from there. The ability to script form submit gestures was great. The Image constructor came later, in Netscape 3 -- along with <script src=> -- but even in NS2 people could build "Single Page Applications" (SPAs) via frames/framesets/onclick=javascript: URLs. It was awesome. Also crashy and insecure as hell.

I reckoned based on Butler Lampson papers that I needed a pricipal identifer: scheme:host:port

Follow

(correction: s/tables/images/ -- tables were not reified in the early DOM but their image/form/link/anchor contents were. fun bug where ebina's 2^n table layout nesting depth n created n instances from one markup element, which combined with radio-button-inspired auto-arraying of multiple same-name= attribute value element objects. last one pushed was the real one!)

· · Web · 0 · 0 · 0
Sign in to participate in the conversation
Mastodon

Server run by the main developers of the project 🐘 It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!