From eb972e19ebde9e81cf076af9a3b3094a5c02f79f Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sat, 10 Jan 2026 16:48:53 -0500 Subject: [PATCH] Use GOCC fork for performance improvement (#1934) * Use GOCC fork for performance improvement * fix versions --- README-dev.md | 3 ++- cmd/experiments/dsl_parser/one/build | 6 +++--- cmd/experiments/dsl_parser/one/go.mod | 4 ++-- cmd/experiments/dsl_parser/one/go.sum | 26 -------------------------- cmd/experiments/dsl_parser/two/build | 6 +++--- cmd/experiments/dsl_parser/two/go.mod | 4 ++-- cmd/experiments/dsl_parser/two/go.sum | 26 -------------------------- go.mod | 2 ++ go.sum | 4 ++++ pkg/parsing/mlr.bnf | 2 +- tools/build-dsl | 4 ++-- 11 files changed, 21 insertions(+), 66 deletions(-) diff --git a/README-dev.md b/README-dev.md index 0e363db5c..6dd708f95 100644 --- a/README-dev.md +++ b/README-dev.md @@ -95,13 +95,14 @@ So, in broad overview, the key packages are: * Miller dependencies are all in the Go standard library, except two: * GOCC lexer/parser code-generator from [github.com/goccmack/gocc](https://github.com/goccmack/gocc): + * Forked at [github.com/johnkerl/gocc](github.com/johnkerl/gocc). * This package defines the grammar for Miller's domain-specific language (DSL) for the Miller `put` and `filter` verbs. And, GOCC is a joy to use. :) * It is used on the terms of its open-source license. * [golang.org/x/term](https://pkg.go.dev/golang.org/x/term): * Just a one-line Miller callsite for is-a-terminal checking for the [Miller REPL](./pkg/terminals/repl/README.md). * It is used on the terms of its open-source license. * See also [./go.mod](go.mod). Setup: - * `go get github.com/goccmack/gocc` + * `go get github.com/johnkerl/gocc` * `go get golang.org/x/term` ### Miller per se diff --git a/cmd/experiments/dsl_parser/one/build b/cmd/experiments/dsl_parser/one/build index 373184a92..b43d4bc26 100755 --- a/cmd/experiments/dsl_parser/one/build +++ b/cmd/experiments/dsl_parser/one/build @@ -28,9 +28,9 @@ mkdir -p $dir # ---------------------------------------------------------------- # Run the parser-generator -# Build the bin/gocc executable: -go get github.com/goccmack/gocc -#go get github.com/johnkerl/gocc +# Build the bin/gocc executable (use my fork for performance): +# get github.com/goccmack/gocc +go get github.com/johnkerl/gocc bingocc="$GOPATH/bin/gocc" if [ ! -x "$bingocc" ]; then diff --git a/cmd/experiments/dsl_parser/one/go.mod b/cmd/experiments/dsl_parser/one/go.mod index e4f49daf8..4e81172d6 100644 --- a/cmd/experiments/dsl_parser/one/go.mod +++ b/cmd/experiments/dsl_parser/one/go.mod @@ -1,5 +1,5 @@ module one -go 1.16 +go 1.24 -require github.com/goccmack/gocc v0.0.0-20210322175033-34358ebe5808 // indirect +toolchain go1.24.5 diff --git a/cmd/experiments/dsl_parser/one/go.sum b/cmd/experiments/dsl_parser/one/go.sum index dfc52feaf..e69de29bb 100644 --- a/cmd/experiments/dsl_parser/one/go.sum +++ b/cmd/experiments/dsl_parser/one/go.sum @@ -1,26 +0,0 @@ -github.com/goccmack/gocc v0.0.0-20210322175033-34358ebe5808 h1:MBgZdx/wBJWTR2Q79mQfP6c8uXdQiu5JowfEz3KhFac= -github.com/goccmack/gocc v0.0.0-20210322175033-34358ebe5808/go.mod h1:dWhnuKE5wcnGTExA2DH6Iicu21YnWwOPMrc/GyhtbCk= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/cmd/experiments/dsl_parser/two/build b/cmd/experiments/dsl_parser/two/build index 2cb7893d3..1ea06c916 100755 --- a/cmd/experiments/dsl_parser/two/build +++ b/cmd/experiments/dsl_parser/two/build @@ -28,9 +28,9 @@ mkdir -p $dir # ---------------------------------------------------------------- # Run the parser-generator -# Build the bin/gocc executable: -go get github.com/goccmack/gocc -#go get github.com/johnkerl/gocc +# Build the bin/gocc executable (use my fork for performance): +# go get github.com/goccmack/gocc +go get github.com/johnkerl/gocc bingocc="$GOPATH/bin/gocc" if [ ! -x "$bingocc" ]; then exit 1 diff --git a/cmd/experiments/dsl_parser/two/go.mod b/cmd/experiments/dsl_parser/two/go.mod index be38de9a3..81c05ea5e 100644 --- a/cmd/experiments/dsl_parser/two/go.mod +++ b/cmd/experiments/dsl_parser/two/go.mod @@ -1,5 +1,5 @@ module two -go 1.16 +go 1.24 -require github.com/goccmack/gocc v0.0.0-20210322175033-34358ebe5808 // indirect +toolchain go1.24.5 diff --git a/cmd/experiments/dsl_parser/two/go.sum b/cmd/experiments/dsl_parser/two/go.sum index dfc52feaf..e69de29bb 100644 --- a/cmd/experiments/dsl_parser/two/go.sum +++ b/cmd/experiments/dsl_parser/two/go.sum @@ -1,26 +0,0 @@ -github.com/goccmack/gocc v0.0.0-20210322175033-34358ebe5808 h1:MBgZdx/wBJWTR2Q79mQfP6c8uXdQiu5JowfEz3KhFac= -github.com/goccmack/gocc v0.0.0-20210322175033-34358ebe5808/go.mod h1:dWhnuKE5wcnGTExA2DH6Iicu21YnWwOPMrc/GyhtbCk= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/go.mod b/go.mod index d9d14b201..a1c42dda7 100644 --- a/go.mod +++ b/go.mod @@ -37,8 +37,10 @@ require ( github.com/felixge/fgprof v0.9.3 // indirect github.com/golang/snappy v1.0.0 // indirect github.com/google/pprof v0.0.0-20211214055906-6f57359322fd // indirect + github.com/johnkerl/gocc v0.0.0-20260110202143-38efff71563b // indirect github.com/kshedden/dstream v0.0.0-20190512025041-c4c410631beb // indirect github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/mod v0.30.0 // indirect golang.org/x/tools v0.39.0 // indirect gonum.org/v1/gonum v0.16.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 467f71fab..979fd84eb 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,8 @@ github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/google/pprof v0.0.0-20211214055906-6f57359322fd h1:1FjCyPC+syAzJ5/2S8fqdZK1R22vvA0J7JZKcuOIQ7Y= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/johnkerl/gocc v0.0.0-20260110202143-38efff71563b h1:YjgYl7wZucuGLa3y7QLGpyZeWwzFQtx8xy6EDa6a+6M= +github.com/johnkerl/gocc v0.0.0-20260110202143-38efff71563b/go.mod h1:PdhK7K05ZpbKpVgSHtJbJJRQkEIG/aElMtVjAFAIn6U= github.com/johnkerl/lumin v1.0.0 h1:CV34cHZOJ92Y02RbQ0rd4gA0C06Qck9q8blOyaPoWpU= github.com/johnkerl/lumin v1.0.0/go.mod h1:eLf5AdQOaLvzZ2zVy4REr/DSeEwG+CZreHwNLICqv9E= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= @@ -41,6 +43,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= +golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= diff --git a/pkg/parsing/mlr.bnf b/pkg/parsing/mlr.bnf index 5903cf419..bd9602f81 100644 --- a/pkg/parsing/mlr.bnf +++ b/pkg/parsing/mlr.bnf @@ -7,7 +7,7 @@ // GRAMMAR FOR THE MILLER DOMAIN-SPECIFIC LANGUAGE // // This is the Miller DSL's BNF grammar, using the awesome GOCC tool framework -// from https://github.com/goccmack/gocc. +// from https://github.com/goccmack/gocc (forked at https://github.com/johnkerl/gocc). // // The first section is lexical elements and the second section is syntactical // elements. These are the analogs of lex and yacc, respectively, using a diff --git a/tools/build-dsl b/tools/build-dsl index e2a6186d2..4cf70cbf5 100755 --- a/tools/build-dsl +++ b/tools/build-dsl @@ -27,8 +27,8 @@ if [ $# -eq 1 ]; then fi fi -# Build the bin/gocc executable: -go install github.com/goccmack/gocc +# Build the bin/gocc executable (use my fork for performance): +go install github.com/johnkerl/gocc go mod tidy bingocc="$HOME/go/bin/gocc" if [ ! -x "$bingocc" ]; then