11 ms·
WasmWinforms – .NET WinForms in a browser
- dvh 8y agoERROR> https://webassembly.z19.web.core.windows.net/Calculator/mono.js(1181) https://webassembly.z19.web.core.windows.net/Calculator/mono...: Uncaught RangeError: WebAssembly.Memory(): could not allocate memory
- amaccuish 8y agoI got RangeError: bad Memory initial size
- adzm 8y agoCalculator demo uses around 1.5gb of memory so I wouldn't be surprised if it runs into various memory pressure issues.
- dvh 8y agoThat explains it as I have only 512MB.
- leeman2016 8y agoWow. Is that a VM or an actual PC?
- dvh 8y agoMobile
- yread 8y ago"The original WinForms ran on it so this new stuff should as well", right?
- est31 8y agoI get that same error in Firefox, but in Chrome it works. Sigh.
- chrismorgan 8y agovar TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 1258291200; That is, if the module doesn’t specify how much memory it wants (and it doesn’t), then it asks for around 1.25 GB.
- dvt 8y agoCalculator example breaks when attempting to divide by zero: Uncaught abort(20) at Error at jsStackTrace (https://webassembly.z19.web.core.windows.net/Calculator/mono.js:1063:12) at stackTrace (https://webassembly.z19.web.core.windows.net/Calculator/mono.js:1077:11) at abort (https://webassembly.z19.web.core.windows.net/Calculator/mono.js:18097:43) at nullFunc_ii (https://webassembly.z19.web.core.windows.net/Calculator/mono.js:14694:2) at b20 (wasm-function[10723]:31) at emterpret (wasm-function[922]:12351) at _do_icall (wasm-function[8343]:63) at emterpret (wasm-function[922]:7917) at _interp_exec_method_full (wasm-function[7977]:65) at emterpret (wasm-function[922]:7129) Which is weird, because in the actual code[1], there's a division by zero check which should pop up a message box: case '/': if (opr2 != 0) { result = (opr1 / opr2).ToString(); } else { MessageBox.Show("Can't divide by zero"); } break; Given a closer look, I doubt this is a WasmWinforms bug, but rather mono-wasm (or somewhere else along the compilation pipeline). Edit: I'm wrong, it's a WasmWinforms bug. [1] https://code.msdn.microsoft.com/windowsdesktop/Simple-Calculator-54ec8e4a https://code.msdn.microsoft.com/windowsdesktop/Simple-Calcul...
- hokkos 8y agoMaybe the problem is the MessageBox method.
- dvt 8y agoGiven an even closer look, you're right ;) I saw MessageBox here[1] and assumed the implementation would just go through. After all, why would all other components compile fine, except for MessageBox? But actually, it even logs in the console dl_mapping_symbol MessageBox - proc name MessageBox not matched So yep, MessageBox has no matched symbols so it crashes and burns. [1] https://github.com/roozbehid/WasmWinforms/blob/master/winforms/external/mono/mcs/class/Managed.Windows.Forms/System.Windows.Forms/MessageBox.cs https://github.com/roozbehid/WasmWinforms/blob/master/winfor...
- croddin 8y agoThat is really cool that that is possible! Could the same approach be used for WPF? How do WinForms and WPF differ at that layer? Would WPF be a lot bigger of a project than WinForms?
- deleted 8y ago[deleted]
- pjmlp 8y agoKind of, Uno allows for UWP on WebAssembly. https://platform.uno/ https://platform.uno/ Yes I know it isn't the same XAML.
- ygra 8y agoWell, it is the same XAML, it just uses different controls from a different namespace. At its heart XAML is just a way of encoding object graphs in XML and can work with pretty much anything that has a default ctor and properties. As far as generic serialization formats for XML go it's one of the nicer ones in my book.
- pjmlp 8y agoMy opinion as well, the side remark as oriented towards those that always complain about WPF, Silverlight, UWP and Xamarin XAML being a bit different, when they actually share the same underlying concepts anyway.
- kmote00 8y agoFrom the ReadMe: "There are many many bugs and this project/product is not at all recommended for production. It is pre-alpha phase!"
- brian_herman__ 8y agohttps://www.destroyallsoftware.com/talks/the-birth-and-death-of-javascript https://www.destroyallsoftware.com/talks/the-birth-and-death...
- bsaul 8y agoi saw that video in the past, but watching it again now took me 15 minutes to realize this was supposed to be a fun video about an absurd future.
- bdcravens 8y agoSo ActiveX (or its offspring) in the browser is apparently back :-) On a positive note, as I watch the assemblies load, Angular sites with 50k or so npm packages doesn't seem so heavy :-)
- raisedbyninjas 8y agoActiveX has never left IE (not Edge). Although Microsoft patches have broken it a few times. So you can run Winforms in the browser on a full Microsoft supported stack for the time being.
- josteink 8y agoI wonder at what point Apple is going to add wasm-support to iOS. It’s starting to feel quite left behind at this point.
- davidhyde 8y agoI think you may well be wrong. Safari supports wasm. Here is an example for everyone who is reading this from an iOS device. https://suy.io/geopattern/ https://suy.io/geopattern/ Sooo, unity webgl may not work on iOS but that doesn’t mean wasm itself doesn’t work.
- comex 8y agoJust tested, and this demo runs fine on iOS. It's kind of funny to use a classic Windows-style interface on a touchscreen. Loading time needs work, though.
- josteink 8y agoMight be a ram thing. I tested on my iPhone SE and even while waiting a long time, it didn't seem to provide any visible results. Edit: Trying it in Firefox desktop it fails too[1], so obviously this is not really fully cross-browser compatible yet. [1] RangeError: bad Memory initial size mono.js:1181:26 <anonymous> https://webassembly.z19.web.core.windows.net/Calculator/mono.js:1181 https://webassembly.z19.web.core.windows.net/Calculator/mono...
- comex 8y agoMakes sense. According to other comments in the thread [1] the page requests a wasm heap of 1.25 GB (...hopefully unnecessarily!), while the iPhone SE has 2GB of RAM total, so it's easy to imagine that the remaining amount isn't enough for both other allocations in Safari and other processes. I tested it on my iPhone X which has 3GB of RAM – not that much more, but apparently enough. [1] https://news.ycombinator.com/item?id=18983109 https://news.ycombinator.com/item?id=18983109
- 8y ago
- AdeptusAquinas 8y agoTHE CYCLE IS COMPLETE! More seriously, looking forward to when CLR can compile down to web assembly directly rather than requiring a large runtime. Baby steps.
- dare0505 8y agoWow, does this mean that (in the near future) we'll be able to take that HUGE repository of WinForms apps and port them to the web? Would be exciting...
- deleted 8y ago[deleted]
- jijji 8y agoI gave up after five minutes with a screen that said "Loading...". Any reason why <textarea> was thought to be so inefficient?
- shawnb576 8y agoI was one of the main engineers on Windows Forms circa 1998-2005. This blows my mind in so many ways.
- glenneroo 8y agoMust have been fun! Any interesting stories to share about that time period?
- Pxtl 8y agoCool! On the one hand I feel like we all deserve an apology, but on the other hand that's a massive system with the kind of developer-base we could only dream of. Seriously though, why were the fonts hard-coded to use ms sans serif instead of the OS default font (eg Segoe UI last time I checked?)
- fxfan 8y agoThat's such an insulting thing to say without really pointing out any substantial problems? I may hate their practices but their dev tools have always been absolutely top-notch within their (locked down) garden. No company has ever come anywhere close to emulating that, closed garden or not.
- Pxtl 8y agoGood-natured ribbing doesn't come over text, sadly. Seriously I have tremendous respect for anybody who works on a project that massive, I just meant it in the sense of "there are two kinds of languages, the kind people complain about and the kind nobody uses". Of course there were a lot of jagged edges in winforms (like the font thing) - I never used a GUI framework that didn't have any of those.
- shawnb576 8y agoHaha, nah it's all good. Honestly I'm shocked (shocked!) that I still see Winforms on resumes to this day. My real claim to fame is the VS Property Browser, which is System.Windows.Forms.PropertyGrid to this day. I love seeing new versions of VS and being like "yep, still there, that's m'baby". Lots of stories, here's some quickies: - Windows Forms was originally WFC from the Visual J++ project. Anders Hejlsberg was the architect as one of his first MS roles, working with him was a huge impact on my career. - The Winforms team was, I think the first team to ever use C#, which was called COOL (C-Like Obj Oriented Language). Before then we were using a Java-like language that ran on the CLR - The .NET Framework originated as a mash-up of the Winforms and ASP.NET teams, who were busy building frameworks separately for a while. - The .NET project was a boiled ocean - everything was new from the runtime (CLR) to the tool (VS.NET), and two languages (C#, VB.NET). We didn't have a working debugger until late in the cycle, everything was always on the floor. This might be an anti pattern. - I don't remember exactly what the story was with the font...20 years!... but my guess would be that it had to do with dealing with different versions of Windows and which fonts were installed.
- jug 8y agoWell now this was an unexpected early UI API for Web Assembly.
- catmanjan 8y agoDoes anyone have an example/list of popular applications that use .NET WinForms? The only ones I can think of are bespoke...
- jmkni 8y agoNow we just need to embed this in an MVVM WPF application!
- vedantroy 8y agoSomething I've wondered about with Web Assembly applications is, how do I actually view the web assembly/compiled blob? E.g--with normal Javascript, I can go to "sources" tab in developer tools and download all the JS, but how do I download the wasm? Am I misunderstanding how web assembly works?
- DrJokepu 8y agoIt's there, if you look at the Network tab in the Dev Tools you will find the mono.wasm binary.
- testvox 8y agoIf you are using a fairly new version of chrome any wasm should indeed show up under sources, under a special wasm domain. It looks like this https://webassemblycode.com/wp-content/uploads/Chrome-Wasm-Debug-WasmView.png https://webassemblycode.com/wp-content/uploads/Chrome-Wasm-D... It doesn't show the source file because the browser is not actually aware of where the js on the page got the wasm its running from. From the browser's perspective it just fetched an opaque file and then separately got told to run some wasm. You can see the actual source file for the wasm for one of the demos here, it still shows up in the network tab (but for example if the js on the page generated the wasm then it wouldn't). https://webassembly.z19.web.core.windows.net/mono.wasm https://webassembly.z19.web.core.windows.net/mono.wasm
- deleted 8y ago[deleted]
- pjmlp 8y agoYou already cannot get anything usefull out from minified JavaScript.
- nly 8y agoSimilar to Qt for WebAssembly: http://example.qt.io/qt-webassembly/widgets/richtext/textedit/textedit.html http://example.qt.io/qt-webassembly/widgets/richtext/textedi...
- mbel 8y agoAnd somehow it's more snappy and responsive than some of the pages that are done in HTML today, amazing.
- _underfl0w_ 8y agoAm I the only one worried about how much easier this might make it to trick our less-tech-savvy friends into thinking their device "has a virus"? Might be enough to confuse my parents, at least.
- cwbrandsma 8y agoThat was the original goal of asp.net webforms and WinForms, to make it easy to write apps that would work on web and windows with the same code ... this back in 2001. They gave up, and we were stuck with ViewState (and the horrors within)
- untog 8y agoIt's just rendering to a canvas tag so it's not doing anything you can't already do in a browser (and haven't been able to do for years)
- deleted 8y ago[deleted]
- miguelrochefort 8y agoA similar project is Uno. It lets you run UWP apps on iOS, Android and WebAssembly. https://github.com/nventive/Uno https://github.com/nventive/Uno
- asien 8y agoThe more WASM projects are being released , the more I’m telling myself that WASM has nothing to offers to regular JavaScript developers. Solutions like this have already existed and still exist today. ASP.NET Webforms was basically the same attempt as this but with HTML5 base controls. Running .NET on the browser was a great idea on paper for cross-platform application , but seing how much time it takes to load the entire .NET framework it’s just isn’t a suitable solutions for production.
- cm2187 8y agoI think the point is that you won’t need to load the entire .net framework when the technology has matured. You can probably get away with a 1MB binaries if it is compiled server side, only shipping the dependencies used, etc. I don’t think this will ever replace javascript for common websites. But think intranet applications, online trading platforms or webmails, or mobile web apps.
- manigandham 8y agoThis isn't a real project, it's just an experiment. Blazor is the official Microsoft project that uses a small .NET runtime with Razor components and is already smaller and faster than many JS bundles without any optimizations.
- krob 8y agoThat thing is glitchy as F. My machine used almost 1.5gb of ram running that thing. Couldn't barely drag the window or click any buttons, and froze my mouse cursor.
- tomduncalf 8y agoWebAssembly is amazing technology and in my experience is already pretty mature and can do incredible things. Definitely worth taking some time to understand it I think, especially if you have experience with “non-web” languages like C/C++. I thought Lin Clark’s cartoon intro was excellent: https://hacks.mozilla.org/2017/02/a-cartoon-intro-to-webassembly/ https://hacks.mozilla.org/2017/02/a-cartoon-intro-to-webasse...
- skocznymroczny 8y agoWhy does it look like Windows 95?
- tyfon 8y agoAm I the only one that reads "Watcom assembler" when I see WASM? :) In any case, it's pretty insane what they do now but I sort of fail to see how W(eb) assembly is different from let's say a Java applet? It is not native code is it?