Mono and WebAssembly – Updates on Static Compilation
mono-project.com
mono-project.com
> This currently requires MacOS High Sierra to run.
Ha, feels strange to say it, but "waiting for a Windows version". Also for the latest Mono preview targeting WebAssembly [0], I wanted a Windows nightly...went and looked at the Mono site's nightly downloads...nope, Linux and macOS only. Heh.
0 - http://www.mono-project.com/docs/about-mono/releases/5.8.0/
I can understand the lack of a Windows version.
What I can’t understand is why this won’t on Linux.
For a while the canonical webassembly tooling and test suite were unusable on Windows due to the selection of software that didn't work there. It was a bummer (that was corrected, at least!)
Also, they are a MacOS focused shop in some ways (Xamarin for iOS).
Yeah it's a mess. GitHub is full of "Awesome XYZ" lists which are basically just dumps of links. Awesome Elixir is a good example, it's worthless and full of 2-year old unmaintained afternoon hacks.
Typescript has no standard library. So you have to resort to using JavaScript libraries and combine those with type descriptions written by yet another group of people for some version or other of the original library.
So essentially Typescript is importing JavaScript's already onerous dependency situation putting another set of dependencies on top of it without any formal correctness guarantees or automated compatiblity checks.
The language itself is under constant threat of breaking changes introduced by new JavaScript versions.
The whole setup feels exremely fragile to me and it is anything but lightweight. But I accept that many people are successfully navigating this mess for now, people who (unlike myself) have created actual production software in Typescript.
We'll see how it works out longer term.
An increasing number of JS libraries on npm maintain and provide their own Typescript definitions, so the ecosystem is getting better and in some cases there are no additional type information dependencies beyond your JS library dependencies.
> The language itself is under constant threat of breaking changes introduced by new JavaScript versions.
I've used Typescript in production software since around TS 1.0, and Typescript has been very adroit of working ahead of JS versions. The biggest change, and closest to a compatibility break, was that import/export syntax changed slightly to reflect ES module import/export syntax, and that wasn't entirely a breaking change (the old syntax still works, though is marked with a deprecation warning). On the other side there were ES2015 features I was happily using in Typescript years before ES2015 was finalized, and am happily using proposed features that are only Stage 2 or Stage 3 today in the standards process.
Ecma's TC39 is following a similar playbook to the rest of web standards and using an approach to where multiple implementations should be built before the proposal is accepted into the language. TC39 has the benefit that not only do they get browser implementations, but polyfills/prollyfills, Babel, and Typescript implementations to learn from in adopting a proposal.
Typescript very much is leading JS development as much as, if not more than, it is following.
I would love to be able to put the C# debugger into interpreter mode and be able to change anything, anywhere while debugging and keep on trucking without having to stop debugger, make changes, restart debugger, etc..
I think any hot-reloading solution for a big, complex, introspective/reflective language is going to have some warts* and places where it stops working in some scenarios. The trick is just to minimize those to where they don't get on your nerves on a daily basis. C# will hopefully get there soon.
* Unless, that is the language is designed from the ground up to support code reloading. Erlang/Elixir's runtime inspection/injection/behavior alteration capability is second to none, and largely replaces the role of a true/traditional debugger. And you can do other cool stuff with it like zero-downtime in-place deployments, though that doesn't exactly come for free.
> ... uses the new Mono IL interpreter to run managed code at runtime... to be used for quickly reloading C# code and prototyping
So maybe it will/can provide the foundation for faster edit cycles with native apps and not just WASM.
My assumption is that at the moment they are just accepting that some uncollectable memory will happen in the short term and eventually the WebAssembly working group will expose the underlying garbage collector and everything will get better. Early days kind of issue for now.
Full Disclosure: I work at MS and I am one of the original designers of it.
Going the other way of C# inside HTML, you have Razor[2] and Blazor[3], the latter of which is a prototype of Razor running in the browser via web assembly.
[1]: https://github.com/dotnet/csharplang [2]: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/razor [3]: http://blog.stevensanderson.com/2017/11/05/blazor-on-mono/
Bridge.NET translates C# to JavaScript, but JSX is not currently supported.
Now please. Now now now!
Microsoft has two similar projects:
CoreRT : Which is a managed re-implementation of the CLR allowing for AoT compilation.
LLILC : A LLVM Backend for .NET MSIL. (Stalled)
https://github.com/dotnet/corert/tree/master/src/ILCompiler....
There are some instructions here:
https://github.com/dotnet/corert/blob/master/Documentation/h...