{"action":"created","issue":{"url":"https://api.github.com/repos/ocaml/ocaml/issues/198","labels_url":"https://api.github.com/repos/ocaml/ocaml/issues/198/labels{/name}","comments_url":"https://api.github.com/repos/ocaml/ocaml/issues/198/comments","events_url":"https://api.github.com/repos/ocaml/ocaml/issues/198/events","html_url":"https://github.com/ocaml/ocaml/pull/198","id":86642149,"number":198,"title":"Decrease the cost of non-partial, generic application.","user":{"login":"cgaebel","id":128969,"avatar_url":"https://avatars.githubusercontent.com/u/128969?v=3","gravatar_id":"","url":"https://api.github.com/users/cgaebel","html_url":"https://github.com/cgaebel","followers_url":"https://api.github.com/users/cgaebel/followers","following_url":"https://api.github.com/users/cgaebel/following{/other_user}","gists_url":"https://api.github.com/users/cgaebel/gists{/gist_id}","starred_url":"https://api.github.com/users/cgaebel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgaebel/subscriptions","organizations_url":"https://api.github.com/users/cgaebel/orgs","repos_url":"https://api.github.com/users/cgaebel/repos","events_url":"https://api.github.com/users/cgaebel/events{/privacy}","received_events_url":"https://api.github.com/users/cgaebel/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":4,"created_at":"2015-06-09T15:41:16Z","updated_at":"2015-06-10T15:38:54Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/ocaml/ocaml/pulls/198","html_url":"https://github.com/ocaml/ocaml/pull/198","diff_url":"https://github.com/ocaml/ocaml/pull/198.diff","patch_url":"https://github.com/ocaml/ocaml/pull/198.patch"},"body":"In the current world, any generic application of a function will\r\nresult in a call to caml_applyN. This very simple function has shown\r\nup on profiles as unnecessarily hot.\r\n\r\nBased on the realization that the vast majority of caml_applyN calls\r\nare due to the generic application of a non-partially applied\r\nfunction, this patch inlines that case into the caller, with a branch\r\nto caml_applyN if the generic application is also partial."},"comment":{"url":"https://api.github.com/repos/ocaml/ocaml/issues/comments/110801804","html_url":"https://github.com/ocaml/ocaml/pull/198#issuecomment-110801804","issue_url":"https://api.github.com/repos/ocaml/ocaml/issues/198","id":110801804,"user":{"login":"cgaebel","id":128969,"avatar_url":"https://avatars.githubusercontent.com/u/128969?v=3","gravatar_id":"","url":"https://api.github.com/users/cgaebel","html_url":"https://github.com/cgaebel","followers_url":"https://api.github.com/users/cgaebel/followers","following_url":"https://api.github.com/users/cgaebel/following{/other_user}","gists_url":"https://api.github.com/users/cgaebel/gists{/gist_id}","starred_url":"https://api.github.com/users/cgaebel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cgaebel/subscriptions","organizations_url":"https://api.github.com/users/cgaebel/orgs","repos_url":"https://api.github.com/users/cgaebel/repos","events_url":"https://api.github.com/users/cgaebel/events{/privacy}","received_events_url":"https://api.github.com/users/cgaebel/received_events","type":"User","site_admin":false},"created_at":"2015-06-10T15:38:54Z","updated_at":"2015-06-10T15:38:54Z","body":"After looking at the benchmark some more, I've got an interesting result: caml_apply is only slow when you look for it.\r\n\r\nSpecifically, it only incurs a penalty when one has frame pointers enabled (and then it's ~10% in my benchmark above). I'm not sure whether this is worth it any more."}}