{"action":"created","issue":{"url":"https://api.github.com/repos/vn-tools/arc_unpacker/issues/5","labels_url":"https://api.github.com/repos/vn-tools/arc_unpacker/issues/5/labels{/name}","comments_url":"https://api.github.com/repos/vn-tools/arc_unpacker/issues/5/comments","events_url":"https://api.github.com/repos/vn-tools/arc_unpacker/issues/5/events","html_url":"https://github.com/vn-tools/arc_unpacker/issues/5","id":53148809,"number":5,"title":"Consider technology shift","user":{"login":"rr-","id":1045476,"avatar_url":"https://avatars.githubusercontent.com/u/1045476?v=3","gravatar_id":"","url":"https://api.github.com/users/rr-","html_url":"https://github.com/rr-","followers_url":"https://api.github.com/users/rr-/followers","following_url":"https://api.github.com/users/rr-/following{/other_user}","gists_url":"https://api.github.com/users/rr-/gists{/gist_id}","starred_url":"https://api.github.com/users/rr-/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rr-/subscriptions","organizations_url":"https://api.github.com/users/rr-/orgs","repos_url":"https://api.github.com/users/rr-/repos","events_url":"https://api.github.com/users/rr-/events{/privacy}","received_events_url":"https://api.github.com/users/rr-/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/vn-tools/arc_unpacker/labels/enhancement","name":"enhancement","color":"84b6eb"},{"url":"https://api.github.com/repos/vn-tools/arc_unpacker/labels/question","name":"question","color":"cc317c"}],"state":"open","locked":false,"assignee":{"login":"rr-","id":1045476,"avatar_url":"https://avatars.githubusercontent.com/u/1045476?v=3","gravatar_id":"","url":"https://api.github.com/users/rr-","html_url":"https://github.com/rr-","followers_url":"https://api.github.com/users/rr-/followers","following_url":"https://api.github.com/users/rr-/following{/other_user}","gists_url":"https://api.github.com/users/rr-/gists{/gist_id}","starred_url":"https://api.github.com/users/rr-/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rr-/subscriptions","organizations_url":"https://api.github.com/users/rr-/orgs","repos_url":"https://api.github.com/users/rr-/repos","events_url":"https://api.github.com/users/rr-/events{/privacy}","received_events_url":"https://api.github.com/users/rr-/received_events","type":"User","site_admin":false},"milestone":null,"comments":1,"created_at":"2014-12-30T21:30:57Z","updated_at":"2015-01-10T07:39:43Z","closed_at":null,"body":"1. Some areas suffer form very poor performance.\r\n2. This has prompted me to start creating native extensions in C instead of writing it in plain Ruby.\r\n3. The obvious advantage lies in the gained performance.\r\n4. There are, however, numerous disadvantages of such approach:\r\n    1. The codebase becomes impure, it mixes Ruby with C.\r\n    2. It imposes great requirements on the end user - he must have `gcc` and `make` around. I assume it is a great PITA to get this right on Windows (used by the target audience) without using Cygwin.\r\n    3. There is `RubyInline`, but it causes multiple problems on every machine I try to install it on (surprisingly, biggest problems kept happening on Debian). It doesn't resolve the issues mentioned previous points either.\r\n    4. Even if I port the most sensitive parts to C, the remaining code is still quite slow.\r\n\r\nThe biggest issue with this is that when I started this project, I've chosen Ruby because I wanted it to be as clean and nice as possible... to developers. Now I feel like that as a byproduct, this tool can be used *only* by developers.\r\n\r\nMy suggestions are following:\r\n\r\n- Ignore this issue. Which is what I'm going to do for now.\r\n- Switch to other language.\r\n   1. **Go**. I'm a bit reluctant to rely on anything from Google, but from what I heard about Go, this seems like a good choice. The syntax is weird.\r\n   2. **Rust**. For now, it's too immature - core modules might change any moment. The syntax is crazy. I'm afraid of compile times - no incremental building.\r\n    3. **D**. I know nothing about D, except that it falls into similar niche.\r\n    4. ~~C/C++.~~ Makefiles are nightmare, unit testing that needs to use macros is a nightmare, includes that expand to 70k SLOC is a nightmare. Everything reeks of 80s and C++14 doesn't fix that."},"comment":{"url":"https://api.github.com/repos/vn-tools/arc_unpacker/issues/comments/69447400","html_url":"https://github.com/vn-tools/arc_unpacker/issues/5#issuecomment-69447400","issue_url":"https://api.github.com/repos/vn-tools/arc_unpacker/issues/5","id":69447400,"user":{"login":"erengy","id":1078430,"avatar_url":"https://avatars.githubusercontent.com/u/1078430?v=3","gravatar_id":"","url":"https://api.github.com/users/erengy","html_url":"https://github.com/erengy","followers_url":"https://api.github.com/users/erengy/followers","following_url":"https://api.github.com/users/erengy/following{/other_user}","gists_url":"https://api.github.com/users/erengy/gists{/gist_id}","starred_url":"https://api.github.com/users/erengy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/erengy/subscriptions","organizations_url":"https://api.github.com/users/erengy/orgs","repos_url":"https://api.github.com/users/erengy/repos","events_url":"https://api.github.com/users/erengy/events{/privacy}","received_events_url":"https://api.github.com/users/erengy/received_events","type":"User","site_admin":false},"created_at":"2015-01-10T07:39:43Z","updated_at":"2015-01-10T07:39:43Z","body":"I've previously written a similar multipurpose tool in C++. It did work fast, and it could have worked even faster, but I couldn't help questioning myself whether I actually needed that kind of performance or not. If I were to write it again now, I'd probably go with Python (I'm not familiar with Ruby) or try out Go. Python would gather more contributors, if any. Go would run considerably faster.\r\n\r\nHow slow is quite slow? Unpacking of an archive is rarely done twice, so that shouldn't be an issue. If the packing process is not unreasonably slow, then the shift may not be worth it.\r\n\r\nPS: Rust has just hit [v1.0 alpha](http://blog.rust-lang.org/2015/01/09/Rust-1.0-alpha.html), which is reassuring in terms of stability."}}