Hi Martin,

This is really exciting work! I would definitely recommend posting this as
an announcement in its own thread, I'm sure a lot of people are looking for
something like this. Thanks for taking the initiative!

On Sun, Feb 24, 2019 at 6:17 AM Martin Juhlin <martin.juh...@gmail.com>
wrote:

> Hi,
>
> I have started to work on DOM binding based on WebIDL and a binding
> generator. I don't have full WebIDL support yet, but it does process idl
> from about 80 specifications. See https://gowebapi.github.io for more
> details.
>
>    Martin
>
> Den fredag 28 december 2018 kl. 13:16:22 UTC+1 skrev Chris FractalBach:
>>
>> This is in the context of compiling Go to webassembly that will be used
>> with javascript.
>>
>>
>> *Currently:*
>>
>> We have`syscall/js` which has stuff like this:
>> ```go
>> js.Global().Get("document").Call("createElement", "div")
>> ```
>>
>> What it could be:
>> ```go
>> js.document.createElement("div")
>> ```
>>
>>
>>
>> *Why?*
>>
>> This would make writing stuff for webassembly WAY easier.
>> Auto-generating it would allow it to update definitions whenever the
>> standards
>> are updated.  Which would make it easier to maintain.
>>
>> Also, if there's going to be significant usage of
>> Go -> webassembly -> web browser and javascript
>> then having all the types and definitions auto-generated would save on
>> tons
>> of boilerplate abstractions that people will inevitably create for their
>> own sanity.
>>
>> Advantages:
>> - more natural to use
>> - more readable
>> - type safe
>>
>> Disadvantages:
>> - less flexible
>> - when the APIs are updated, it might result in loss of
>> backwards-compatibility
>>
>>
>>
>>
>> *How?*
>>
>> WebIDL --> Go source code
>>
>> - https://www.w3.org/TR/WebIDL/
>> - https://heycam.github.io/webidl/
>> - https://www.w3.org/TR/DOM-Level-3-Core/idl-definitions.html
>>
>>
>>
>>
>> Technical reports published by the W3C that include programming language
>>> interfaces have typically been described using the Object Management
>>> Group’s Interface Definition Language (IDL) [OMGIDL]. The IDL provides a
>>> means to describe these interfaces in a language independent manner.
>>> Usually, additional language binding appendices are included in such
>>> documents which detail how the interfaces described with the IDL correspond
>>> to constructs in the given language.
>>
>> https://www.w3.org/TR/WebIDL/#introduction
>>
>>
>>
>>
>>
>> *A Possible Conversion:*
>>
>> *From WebIDL:*
>> ```
>> [Exposed=Window]
>> interface Paint { };
>>
>>
>> [Exposed=Window]
>> interface SolidColor : Paint {
>>   attribute double red;
>>   attribute double green;
>>   attribute double blue;
>> };
>>
>>
>> [Exposed=Window]
>> interface Pattern : Paint {
>>   attribute DOMString imageURL;
>> };
>>
>>
>> [Exposed=Window, Constructor]
>> interface GraphicalWindow {
>>   readonly attribute unsigned long width;
>>   readonly attribute unsigned long height;
>>
>>
>>   attribute Paint currentPaint;
>>
>>
>>   void drawRectangle(double x, double y, double width, double height);
>>
>>
>>   void drawText(double x, double y, DOMString text);
>> };
>>
>> ```
>> Example From: https://heycam.github.io/webidl/
>>
>>
>>
>> *To Go:*
>>
>> This is probably not the best way to do it, but is an example of how it
>> might look.
>>
>> type Paint struct {}
>>
>>
>> type SolidColor struct {
>>  Red   float64
>>  Green float64
>>  Blue  float64
>> }
>>
>>
>> type GraphicalWindow struct {
>>  width        uint32
>>  height       uint32
>>  CurrentPaint Paint
>> }
>>
>>
>> func (gw *GraphicalWindow) drawRectangle(x, y, width, height float64) {
>>     // syscall
>> }
>>
>>
>> func (gw *GraphicalWindow) drawText(x, y float64, text string) {
>>     // syscall
>> }
>>
>>
>>
>>
>>
>>
>> I know there are some existing examples of Go bindings for DOM,
>> but I don't think they are auto-generated from WebIDL,
>> Which I imagine would be easier to maintain in the long-run.
>>
>>
>>
>>
>> Anybody have thoughts on this?
>>
>>
>>
>>
>> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to