[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: [Proposal] Allow yields through string.gsub
- From: "Soni L." <fakedme@...>
- Date: Wed, 6 Apr 2016 13:41:11 -0300
With the recent changes to string.gmatch and the whole pattern matching
code, it seems like now it's much easier to allow yields through
string.gsub. May Lua users have yieldable string.gsub?
local function f(s, p) return string.gsub(s, p, coroutine.yield) end
local co = coroutine.wrap(f)
local s1 = co("test", ".")
print(v1) -- t
print(co("g"), co("o")) -- e s
local s2 = co("o")
print(s2) -- t
print(co("d")) -- good 4
co = coroutine.wrap(f)
Goals of this proposal:
1. Let coroutines be used for fast dynamic substitution, something we
currently can't do.
2. string.gsub uses a buffer internally, while a string.gmatch-based
approach would require either table allocation or string concatenation.
For large source strings and small replacement strings, string.gsub
would probably be better, both in memory, by cutting down allocation,
and in CPU, by cutting down hashing and interning.
3. Event system interoperability (throw and handle events from a dynamic
substitution).
Another option would be to just add buffers, which would, in theory, let
you reimplement most of the standard libraries in pure Lua, with
performance and memory characteristics closer to the C functions.
--
Disclaimer: these emails may be made public at any given time, with or
without reason. If you don't agree with this, DO NOT REPLY.