Re:Juice – Oberon JIT browser plugin (1996)
by pjmlp on Friday February 02, 2024 @05:15AM
(#39227079)
It was used on Oberon System 3, and AOS.
When compiling you had the option to generate proper native binaries, or slim ones to be JITed on load.
Re:Juice – Oberon JIT browser plugin (1996)
by vidarh on Friday February 02, 2024 @05:18AM
(#39227096)
Yeah, I'm aware it "stuck around" in the Oberon world, but it's very annoying it hasn't escaped that niche, and hasn't been iterated on more.
Re:Juice – Oberon JIT browser plugin (1996)
by abricq on Friday February 02, 2024 @07:11AM
(#39227730)
> Franz was one of the people who around that time wrote a report on a proposal that'd enable runtime-loadable interface-based extension
You seem to know a lot about this time. Would you have a reference on this report ? I am quite curious now !
Re:Juice – Oberon JIT browser plugin (1996)
by vidarh on Friday February 02, 2024 @07:26AM
(#39227832)
On a phone and without a reference handy but search for Franz and "Protocol Extension". It's a very short paper, and basically proposed a mechanism similar to vtables, but w/an extra level of indirection to allow whole interfaces to be slotted in, and to have subsequent loaded implementations addressed propagated down the class hierarchy on load.
(I use a similar mechanism of propagating vtables updates down the class hierarchy, but without the extra indirection - at cost of more memory - in my prototype Ruby compiler)
Re:Juice – Oberon JIT browser plugin (1996)
by abricq on Friday February 02, 2024 @07:32AM
(#39227862)
Thank you, I got it: "Protocol extension, a technique for structuring large extensible software systems" [0] ! Hoping to find time to read it soon, and also to look at your ruby compiler !
[0]: https://www.research-collection.ethz.ch/bitstream/handle/20....
Re:Juice – Oberon JIT browser plugin (1996)
by vidarh on Friday February 02, 2024 @09:50AM
(#39229172)
My Ruby compiler is, I'm sad to say, languishing. I got it to a stage where it does compile itself successfully (to 32 bit x86 assembly - 32 bit was still a reasonable choice when I started...), but it has plenty of bugs (and only compiles itself due to workarounds for those in the compiler source to avoid triggering them) and doesn't support most newer Ruby syntax, nor Regexp's or Float's (other massively limitations too). I keep telling myself I should at least fix the bugs at some point and strip out the workarounds, but so many other projects at the moment.
Juice also flows naturally from Franz PhD thesis, which was on JIT compilation of Oberon from what in some sense was a compressed serialized reduced form of the AST instead of bytecode [I'll stress this is a gross oversimplification - his compiler does do more processing, so I guess what is serialized is closer to an IR in tree form than the AST]. I don't know how much that changed in Juice, as I've never looked at it much but from the description it remains at least similar in concept. I've wished more work had gone into that ever since I read his PhD thesis in '94.