Use concrete value for quad.Quad
Comparison of -short benchmarks in cayley.
$ benchcmp pointer.bench concrete.bench
benchmark old ns/op new ns/op delta
BenchmarkNamePredicate 1673276 1655093 -1.09%
BenchmarkLargeSetsNoIntersection 318985907 261499984 -18.02%
BenchmarkNetAndSpeed 104403743 41516981 -60.23%
BenchmarkKeanuAndNet 17309258 16857513 -2.61%
BenchmarkKeanuAndSpeed 20159161 19282833 -4.35%
Comparison of pathological cases are not so happy.
benchmark old ns/op new ns/op delta
BenchmarkVeryLargeSetsSmallIntersection 55269775527 246084606672 +345.24%
BenchmarkHelplessContainsChecker 23436501319 24308906949 +3.72%
Profiling the worst case:
Pointer:
Total: 6121 samples
1973 32.2% 32.2% 1973 32.2% runtime.findfunc
773 12.6% 44.9% 773 12.6% readvarint
510 8.3% 53.2% 511 8.3% step
409 6.7% 59.9% 410 6.7% runtime.gentraceback
390 6.4% 66.2% 391 6.4% pcvalue
215 3.5% 69.8% 215 3.5% runtime.funcdata
181 3.0% 72.7% 181 3.0% checkframecopy
118 1.9% 74.6% 119 1.9% runtime.funcspdelta
96 1.6% 76.2% 96 1.6% runtime.topofstack
76 1.2% 77.5% 76 1.2% scanblock
Concrete:
Total: 25027 samples
9437 37.7% 37.7% 9437 37.7% runtime.findfunc
3853 15.4% 53.1% 3853 15.4% readvarint
2366 9.5% 62.6% 2366 9.5% step
2186 8.7% 71.3% 2186 8.7% runtime.gentraceback
1816 7.3% 78.5% 1816 7.3% pcvalue
1016 4.1% 82.6% 1016 4.1% runtime.funcdata
859 3.4% 86.0% 859 3.4% checkframecopy
506 2.0% 88.1% 506 2.0% runtime.funcspdelta
410 1.6% 89.7% 410 1.6% runtime.topofstack
303 1.2% 90.9% 303 1.2% runtime.newstack
This commit is contained in:
parent
1ae81e6d00
commit
6acfdcc5d6
19 changed files with 183 additions and 183 deletions
14
quad/quad.go
14
quad/quad.go
|
|
@ -104,7 +104,7 @@ func (d Direction) String() string {
|
|||
// instead of the pointer. This needs benchmarking to make the decision.
|
||||
|
||||
// Per-field accessor for triples
|
||||
func (q *Quad) Get(d Direction) string {
|
||||
func (q Quad) Get(d Direction) string {
|
||||
switch d {
|
||||
case Subject:
|
||||
return q.Subject
|
||||
|
|
@ -119,16 +119,16 @@ func (q *Quad) Get(d Direction) string {
|
|||
}
|
||||
}
|
||||
|
||||
func (q *Quad) Equals(o *Quad) bool {
|
||||
return *q == *o
|
||||
func (q Quad) Equals(o Quad) bool {
|
||||
return q == o
|
||||
}
|
||||
|
||||
// Pretty-prints a triple.
|
||||
func (q *Quad) String() string {
|
||||
func (q Quad) String() string {
|
||||
return fmt.Sprintf("%s -- %s -> %s", q.Subject, q.Predicate, q.Object)
|
||||
}
|
||||
|
||||
func (q *Quad) IsValid() bool {
|
||||
func (q Quad) IsValid() bool {
|
||||
return q.Subject != "" && q.Predicate != "" && q.Object != ""
|
||||
}
|
||||
|
||||
|
|
@ -137,7 +137,7 @@ func (q *Quad) IsValid() bool {
|
|||
// from nquads to here to provide UnmarshalText(text []byte) error.
|
||||
|
||||
// Prints a triple in N-Quad format.
|
||||
func (q *Quad) NTriple() string {
|
||||
func (q Quad) NTriple() string {
|
||||
if q.Label == "" {
|
||||
//TODO(barakmich): Proper escaping.
|
||||
return fmt.Sprintf("%s %s %s .", q.Subject, q.Predicate, q.Object)
|
||||
|
|
@ -147,5 +147,5 @@ func (q *Quad) NTriple() string {
|
|||
}
|
||||
|
||||
type Unmarshaler interface {
|
||||
Unmarshal() (*Quad, error)
|
||||
Unmarshal() (Quad, error)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue