Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
F
fzf
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to JiHu GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
KMSCAKKSCFKA AKFACAMADCAS
fzf
Commits
2c86e728
Commit
2c86e728
authored
10 years ago
by
Junegunn Choi
Browse files
Options
Downloads
Patches
Plain Diff
Update src/README.md
parent
cd847aff
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/README.md
+47
-33
47 additions, 33 deletions
src/README.md
with
47 additions
and
33 deletions
src/README.md
+
47
−
33
View file @
2c86e728
...
...
@@ -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
dropp
ed ncurses
support
from its standard libary.
Because of the change, users running Ruby 2.1 or above
we
re forced to build C
matters worse, Ruby 2.1
remov
ed ncurses
binding
from its standard libary.
Because of the change, users running Ruby 2.1 or above
a
re 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
-------
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment