[erlang-questions] (no subject)
Julian Fondren
ayrnieu@REDACTED
Sun Dec 10 11:21:33 CET 2006
I have a binaries.erl that I've grown very slowly, as I come to want
functions. I do a lot of personal work[0] on a very
memory-constrained[1] machine, so I probably have much more to do
with memory-saving techniques involving iterators and binaries than
most people. In any case, although I normally care about strings,
with binaries.erl I have maintained some flexibility in unit sizes
-- for example, my reverse/1 simply reverses a binary by byte, but
reverse/2 also exists to reverse by N-bit-values.
So it disappoints me to discover that I can't continue this pattern
with my newest subseq/4 function:
substr(B,I,L) -> subseq(8,B,I,L).
subseq(N,B,I,L) ->
N2 = I-1,
<<_:N2/binary-unit:N, R:L/binary-unit:N, _/binary>> = B,
R.
Which flexibility would allow subseq(4,<<"hi">>,2,2) to return <<134>>.
But only literal values can appear as a unit size.
Is this restriction likely to go away? Why does it exist?[2]
Thanks,
Julian
0] pretty much everything, as Erlang is almost unique in that it runs
perfectly acceptably on this machine, whereas the supplied Perl has
a hideous start-up time, whereas many other language implementations
won't even compile. I have an erlang node running all the time to
manage my *music*, of all things, as mplayer has also has a hideous
start-up time -- but will respond with alacrity to piped commands.
1] OpenBSD on a Zaurus SL-C3200, with 64MB of RAM.
2] OK, with some more thought, I see that I can do this:
subseq(N,B,I,L) ->
H = (I - 1) * N,
L2 = L * N,
F = (H + L2) rem 8, % alignment for _/binary
<<_:H, R:L2, _:F, _/binary>> = B,
<<R:L2>>.
but this is pretty ugly.
More information about the erlang-questions
mailing list