{"action":"created","issue":{"url":"https://api.github.com/repos/celluloid/celluloid/issues/563","labels_url":"https://api.github.com/repos/celluloid/celluloid/issues/563/labels{/name}","comments_url":"https://api.github.com/repos/celluloid/celluloid/issues/563/comments","events_url":"https://api.github.com/repos/celluloid/celluloid/issues/563/events","html_url":"https://github.com/celluloid/celluloid/issues/563","id":67459145,"number":563,"title":"Undo method invocation checking","user":{"login":"e2","id":150197,"avatar_url":"https://avatars.githubusercontent.com/u/150197?v=3","gravatar_id":"","url":"https://api.github.com/users/e2","html_url":"https://github.com/e2","followers_url":"https://api.github.com/users/e2/followers","following_url":"https://api.github.com/users/e2/following{/other_user}","gists_url":"https://api.github.com/users/e2/gists{/gist_id}","starred_url":"https://api.github.com/users/e2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/e2/subscriptions","organizations_url":"https://api.github.com/users/e2/orgs","repos_url":"https://api.github.com/users/e2/repos","events_url":"https://api.github.com/users/e2/events{/privacy}","received_events_url":"https://api.github.com/users/e2/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/celluloid/celluloid/labels/refactor","name":"refactor","color":"5319e7"}],"state":"open","locked":false,"assignee":null,"milestone":{"url":"https://api.github.com/repos/celluloid/celluloid/milestones/3","html_url":"https://github.com/celluloid/celluloid/milestones/0.18.0","labels_url":"https://api.github.com/repos/celluloid/celluloid/milestones/3/labels","id":496831,"number":3,"title":"0.18.0","description":"","creator":{"login":"tarcieri","id":797,"avatar_url":"https://avatars.githubusercontent.com/u/797?v=3","gravatar_id":"","url":"https://api.github.com/users/tarcieri","html_url":"https://github.com/tarcieri","followers_url":"https://api.github.com/users/tarcieri/followers","following_url":"https://api.github.com/users/tarcieri/following{/other_user}","gists_url":"https://api.github.com/users/tarcieri/gists{/gist_id}","starred_url":"https://api.github.com/users/tarcieri/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tarcieri/subscriptions","organizations_url":"https://api.github.com/users/tarcieri/orgs","repos_url":"https://api.github.com/users/tarcieri/repos","events_url":"https://api.github.com/users/tarcieri/events{/privacy}","received_events_url":"https://api.github.com/users/tarcieri/received_events","type":"User","site_admin":false},"open_issues":14,"closed_issues":7,"state":"open","created_at":"2013-11-26T03:35:29Z","updated_at":"2015-04-18T15:17:59Z","due_on":null,"closed_at":null},"comments":74,"created_at":"2015-04-09T21:54:37Z","updated_at":"2015-04-18T15:17:59Z","closed_at":null,"body":"I want to undo: https://github.com/celluloid/celluloid/commit/f2cf9e727c3079b6ff6789b194a9660bfcc8ca02\r\n\r\nWhile the idea is nice (calling an actor with bad param count should crash the sender), the issues are:\r\n\r\n1. it's waaaaaay too complex (metaprograming metaprograming - yes that's correct)\r\n2. it's incomplete and misleading, because while the invocation matches, the receiver can still decide to throw a NoMethodError, NameError, ArgumentError and friends - so it doesn't make sense to \"partially\" detect\r\n3. since now sync calls to self are short-circuited (without the mailbox), this is overhead if the object checked isn't a proxy\r\n4. for correctness, if the receiver object is a proxy ... you'd need multiple calls (going through the mailbox) back and forth to \"negotiate\" if a method even exists (example: method_missing inside the actor)\r\n5. Rubinius just does things a little differently (like calling a potentially crashing `inspect` inside  Kernel#method(), and in general being slightly \"incompatible\" on the metaprogramming side) - the workarounds would be horrible and make the code unrefactorable\r\n6. Any actor can crash at any time for any reason - in my mind it makes no architectural sense to e.g. shift some of the exceptions to e.g. the main thread \"just to make things work like plain Ruby\".\r\n7. It's constantly confusing and hard to handle, because \"sometimes the actor crashes\" and \"sometimes the receiver crashes\" - so crashes have to be handled on both sides.\r\n8. I know people don't like crashing a service simply by calling a non existing method - but these are also practically \"runtime errors\" - and if someone really wants to protect the service, they should implement method_missing appropriately. (Code injection is also possible, so there's probably no way to protect a service from crashing if someone wants to crash it).\r\n\r\nAny objections? Thoughts?"},"comment":{"url":"https://api.github.com/repos/celluloid/celluloid/issues/comments/94173727","html_url":"https://github.com/celluloid/celluloid/issues/563#issuecomment-94173727","issue_url":"https://api.github.com/repos/celluloid/celluloid/issues/563","id":94173727,"user":{"login":"digitalextremist","id":21095,"avatar_url":"https://avatars.githubusercontent.com/u/21095?v=3","gravatar_id":"","url":"https://api.github.com/users/digitalextremist","html_url":"https://github.com/digitalextremist","followers_url":"https://api.github.com/users/digitalextremist/followers","following_url":"https://api.github.com/users/digitalextremist/following{/other_user}","gists_url":"https://api.github.com/users/digitalextremist/gists{/gist_id}","starred_url":"https://api.github.com/users/digitalextremist/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/digitalextremist/subscriptions","organizations_url":"https://api.github.com/users/digitalextremist/orgs","repos_url":"https://api.github.com/users/digitalextremist/repos","events_url":"https://api.github.com/users/digitalextremist/events{/privacy}","received_events_url":"https://api.github.com/users/digitalextremist/received_events","type":"User","site_admin":false},"created_at":"2015-04-18T15:17:59Z","updated_at":"2015-04-18T15:17:59Z","body":"Revisting in later release. No longer following this 'thread' "}}