{"action":"created","issue":{"url":"https://api.github.com/repos/caolan/highland/issues/179","labels_url":"https://api.github.com/repos/caolan/highland/issues/179/labels{/name}","comments_url":"https://api.github.com/repos/caolan/highland/issues/179/comments","events_url":"https://api.github.com/repos/caolan/highland/issues/179/events","html_url":"https://github.com/caolan/highland/issues/179","id":51874726,"number":179,"title":"Highland v3.0.0","user":{"login":"vqvu","id":6435429,"avatar_url":"https://avatars.githubusercontent.com/u/6435429?v=3","gravatar_id":"","url":"https://api.github.com/users/vqvu","html_url":"https://github.com/vqvu","followers_url":"https://api.github.com/users/vqvu/followers","following_url":"https://api.github.com/users/vqvu/following{/other_user}","gists_url":"https://api.github.com/users/vqvu/gists{/gist_id}","starred_url":"https://api.github.com/users/vqvu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vqvu/subscriptions","organizations_url":"https://api.github.com/users/vqvu/orgs","repos_url":"https://api.github.com/users/vqvu/repos","events_url":"https://api.github.com/users/vqvu/events{/privacy}","received_events_url":"https://api.github.com/users/vqvu/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":30,"created_at":"2014-12-13T03:16:22Z","updated_at":"2015-01-28T13:31:46Z","closed_at":null,"body":"This issue tracks any changes we want for v3.0.0. See the 3.0.0 branch.\r\n\r\nThe biggest change for now is a reimplementation of the Highland engine. See the original PR at #175.\r\n\r\nStill to do:\r\n\r\n- [ ] See if we can implement `resume` and stream redirects iteratively.\r\n- [ ] Check for memory leaks.\r\n- [ ] Create some benchmarks.\r\n- [ ] \"Degenerate tests\"\r\n\r\nAny other breaking changes? I know of some suggestions in\r\n- #172 - Back propagation of nil, which would require that streams not allow multiple `consumes` without a `fork` (even after the initial `consume` finishes and removes itself).\r\n- #166 - `pipe` passes along errors if piping to a Highland stream."},"comment":{"url":"https://api.github.com/repos/caolan/highland/issues/comments/71834718","html_url":"https://github.com/caolan/highland/issues/179#issuecomment-71834718","issue_url":"https://api.github.com/repos/caolan/highland/issues/179","id":71834718,"user":{"login":"jeromew","id":687842,"avatar_url":"https://avatars.githubusercontent.com/u/687842?v=3","gravatar_id":"","url":"https://api.github.com/users/jeromew","html_url":"https://github.com/jeromew","followers_url":"https://api.github.com/users/jeromew/followers","following_url":"https://api.github.com/users/jeromew/following{/other_user}","gists_url":"https://api.github.com/users/jeromew/gists{/gist_id}","starred_url":"https://api.github.com/users/jeromew/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jeromew/subscriptions","organizations_url":"https://api.github.com/users/jeromew/orgs","repos_url":"https://api.github.com/users/jeromew/repos","events_url":"https://api.github.com/users/jeromew/events{/privacy}","received_events_url":"https://api.github.com/users/jeromew/received_events","type":"User","site_admin":false},"created_at":"2015-01-28T13:31:46Z","updated_at":"2015-01-28T13:31:46Z","body":"I cloned your branch and get\r\n\r\n````\r\n.map(square) x 1,000,000\r\n\r\nunderscore  ############################################################ 274ms\r\nlodash      #################################### 162ms\r\nhighland    ############################ 126ms\r\n````\r\n\r\nthe joy of benchmarks. inlining + tryCatch seem to improve things a little.\r\n\r\nI have no idea what to do about the bootstrapping of highland at this time. \r\n\r\n````\r\n.map(square) x 10,000\r\nunderscore  ######### 1ms\r\nlodash      ######### 1ms\r\nhighland    ############################################################ 7ms\r\n````\r\n\r\nI am not sure that 2.x does any better but for frequent highland usage on moderate arrays, this can have a big impact. lodash reaches this probably by using the native array.map. I am not sure though how we could 'bridge' the sync/async gap by using array.map when possible.\r\n\r\nAnyway we should first see if we want/can flatten the call tree before optimimizing the pull/consume primitives.\r\n\r\nOn a side note I saw that lodash 3.0.0 has landed and has lazy support - http://filimanjaro.com/blog/2014/introducing-lazy-evaluation/. Maybe there could be a way for the highland engine to defer to lodash when in sync mode. That's just a thought but if the core of highland is really the pull/consume engine that bridges the gap between sync/async, it could be interesting to benefit from the work on lodash for sync optimization..but that's just a tought ;-)\r\n\r\nI'll try to understand how the recursive consume could be unrolled so we can discuss this."}}