Beatwc

Goofing around to see if we can beatwc in Elixir

View the Project on GitHub bbense/beatwc

Beating System.cmd("wc",["-l", file]) with native Elixir code

Know the Enemy

Naive File.Stream!

First pass at slurp with :binary functions

File slurping with only NIF functions from :binary

NIF functions from :binary with file chunking

NIF functions from :binary with file chunking and parallel task execution

  def parallel(path, chunksize \\ @pchunk_size) do
    File.stream!(path,[], chunksize)
    |> EnumP.scatter(fn(chunk) -> count(chunk) end)
    |> EnumP.gather(0, fn(acc, result) -> result + acc end)
  end

  defp count(binary) do
    search = :binary.compile_pattern(<<"\n">>)
    :erlang.length(:binary.matches(binary, search))
  end

Timing Results