Update src/README.md
This commit is contained in:
parent
cd847affb7
commit
2c86e728b5
@ -2,30 +2,45 @@ fzf in Go
|
||||
=========
|
||||
|
||||
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
|
||||
version.
|
||||
[Go][go].
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
Because of the change, users running Ruby 2.1 or above were forced to build C
|
||||
matters worse, Ruby 2.1 removed ncurses binding from its standard libary.
|
||||
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
|
||||
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
|
||||
|
||||
With the presence of [GIL][gil], Ruby cannot utilize multiple CPU cores. Even
|
||||
though the Ruby version of fzf was pretty responsive even for 100k+ lines,
|
||||
which is well above the size of the usual input, it was obvious that we could
|
||||
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
|
||||
was shown to be an order of magnitude faster on certain cases. It also starts
|
||||
much faster than before though the difference shouldn't be really noticeable.
|
||||
Many people have been surprised to see how fast fzf is even when it was
|
||||
written in Ruby. It stays quite responsive even for 100k+ lines, which is
|
||||
well above the size of the usual input.
|
||||
|
||||
The new Go version, of course, is significantly faster than that. It has all
|
||||
the performance optimization techniques used in Ruby implementation and more.
|
||||
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
|
||||
-----------------------------
|
||||
@ -40,19 +55,19 @@ even for 1M+ items) so I decided that it's no longer required.
|
||||
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
|
||||
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
|
||||
not run on CentOS/RHEL 5.x and thus the install script will choose the Ruby
|
||||
version instead.
|
||||
not run on CentOS/RHEL 5.x, and if that's the case, the install script will
|
||||
choose the Ruby version instead.
|
||||
|
||||
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
|
||||
impossible to support Windows by falling back to a cross-platform alternative
|
||||
such as [termbox][termbox] only on Windows. If you're interested in making fzf
|
||||
work on Windows, please let me know.
|
||||
shouldn't run natively on Windows at the moment. But it won't be impossible to
|
||||
support Windows by falling back to a cross-platform alternative such as
|
||||
[termbox][termbox] only on Windows. If you're interested in making fzf work on
|
||||
Windows, please let me know.
|
||||
|
||||
Build
|
||||
-----
|
||||
@ -68,6 +83,17 @@ make install
|
||||
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
|
||||
--------------------------
|
||||
|
||||
@ -77,18 +103,6 @@ Third-party libraries used
|
||||
- [mattn/go-shellwords](https://github.com/mattn/go-shellwords)
|
||||
- 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
|
||||
-------
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user