Jump to page: 1 2
Thread overview
Spasm 0.1.3 released - with bindings to web apis
Jan 26, 2019
Sebastiaan Koppe
Jan 26, 2019
WebFreak001
Jan 27, 2019
Sebastiaan Koppe
Jan 30, 2019
WebFreak001
Jan 30, 2019
Sebastiaan Koppe
Jan 30, 2019
WebFreak001
Jan 30, 2019
kinke
Jan 31, 2019
Thomas Brix Larsen
Jan 31, 2019
kinke
Jan 26, 2019
Mike Franklin
Jan 27, 2019
Sebastiaan Koppe
January 26, 2019
Spasm is a betterC library for web development that uses LDC to compile to WebAssembly, and I just released a major update.

It now has bindings to most web api's, like the dom, fetch, audio, webgl, etc.

So you can do things like this:

---
import spasm.bindings;
import spasm.dom;
import spasm.types;

extern (C) export void _start()
{
  auto elem = document.createElement("div").as!HTMLElement;
  elem.style.backgroundColor = "green";
  elem.innerHTML = "BLA BLA!";
  elem.addEventListener("mouseover",(event){
      console.log("onmouseover");
      console.log(event);
      console.log(event.as!MouseEvent.clientX);
    });

  auto root = document.querySelector("body").front;
  root.appendChild(elem);
}
---

And have it Just Work.

See the repo for more info: https://github.com/skoppe/spasm

It is still a WIP but I am getting there.
January 26, 2019
On Saturday, 26 January 2019 at 10:24:05 UTC, Sebastiaan Koppe wrote:
> Spasm is a betterC library for web development that uses LDC to compile to WebAssembly, and I just released a major update.
>
> It now has bindings to most web api's, like the dom, fetch, audio, webgl, etc.
>
> So you can do things like this:
>
> ---
> import spasm.bindings;
> import spasm.dom;
> import spasm.types;
>
> extern (C) export void _start()
> {
>   auto elem = document.createElement("div").as!HTMLElement;
>   elem.style.backgroundColor = "green";
>   elem.innerHTML = "BLA BLA!";
>   elem.addEventListener("mouseover",(event){
>       console.log("onmouseover");
>       console.log(event);
>       console.log(event.as!MouseEvent.clientX);
>     });
>
>   auto root = document.querySelector("body").front;
>   root.appendChild(elem);
> }
> ---
>
> And have it Just Work.
>
> See the repo for more info: https://github.com/skoppe/spasm
>
> It is still a WIP but I am getting there.

amazing! I would really like to try it but it seem the precompiled LDC version doesn't support the wasm output and I have no idea what that wercker stuff is you mentioned or how to use the container you sent with compiling on my local filesystem and not inside a sandbox :/

Still looks great having this, especially now with all these APIs. I would really like to try making WebGL run with this in the future

Great work, keep it up!
January 26, 2019
On Saturday, 26 January 2019 at 10:24:05 UTC, Sebastiaan Koppe wrote:
> Spasm is a betterC library for web development that uses LDC to compile to WebAssembly, and I just released a major update.
>
> It now has bindings to most web api's, like the dom, fetch, audio, webgl, etc.
[...]
>
> See the repo for more info: https://github.com/skoppe/spasm
>
> It is still a WIP but I am getting there.

This is really cool; nice work!

Over the past 6 months I've been working a lot with .Net's WASM implementation, code-named Blazor.  I estimate I can build GUI applications at 20% the development cost, while also getting portability, and a more rich features set (alpha transparency, flow layout, SVG, video, GL, etc...).   Bundled with Electron, it makes for a convenient cross-platform application GUI framework.  It's actually changed everything I do for desktop and ARM Cortex-A embedded GUI work (still need something for Cortex-M, though), and I don't think I'll be going back.

The upcoming .Net Core 3.0 will include something called Razor Components, previously called Server-Side Blazor.  It uses Microsoft's SignalR (think web sockets) to create signals on the server, slots on the client, and to push UI render changes to the client.

Are you aware of SignalR, and do you see something similar eventually being added to Spasm?

Also, what are the limitations that prevent the D runtime (just druntime, not Phobos) from being ported to WASM?

Again, nice work!

Mike
January 27, 2019
On Saturday, 26 January 2019 at 23:40:01 UTC, Mike Franklin wrote:
> This is really cool; nice work!

Thanks.

> Are you aware of SignalR, and do you see something similar eventually being added to Spasm?

I don't use .NET myself, but I once reverse engineered a signalR client for some data feed I wanted to listen to, so I am a little familiar with it.

