[Vm-dev] VMMakerJS

Eliot Miranda eliot.miranda at gmail.com
Fri Oct 10 07:30:27 UTC 2014


On Fri, Oct 10, 2014 at 12:27 AM, Bert Freudenberg <bert at freudenbergs.de>
wrote:

>
> Is there interest that I add the JavaScript code generator to the VMMaker
> repository? The code is currently in the SqueakJS repo (*), but I could
> additionally keep a copy on source.squeak.org.
>
> This is (unsurprisingly) somewhat of a kludge. I had to work around
> pointer arithmetic (because unlike Smalltalk's VM simulator I cannot
> override + or at:put: in JavaScript) and emulate type casts (short int*? JS
> will laugh in your face. It doesn't even have integers. Double-precision
> float is all you need). Bit shifts are interesting, too, because shifting
> by 32 does not result in 0 as you might expect. And division gives you a
> float, and mod is off by 1 with the wrong sign etc.
>
> And then there's cCode:inSmalltalk:. Fun one. I ended up having a
> translation table with a JS snippet for every C snippet. And a bit of magic
> sprinkled on top. Don't judge, it serves its purpose, namely generating the
> plugins that do not depend on libraries or other external code. And that's
> actually not that few, 17 total:
>
>         https://github.com/bertfreudenberg/SqueakJS/tree/master/plugins
>
> But it works, and is almost as efficient as my hand-written code. I was
> able to get rid of 1200 lines of my own BitBlt code that almost worked, and
> use the actual BitBlt implementation with all its nooks and crannies. And
> having a LargeIntegersPlugin makes a real difference in performance. And
> ZipPlugin too. Etc.
>
> The generated code even looks quite nice, modulo excessive parens.
>
> However, the JS code generator remains ugly, and is less than general. I
> wonder if some of the C-isms should be replaced with more general patterns.
> The memory access functions are a step in the right direction I think.
> Although I think they always should use a base (oop+baseHeaderSize would be
> my preference) and offset. This would make it rather simple to map to JS,
> and with today's optimizing C compilers and modern CPUs, does it really
> make a difference to write ptr++ instead of ptr[i++]?
>
> Anyway, I'm not really complaining, Slang was intended as just being C
> with, so it's no wonder people use it like that. The type declarations help
> immensely in figuring out what's going on automatically most of the time,
> and I kludged the rest. Without modifying a single line in the original
> plugins, so far. Of course, if the plugin code changes I may have to adjust
> the code generator.
>
> Err, that turned out longer and more rambling than I intended. I really
> just wanted to know if I should copy it to the main VMMaker repo?
>

Of course you should.


>
> - Bert -
>
> (*)
> https://github.com/bertfreudenberg/SqueakJS/tree/master/utils/VMMakerJS.package/JSCodeGenerator.class
>



-- 
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20141010/534f520c/attachment.htm


More information about the Vm-dev mailing list