{"action":"created","issue":{"url":"https://api.github.com/repos/matthewmueller/joy/issues/56","repository_url":"https://api.github.com/repos/matthewmueller/joy","labels_url":"https://api.github.com/repos/matthewmueller/joy/issues/56/labels{/name}","comments_url":"https://api.github.com/repos/matthewmueller/joy/issues/56/comments","events_url":"https://api.github.com/repos/matthewmueller/joy/issues/56/events","html_url":"https://github.com/matthewmueller/joy/issues/56","id":281478750,"number":56,"title":"Document difference from GopherJS","user":{"login":"FlorianUekermann","id":917690,"avatar_url":"https://avatars1.githubusercontent.com/u/917690?v=4","gravatar_id":"","url":"https://api.github.com/users/FlorianUekermann","html_url":"https://github.com/FlorianUekermann","followers_url":"https://api.github.com/users/FlorianUekermann/followers","following_url":"https://api.github.com/users/FlorianUekermann/following{/other_user}","gists_url":"https://api.github.com/users/FlorianUekermann/gists{/gist_id}","starred_url":"https://api.github.com/users/FlorianUekermann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/FlorianUekermann/subscriptions","organizations_url":"https://api.github.com/users/FlorianUekermann/orgs","repos_url":"https://api.github.com/users/FlorianUekermann/repos","events_url":"https://api.github.com/users/FlorianUekermann/events{/privacy}","received_events_url":"https://api.github.com/users/FlorianUekermann/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":7,"created_at":"2017-12-12T17:49:41Z","updated_at":"2017-12-14T14:24:50Z","closed_at":"2017-12-14T10:18:28Z","author_association":"NONE","body":"First off, I'm very happy to see someone having another go at this. I'm very impressed by what I've seen.\r\n\r\nThat said, most people will ask themselves how this project differs from GopherJS.\r\nI've been using GopherJS for a while in production now and don't feel like it is missing anything fundamental.\r\nCould you clarify...\r\n- ...why I may want to choose Joy over GopherJS, now or in the future?\r\n- ...why you decided to start from scratch?\r\n- ...if you see a shared future for Joy and GopherJS\r\n\r\nThe answers probably belong into the readme and FAQ, since this is probably every new visitors first question."},"comment":{"url":"https://api.github.com/repos/matthewmueller/joy/issues/comments/351724816","html_url":"https://github.com/matthewmueller/joy/issues/56#issuecomment-351724816","issue_url":"https://api.github.com/repos/matthewmueller/joy/issues/56","id":351724816,"user":{"login":"matthewmueller","id":170299,"avatar_url":"https://avatars0.githubusercontent.com/u/170299?v=4","gravatar_id":"","url":"https://api.github.com/users/matthewmueller","html_url":"https://github.com/matthewmueller","followers_url":"https://api.github.com/users/matthewmueller/followers","following_url":"https://api.github.com/users/matthewmueller/following{/other_user}","gists_url":"https://api.github.com/users/matthewmueller/gists{/gist_id}","starred_url":"https://api.github.com/users/matthewmueller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/matthewmueller/subscriptions","organizations_url":"https://api.github.com/users/matthewmueller/orgs","repos_url":"https://api.github.com/users/matthewmueller/repos","events_url":"https://api.github.com/users/matthewmueller/events{/privacy}","received_events_url":"https://api.github.com/users/matthewmueller/received_events","type":"User","site_admin":false},"created_at":"2017-12-14T14:24:50Z","updated_at":"2017-12-14T14:24:50Z","author_association":"OWNER","body":"@myitcv Hey dude! I saw you on quite a few issues for GopherJS, so I'm happy you've stopped by. \r\n\r\nLet me try and get more specific and maybe you have some thoughts and solutions to these issues. \r\n\r\nThis is more tailored to what I found lacking about Gopher, but there's a bunch of stuff that's missing from Joy that Gopher handles beautifully. \r\n\r\n1) Dead code elimination is a must if you want to have big and capable standard libraries like what Go has. Unlike in Go, we have to care about the build size on the client. The builds are just too big for basic things like `fmt` which everyone uses. That's maybe an infamous example, but I wasn't able to find an easy way to generate small builds in Gopher.\r\n\r\n2) A good DOM library is also very important for frontend developers, I tried using this one: https://github.com/dominikh/go-js-dom but found that I'm basically shipping 2 DOMs: one that's native to the browser and one that's wrapping all the native calls (window.AddEventEventListener()). Joy uses a macro system so `window.AddEventListener(event, handler)` just becomes `window.addEventListener(event, handler)`. \r\n\r\n3) For better or for worse, you really need to support React and it's variants. It's just such a fundamental frontend technology. Actually, I tried your React! This might have just been me, but I think that stuff should just be baked into the compiler, rather than generating it. My north star for this is next.js, I think they did such a good job hiding the complexity of the JS platform and only exposing the good parts of JS. I'd like to do that with Joy and avoid complexity of something like codegen at the component level. \r\n\r\n4) I personally think the channel implementation went way too far, though I may be totally missing something fundamental here. I think channels and CSP can be done with very little JS when you use something like generators or async/await.\r\n\r\n---\r\n\r\nMy gut feeling for how this plays out is that Gopher will be a lot more compatible with existing Go code. Things like pointer support, the threading model etc. Joy probably won't go this way and will probably opt for compiler errors when it comes across those types of things (e.g. a map[struct{}]struct{}).\r\n\r\nMy aim for Joy is to be a great alternative to Typescript/Flow and my hope is I can bring a bunch of JS devs to Go."}}
{"actor":{"display_login":"matthewmueller"}}