Open segevfiner opened 4 months ago
I think it'd make more sense to just implement matches
and captures
with IterableIterator by default, what do you think?
I'm worried about backwards compat abd performance. Which is why I kept the existing ones for now.
If performance is a concern, why even add this then? What's the benefit/purpose exactly? (really curious because I'm all for iterators)
Memory consumption. As using iterators means we don't need to hold all results in memory at once. We still need to measure if it's really significantly slower or not. I'm not sure if it's really slower. But if it is, it is always possible to chunk the iteration internally so we don't transfer one by one.
Add iterator methods to Query
Still need to do
capturesIter
andCapturesIterator
, typings, etc.I'm not that happy about the code duplication though... We could probably implement
matches
andcaptures
in terms ofmatchesIter
andcapturesIter
to reduce it. But that might be slower due to all the additional calls that would entail between C++ and JS, and transferring the nodes one by one.P.S.
LookaheadIterator[@@iterator]
can probably be implemented in C++, andts_query_cursor
can probably be allocated onQuery
instead of inAddonData
if we want too.Fixes #178