1 Star 0 Fork 0

jasongwq / mtail

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
TODO 3.36 KB
一键复制 编辑 原始数据 按行查看 历史
standard library, search path
refactor fs and notify into single interface
no trailing newline in parser test, requires changes to expr stmt
parse tree/ast testing? - expected AST as result from parse/check instead of
merely getting a result
mapping between progs and logs to reduce wasted processing- issue #35
bytecode like
[{push 1} {push 0} {cmp 1} {jm 6} {push 0} {jmp 7} {push 1} {jnm 13}
{setmatched false} {mload 0} {dload 0} {inc <nil>} {setmatched true}]
can be expressed as
[{push 1} {push 0} {cmp 1} {jm 9} {setmatched false} {mload 0} {dload 0} {inc
<nil>} {setmatched true}]
but jnm 13 is from the condExpr and the previous is from a comparison binary
expr; an optimizer is needed to collapse the bytecode to undersand that
cmp, jm, push, jump, push, jnm in sequence like so is the same as a cmp, jm
and we need to worry about the jump table too
reversed casts: s2i,i2s pairs as well
count stack size and preallocate stack
-> counts of push/pop per instruction
-> test to keep p/p counts updated
: seems like a lot of work for not much return
Run and upload benchmarks to https://perfdata.golang.org/ from circleci
# Won't do
X Use capture group references to feed back to declaring regular expression,
X noting unused caprefs,
X possibly flipping back to noncapturing (and renumbering the caprefs?)
X -> unlikely to implement, probably won't impact regexp speed
When using a const by itself as a match condition, then we get warnings about
the capture group names not existing.
const A /(?<a>.*)/
A {
x[$a]++
}
... => $a not defined in scope.
Can't define string constants, like const STRPTIME_FORMAT "Jan _2"
Multline const can't startwith a newline, must be const FOO // +\n...
Can't chain two matches in same expresison like getfilename() =~ 'name' &&
EXPR_RE because $0 is redefined
Can't set the timestamp when processing one log line and reuse it in another; must use the
caching state metric pattern, hidden gauge time.
Get a list of non-stdlib deps
go list -f "{{if not .Standard}}{{.ImportPath}}{{end}}" $(go list -f '{{join .Deps "\n"}}' ./...)
Request joining (request coalescing) for the log-watcher when sending updates about files, in case
one's already in the queue. Maybe helps with fsnotify overflow, and the
duplicate notify problem from poll-only mode?
Can we do this with a one-element channel per file, and a select on send to abort if the send blocks?
Programs may not use mtail_ as a metric prefix.
Theory: Implicitly cast Int shouldn't get the S2i conversion applied to them. Do we need to name Implicit Int separate from Int and then not create s2i or other conversions for implicits. (and we need to keep the runtime conversions?)
=~ isn't documented in the language or programming guide docs
if you comment out the MATCH_NETWORK clase in dhcpd.mtail it gets 30x faster... because the regexp no longer backtracks... why...
Avoid byte to string conversions in the tailer and vm FindStringSubmatch > https://dave.cheney.net/high-performance-go-workshop/dotgo-paris.html#strings_and_bytes
Use FindSubmatchIndex to avoid copies?
Move the non-program examples to the vm integration test.
Why is strings.Builder slower than bytes.Buffer when the latter's docstring recommends the former?
file-test.go relies on the ReadDeadline timeouts in file.go and socket.go. Remove to make tests faster.
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jasongwq/mtail.git
git@gitee.com:jasongwq/mtail.git
jasongwq
mtail
mtail
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891