Update src/README.md

This commit is contained in:
Junegunn Choi 2015-01-13 02:05:37 +09:00
parent cd847affb7
commit 2c86e728b5

View File

@ -2,30 +2,45 @@ fzf in Go
========= =========
This directory contains the source code for the new fzf implementation in This directory contains the source code for the new fzf implementation in
[Go][go]. The new version has the following benefits over the previous Ruby [Go][go].
version.
Motivation Upgrade from Ruby version
---------- -------------------------
The install script has been updated to download the right binary for your
system. If you already have installed fzf, simply git-pull the repository and
rerun the install script.
```sh
cd ~/.fzf
git pull
./install
```
Motivations
-----------
### No Ruby dependency ### No Ruby dependency
There have always been complaints about fzf being a Ruby script. To make There have always been complaints about fzf being a Ruby script. To make
matters worse, Ruby 2.1 dropped ncurses support from its standard libary. matters worse, Ruby 2.1 removed ncurses binding from its standard libary.
Because of the change, users running Ruby 2.1 or above were forced to build C Because of the change, users running Ruby 2.1 or above are forced to build C
extensions of curses gem to meet the requirement of fzf. The new Go version extensions of curses gem to meet the requirement of fzf. The new Go version
will be distributed as an executable binary so it will be much more accessible will be distributed as an executable binary so it will be much more accessible
and easier to setup. and should be easier to setup.
### Performance ### Performance
With the presence of [GIL][gil], Ruby cannot utilize multiple CPU cores. Even Many people have been surprised to see how fast fzf is even when it was
though the Ruby version of fzf was pretty responsive even for 100k+ lines, written in Ruby. It stays quite responsive even for 100k+ lines, which is
which is well above the size of the usual input, it was obvious that we could well above the size of the usual input.
do better. Now with the Go version, GIL is gone, and the search performance
scales proportional to the number of cores. On my Macbook Pro (Mid 2012), it The new Go version, of course, is significantly faster than that. It has all
was shown to be an order of magnitude faster on certain cases. It also starts the performance optimization techniques used in Ruby implementation and more.
much faster than before though the difference shouldn't be really noticeable. It also doesn't suffer from [GIL][gil], so the search performance scales
proportional to the number of CPU cores. On my MacBook Pro (Mid 2012), the new
version was shown to be an order of magnitude faster on certain cases. It also
starts much faster though the difference may not be noticeable.
Differences with Ruby version Differences with Ruby version
----------------------------- -----------------------------
@ -40,19 +55,19 @@ even for 1M+ items) so I decided that it's no longer required.
System requirements System requirements
------------------- -------------------
Currently prebuilt binaries are provided only for OS X and Linux. The install Currently, prebuilt binaries are provided only for OS X and Linux. The install
script will fall back to the legacy Ruby version on the other systems, but if script will fall back to the legacy Ruby version on the other systems, but if
you have Go 1.4 installed, you can try building it yourself. you have Go 1.4 installed, you can try building it yourself.
However, as pointed out in [golang.org/doc/install][req], the Go version may However, as pointed out in [golang.org/doc/install][req], the Go version may
not run on CentOS/RHEL 5.x and thus the install script will choose the Ruby not run on CentOS/RHEL 5.x, and if that's the case, the install script will
version instead. choose the Ruby version instead.
The Go version depends on [ncurses][ncurses] and some Unix system calls, so it The Go version depends on [ncurses][ncurses] and some Unix system calls, so it
shouldn't run natively on Windows at the moment. But it should be not shouldn't run natively on Windows at the moment. But it won't be impossible to
impossible to support Windows by falling back to a cross-platform alternative support Windows by falling back to a cross-platform alternative such as
such as [termbox][termbox] only on Windows. If you're interested in making fzf [termbox][termbox] only on Windows. If you're interested in making fzf work on
work on Windows, please let me know. Windows, please let me know.
Build Build
----- -----
@ -68,6 +83,17 @@ make install
make linux make linux
``` ```
Contribution
------------
For the time being, I will not add or accept any new features until we can be
sure that the implementation is stable and we have a sufficient number of test
cases. However, fixes for obvious bugs and new test cases are welcome.
I also care much about the performance of the implementation, so please make
sure that your change does not result in performance regression. And please be
noted that we don't have a quantitative measure of the performance yet.
Third-party libraries used Third-party libraries used
-------------------------- --------------------------
@ -77,18 +103,6 @@ Third-party libraries used
- [mattn/go-shellwords](https://github.com/mattn/go-shellwords) - [mattn/go-shellwords](https://github.com/mattn/go-shellwords)
- Licensed under [MIT](http://mattn.mit-license.org/2014) - Licensed under [MIT](http://mattn.mit-license.org/2014)
Contribution
------------
For the time being, I will not add or accept any new features until we can be
sure that the implementation is stable and we have a sufficient number of test
cases. However, fixes for obvious bugs and new test cases are welcome.
I also care much about the performance of the implementation (that's the
reason I rewrote the whole thing in Go, right?), so please make sure that your
change does not result in performance regression. Please be minded that we
still don't have a quantitative measure of the performance.
License License
------- -------