{"action":"created","issue":{"url":"https://api.github.com/repos/WebAssembly/gc/issues/36","repository_url":"https://api.github.com/repos/WebAssembly/gc","labels_url":"https://api.github.com/repos/WebAssembly/gc/issues/36/labels{/name}","comments_url":"https://api.github.com/repos/WebAssembly/gc/issues/36/comments","events_url":"https://api.github.com/repos/WebAssembly/gc/issues/36/events","html_url":"https://github.com/WebAssembly/gc/issues/36","id":326608874,"node_id":"MDU6SXNzdWUzMjY2MDg4NzQ=","number":36,"title":"It doesn't seem like WebAssembly should have a GC","user":{"login":"justinmchase","id":10974,"node_id":"MDQ6VXNlcjEwOTc0","avatar_url":"https://avatars2.githubusercontent.com/u/10974?v=4","gravatar_id":"","url":"https://api.github.com/users/justinmchase","html_url":"https://github.com/justinmchase","followers_url":"https://api.github.com/users/justinmchase/followers","following_url":"https://api.github.com/users/justinmchase/following{/other_user}","gists_url":"https://api.github.com/users/justinmchase/gists{/gist_id}","starred_url":"https://api.github.com/users/justinmchase/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justinmchase/subscriptions","organizations_url":"https://api.github.com/users/justinmchase/orgs","repos_url":"https://api.github.com/users/justinmchase/repos","events_url":"https://api.github.com/users/justinmchase/events{/privacy}","received_events_url":"https://api.github.com/users/justinmchase/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":19,"created_at":"2018-05-25T17:38:49Z","updated_at":"2018-06-18T15:41:28Z","closed_at":null,"author_association":"NONE","body":"I don't understand why this feature is being proposed. It seems like wasm is an inappropriate layer to put a GC into.\r\n\r\nIt seems like the addition of a GC and memory management is a feature of the higher level runtime/language which compiles into WebAssembly, not in WebAssembly itself. What if different languages want to have different memory management strategies? What if they already have the code for a GC in C for their higher level language, will be able to compile to wasm and preserve the logic of their GC? Trying to add a one-size-fits all GC into this layer seems to complicate things for already existing runtimes which have their own GC's already.\r\n\r\nFrom the spec overview:\r\n> the vast majority of modern languages need it\r\n\r\nI will say that while this may be true true there is also a perception that the inefficiency of a GC in many modern languages is one of the biggest pain points of said language. For example the GC in .NET can cause problems with games because there is no way to control it deterministically and if it collects at the wrong time it can affect frame rate heavily. The .NET GC behaves differently on different platforms partially for these reasons and I just can't imagine a one size fits all solution here.\r\n\r\nFurthermore it seems to me like a lot of the _newest_ modern languages have been explicitly experimenting with alternate memory management strategies as a prominent feature. So what would it be like for languages which do not want, or cannot use the GC and Type features offered here?\r\n\r\nI could see an optional layer on top of wasm that new language developers could opt-in to, in order to get some productivity gains perhaps but its just not making sense to me how it is appropriate for it to be at the lowest level automatically.\r\n\r\nI'm also skeptical of the \"types\" I see in some examples such as:\r\n```\r\n(type $point (struct (field $x f64) (field $y f64) (field $z f64)))\r\n```\r\n\r\nAgain, this just seems like an inappropriate layer to add such features. It really seems like a language specific feature and shouldn't be in wasm."},"comment":{"url":"https://api.github.com/repos/WebAssembly/gc/issues/comments/398098871","html_url":"https://github.com/WebAssembly/gc/issues/36#issuecomment-398098871","issue_url":"https://api.github.com/repos/WebAssembly/gc/issues/36","id":398098871,"node_id":"MDEyOklzc3VlQ29tbWVudDM5ODA5ODg3MQ==","user":{"login":"aardappel","id":4663648,"node_id":"MDQ6VXNlcjQ2NjM2NDg=","avatar_url":"https://avatars2.githubusercontent.com/u/4663648?v=4","gravatar_id":"","url":"https://api.github.com/users/aardappel","html_url":"https://github.com/aardappel","followers_url":"https://api.github.com/users/aardappel/followers","following_url":"https://api.github.com/users/aardappel/following{/other_user}","gists_url":"https://api.github.com/users/aardappel/gists{/gist_id}","starred_url":"https://api.github.com/users/aardappel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aardappel/subscriptions","organizations_url":"https://api.github.com/users/aardappel/orgs","repos_url":"https://api.github.com/users/aardappel/repos","events_url":"https://api.github.com/users/aardappel/events{/privacy}","received_events_url":"https://api.github.com/users/aardappel/received_events","type":"User","site_admin":false},"created_at":"2018-06-18T15:41:28Z","updated_at":"2018-06-18T15:41:28Z","author_association":"NONE","body":"@rossberg I do not thing we can compare with e.g. the JVM.. simulating linear memory in the JVM and then building a custom GC on top of that is clearly a way too clusmy and slow to even be considered.. this is not comparable to the situation we have in wasm. On top of that, many languages have intricate runtimes in C/C++ which compile almost unmodified to wasm linear memory, and again no such facility when targetting the JVM. The JVM has plenty of languages targetting it, but for quite a few it is an \"impedance mismatch\", and plenty of languages are missing too. For wasm, I expect it to become a target for near 100% of languages with much less \"impedance mismatch\".\r\n\r\nBut ok, hard to predict the future."}}
{"actor":{"display_login":"aardappel"}}