But why not use gRPC over websockets, or real-time graphQL? Spasm has bindings to the browsers websocket and I don't think its hard to connect that to a D client implementation of gRPC or graphQL.

> Also, what are the limitations that prevent the D runtime (just druntime, not Phobos) from being ported to WASM?

The real blocker was the GC. In wasm the address space starts at 0, so almost everything looks like a pointer :)

But now that we have a precise GC, that should be solved.

Maybe some issues with threaded since Webassembly is currently single-threaded (although multithreading is on the roadmap.)

So yeah, there aren't many blockers. I did actually try it a couple of months ago, and got pretty far. But I wanted to keep things lean and mean and decided to constrain it to betterC.

I am first going to see how well I can implement some material-ui components. That is going to be the litmus test for the SPA framework part of spasm.

> Again, nice work!

Thanks. A lot of praise goes to the LDC team and the fact they build it on top of LLVM.
January 27, 2019
On Saturday, 26 January 2019 at 15:34:15 UTC, WebFreak001 wrote:
> amazing! I would really like to try it but it seem the precompiled LDC version doesn't support the wasm output and I have no idea what that wercker stuff is you mentioned or how to use the container you sent with compiling on my local filesystem and not inside a sandbox :/

Make sure you have installed docker on your machine (are you running windows?), go inside your workspace directory and run

`docker run --rm -ti -v $PWD:/app --workdir /app dlang2/ldc-ubuntu:1.13.0 /bin/bash`

This will start a docker container with ldc 1.13.0 installed on ubuntu. It will also mount the current directory under `/app`.

Inside the container you can just run dub, etc. And on your host you can just edit the files.

> Still looks great having this, especially now with all these APIs. I would really like to try making WebGL run with this in the future

Have you seen the underrun example?
January 30, 2019
On Sunday, 27 January 2019 at 09:22:19 UTC, Sebastiaan Koppe wrote:
> On Saturday, 26 January 2019 at 15:34:15 UTC, WebFreak001 wrote:
>> amazing! I would really like to try it but it seem the precompiled LDC version doesn't support the wasm output and I have no idea what that wercker stuff is you mentioned or how to use the container you sent with compiling on my local filesystem and not inside a sandbox :/
>
> Make sure you have installed docker on your machine (are you running windows?), go inside your workspace directory and run
>
> `docker run --rm -ti -v $PWD:/app --workdir /app dlang2/ldc-ubuntu:1.13.0 /bin/bash`
>
> This will start a docker container with ldc 1.13.0 installed on ubuntu. It will also mount the current directory under `/app`.
>
> Inside the container you can just run dub, etc. And on your host you can just edit the files.
>
>> Still looks great having this, especially now with all these APIs. I would really like to try making WebGL run with this in the future
>
> Have you seen the underrun example?

the underrun example looks really cool! I'm on linux but I don't use docker, that command you sent is something I would have honestly never found out myself, it's just too cryptic.

I will try out making something with spasm soon!
January 30, 2019
On Wednesday, 30 January 2019 at 00:22:15 UTC, WebFreak001 wrote:
> the underrun example looks really cool! I'm on linux but I don't use docker

Wait, you are on linux. Why doesn't your ldc have wasm target? How did you install it?

> I will try out making something with spasm soon!

Cool.
January 30, 2019
On Wednesday, 30 January 2019 at 08:26:22 UTC, Sebastiaan Koppe wrote:
> On Wednesday, 30 January 2019 at 00:22:15 UTC, WebFreak001 wrote:
>> the underrun example looks really cool! I'm on linux but I don't use docker
>
> Wait, you are on linux. Why doesn't your ldc have wasm target? How did you install it?
>
>> I will try out making something with spasm soon!
>
> Cool.

I install LDC from the arch repositories, which should just be the prebuilt binaries from the ldc repo I think
January 30, 2019
On Wednesday, 30 January 2019 at 11:03:13 UTC, WebFreak001 wrote:
> I install LDC from the arch repositories, which should just be the prebuilt binaries from the ldc repo I think

Nope, they aren't. I guess your problem is that you cannot *link* wasm; that will only work with v1.14 for distro packages (without integrated LLD).
January 31, 2019
On Wednesday, 30 January 2019 at 11:49:17 UTC, kinke wrote:
> On Wednesday, 30 January 2019 at 11:03:13 UTC, WebFreak001 wrote:
>> I install LDC from the arch repositories, which should just be the prebuilt binaries from the ldc repo I think
>
> Nope, they aren't. I guess your problem is that you cannot *link* wasm; that will only work with v1.14 for distro packages (without integrated LLD).

The targets wasm32 and wasm64 are missing in the Arch package.

« First   ‹ Prev
1 2