a little more webassembly
Posted 2019-05-27
Blog
Articles- terminal.d gets clipboard functions, ldc 1.20 out.
- DConf keynote speaker announced: Lua architect Roberto Ierusalimschy, Named args DIP discussed
- February 3, 2020
- Adam's terminal suite explained
- Understanding mixin templates, terminal.d improvements
- My attribute-by-default proposal. Also dmd 2.090 came out.
- DConf 2020 announced: June 17-20 in London. @safe by default debated. Adam did: Android, JNI, WebSocket in arsd libs
- tar.xz, --DRT tip, dom bug fixes, more Android and JNI, link to old phobos docs
- LDC 1.19 - Android, AVR. My rant on tests, update on JNI and COM.
- Walter's string interpolation proposal is OK but not great. My Android thing nearing beta release. dub downtime explained.
- Android project update, introduction to arsd.jni
- New pattern about interface contracts
- Adam shares Windows console secrets - DO NOT USE chcp!!
- Adam's rant on benchmarks
- Socket tutorial
- November 4, 2019
- October 28, 2019
- arsd package updates, forum nonsense
- Update on Android
- Adam does iOS "goodbye world"
- September 30, 2019
- D turns 20, Adam rants on software freedom
- Named arg DIPs and my thoughts on code organization
- September 9, 2019
- I wrote about mixin templates vs string mixins on Stack Overflow
- August 26, 2019
- Bug bounty in D again - my hot take, on reusing code, a fun picture, my tentative plan for the next month
- Time invested is worth a lot
- cgi.d's new scheduler, static this tricks
- July 29, 2019
- July 22, 2019
- Solving vs managing problems
- A big week in the arsd repo
- July 1, 2019
- June 24, 2019
- June 17, 2019
- CRTP thoughts, named arguments DIP review, DConf videos now on youtube
- musings on hybrid CT/RT tests, some more progress on new web framework
- a little more webassembly
- May 20, 2019
- Adam's string interpolation proposal
- DMD 2.086 live, GCC 9 with D support formally released, DConf coming soon, links to posts on builder pattern and disallowing implicit conversions with templates, and 2d array op overloads
- template constraint error improvements coming?
- dmd 2.086 beta, dstep 1.0 released, Adam works on memory usage
- obj-c and webassembly report, tips on is expressions linked.
- new ldc, new dmd, dpp on the blog
- D's future discussed in forums
- LDC beta, DConf blog link, Adam introduces gamehelpers.d
- March 18, 2019
- LDC 1.15.0-beta1, responsive design rant
- dmd 2.085.0 released
- Obj-C interop and D without druntime code to copy/paste
- dmd beta, more info coming next time, demo of new web framework initial prototype
- automatic web interface discussion, reflection tips and tricks
- Adam busy with weather and a move, lots of community announcements
- January 28, 2019
- Working on official blog 2018 retro, C++ new wrapped, dmd reading zips?
- dmd obj-c growing, Adam static foreaches an interface to RPC
- dmd 2.084, hope for future, but busy non-D week for me
- IDE tools released, my cgi.d gets new features
- DConf announced, tip, Adam rants: mouse trap
- This Week in D is back!
I was just goofing around with webassembly a bit more this weekend.
Core D Development Statistics
In the community
Community announcements
See more at the announce forum.
What Adam is working on
Some of you might remember that back in 2011, I hacked up dmd to make a D to Javascript converter. However, I found it pretty useless in practice because it outputted fairly bloated code and was awkward to use.
With webassembly getting bigger and ldc supporting it, I have played around a little. The bloat isn't too bad, though you are currently stuck using a subset of D that interacts awkwardly with the browser environment.
I was thinking about looking at this once Mozilla figured out the awkward interop problem, but it doesn't seem to be a priority to them, so I started goofing around to see what we can do with the current interface. And you know, it isn't the worst thing ever in its early stages:
Look, I'm calling DOM functions! Through the magic of D's variadic opDispatch and a little index operator and .apply code on the Javascript side, I'm able to make those calls with fairly little support code. First, the D:
The test.wasm file is 3.0 kilobytes out of ldc. Not too bad, at least there isn't a megabyte of library you have to download just to get started.
Now, on the HTML/JS side
Just about 2 KB of glue code here.
Now, as you can see, this code is terrible. It copies in strings byte-by-byte via a callback every time they are used. I figure the next step would be to make them ArrayViews into the webasm module's memory.
But, while it is terrible, it also works, at least for the very few functions I have tested. The concepts are:
Actually pretty simple, and I think that if I spend a little bit more time on it, I can make the code less awful on both sides. More efficient on the JS side, and more statically typed on the D side. (I would love to ultimately just access them through interfaces on the D side, and generate the same code to bridge them as opDispatch does. Should be fairly simple, just might need to work with TypeInfo to get all the way there.)
I'm not actually in a big push to work on this, I just wanted to give it a try and see what I could do in an hour. So no promises I will finish or even revisit this stuff, but we'll see where the winds take me.