Исторический материал. Измерения и статус относятся к дате исходного отчёта. Перевод сверён с английским оригиналом редакции 61e75e9 и не является новой редакцией отчёта.

Изменения с сохранением оформления: сохранённый профиль планировщика для 10,000 понятий

Измерения записаны 2026-07-20 на darwin/arm64, Apple M1 Max, Go 1.26.5 после исправлений границы доверия проверенного манифеста, принадлежности узлов синтаксическим анализаторам и отмены обработки запросов. Это профиль планировщика на момент записи. Воспроизводимое сравнение наложения до реализации изменений на основе синтаксических деревьев и после неё приведено отдельно в отчёте сравнения. Двоичные профили — воспроизводимые временные результаты, которые хранятся вне репозитория.

GOCACHE=/private/tmp/okf-go-cache-profile go test \
  -o /private/tmp/okf-parser-backed-mutation.test ./mutation \
  -run '^$' \
  -bench '^BenchmarkPlannerRepresentativeTransaction/concepts=10000$' \
  -benchtime=1x -benchmem -count=1 \
  -cpuprofile /private/tmp/okf-parser-backed-planner-current-cpu.pprof \
  -memprofile /private/tmp/okf-parser-backed-planner-current-heap.pprof
go tool pprof -top -nodecount=40 /private/tmp/okf-parser-backed-planner-current-cpu.pprof
go tool pprof -alloc_space -top -nodecount=40 /private/tmp/okf-parser-backed-planner-current-heap.pprof

Измерение производительности

BenchmarkPlannerRepresentativeTransaction/concepts=10000-10  1  2191598083 ns/op  10001 files/op  3.000 ops/tx  2270499264 B/op  16875859 allocs/op

Профиль процессорного времени (top, 40 узлов)

Duration: 2.72s, Total samples = 3.32s (121.90%)
Showing nodes accounting for 2.73s, 82.23% of 3.32s total
      flat  flat%   sum%        cum   cum%  name
     0.44s 13.25% 13.25%      0.44s 13.25%  runtime.madvise
     0.27s  8.13% 21.39%      0.27s  8.13%  runtime.memequal
     0.23s  6.93% 28.31%      0.23s  6.93%  runtime.usleep
     0.19s  5.72% 34.04%      0.19s  5.72%  strings.Join
     0.18s  5.42% 39.46%      0.18s  5.42%  runtime.pthread_cond_wait
     0.13s  3.92% 43.37%      0.65s 19.58%  bundle.containsConceptID
     0.11s  3.31% 46.69%      0.11s  3.31%  runtime.pthread_cond_signal
     0.10s  3.01% 49.70%      0.27s  8.13%  runtime.scanObjectsSmall
     0.09s  2.71% 52.41%      0.18s  5.42%  runtime.tryDeferToSpanScan
     0.08s  2.41% 54.82%      0.26s  7.83%  runtime.mallocgcSmallScanNoHeader
     0.08s  2.41% 57.23%      0.08s  2.41%  runtime.pthread_kill
     0.07s  2.11% 59.34%      0.81s 24.40%  bundle.(*Bundle).buildGraph
     0.07s  2.11% 61.45%      0.25s  7.53%  bundle.ConceptID.String
     0.06s  1.81% 63.25%      0.06s  1.81%  runtime.kevent
     0.05s  1.51% 64.76%      0.05s  1.51%  runtime.extractHeapBitsSmall
     0.05s  1.51% 66.27%      0.14s  4.22%  runtime.scanObject
     0.04s  1.20% 67.47%      0.05s  1.51%  runtime.mspan.writeHeapBitsSmall
     0.04s  1.20% 68.67%      0.61s 18.37%  runtime.gcDrain
     0.04s  1.20% 69.88%      0.05s  1.51%  runtime.heapArenaOf
     0.03s  0.90% 70.78%      0.03s  0.90%  yaml.v3.yaml_parser_parse_node
     0.03s  0.90% 71.69%      0.03s  0.90%  yaml.v3.yaml_parser_update_buffer
     0.03s  0.90% 72.59%      0.03s  0.90%  runtime.spanScanOwnership.or
     0.03s  0.90% 73.49%      0.38s 11.45%  runtime.mallocgc
     0.03s  0.90% 74.40%      0.03s  0.90%  runtime.memclrNoHeapPointers
     0.02s  0.60% 75.00%      0.10s  3.01%  goldmark/parser.(*parser).Parse.func1
     0.02s  0.60% 75.60%      0.04s  1.20%  yaml.v3.yaml_parser_append_tag_directive
     0.02s  0.60% 76.20%      0.06s  1.81%  yaml.v3.yaml_parser_fetch_value
     0.02s  0.60% 76.81%      0.02s  0.60%  atomic.Int64.Add
     0.02s  0.60% 77.41%      0.02s  0.60%  atomic.UnsafePointer.Load
     0.02s  0.60% 78.01%      0.03s  0.90%  runtime.spanSet.pop
     0.02s  0.60% 78.61%      0.02s  0.60%  runtime.newBucket
     0.02s  0.60% 79.22%      0.02s  0.60%  runtime.spanSetScans
     0.02s  0.60% 79.82%      0.02s  0.60%  runtime.strhash
     0.02s  0.60% 80.42%      0.02s  0.60%  runtime.typePointers.next
     0.01s  0.30% 80.72%      0.17s  5.12%  bundle.(*Bundle).loadConceptBytes
     0.01s  0.30% 81.02%      0.05s  1.51%  bundle.cloneYAMLNode
     0.01s  0.30% 81.33%      0.03s  0.90%  mutation.(*presentation).indexPathsContext
     0.01s  0.30% 81.63%      0.04s  1.20%  goldmark/parser.(*parser).addBlockParser
     0.01s  0.30% 81.93%      0.02s  0.60%  yaml.v3.yaml_parser_fetch_next_token.func1
     0.01s  0.30% 82.23%      0.02s  0.60%  yaml.v3.yaml_parser_fetch_stream_end

Профиль памяти (alloc_space, 40 узлов)

Showing nodes accounting for 2181.46MB, 92.19% of 2366.24MB total
      flat  flat%   sum%        cum   cum%  name
  456.39MB 19.29% 19.29%   456.39MB 19.29%  yaml.v3.yaml_insert_token
  379.96MB 16.06% 35.35%   379.96MB 16.06%  yaml.v3.yaml_parser_initialize
  267.40MB 11.30% 46.65%   274.41MB 11.60%  goldmark/parser.NewParser
  202.03MB  8.54% 55.18%   214.53MB  9.07%  yaml.v3.(*parser).node
  202.03MB  8.54% 63.72%   202.03MB  8.54%  bundle.cloneYAMLNode
  144.64MB  6.11% 69.84%   458.52MB 19.38%  yaml.v3.newParser
   47.63MB  2.01% 71.85%   557.93MB 23.58%  bundle.(*Bundle).loadConceptBytes
   43.01MB  1.82% 73.67%    43.01MB  1.82%  mutation.(*presentation).indexPathsContext
   41.86MB  1.77% 75.44%   211.48MB  8.94%  bundle.(*Bundle).buildGraph
      40MB  1.69% 77.13%       40MB  1.69%  yaml.v3.newDecoder
   34.50MB  1.46% 78.58%    34.50MB  1.46%  yaml.v3.yaml_parser_append_tag_directive
   28.03MB  1.18% 79.77%    94.11MB  3.98%  yaml.v3.newParserFromReader
   25.50MB  1.08% 80.85%    60.50MB  2.56%  goldmark/parser.(*parser).Parse.func1
      25MB  1.06% 81.90%       25MB  1.06%  yaml.v3.yaml_parser_save_simple_key
   22.50MB  0.95% 82.85%    22.50MB  0.95%  mutation.semanticYAMLContext
   22.50MB  0.95% 83.80%    22.50MB  0.95%  yaml.v3.read
   20.50MB  0.87% 84.67%    21.50MB  0.91%  goldmark/parser.(*parser).addBlockParser
   19.50MB  0.82% 85.50%    35.50MB  1.50%  yaml.v3.yaml_parser_parse_block_mapping_key
      19MB  0.80% 86.30%    42.50MB  1.80%  yaml.v3.yaml_parser_fetch_stream_start
      17MB  0.72% 87.02%   687.55MB 29.06%  mutation.(*yamlResolver).matchesNode
      17MB  0.72% 87.74%   322.70MB 13.64%  mutation.parsePresentationContext
   13.66MB  0.58% 88.31%   798.89MB 33.76%  bundle.Load
   12.50MB  0.53% 88.84%    12.50MB  0.53%  yaml.v3.resolve
   11.50MB  0.49% 89.33%   253.53MB 10.71%  yaml.v3.(*parser).parseChild
   10.50MB  0.44% 89.77%   146.52MB  6.19%  bundle.Frontmatter.YAMLNode
      10MB  0.42% 90.19%   509.30MB 21.52%  bundle.ParseDocument
       9MB  0.38% 90.57%   516.40MB 21.82%  yaml.v3.(*parser).init
    8.50MB  0.36% 90.93%   499.30MB 21.10%  bundle.ParseFrontmatter
    5.09MB  0.22% 91.15%    76.10MB  3.22%  bundle.(*Bundle).indexSubresources
       5MB  0.21% 91.36%   376.41MB 15.91%  mutation.protectedGoldmarkParse
    4.50MB  0.19% 91.55%  1414.48MB 59.78%  mutation.(*planState).move
    2.62MB  0.11% 91.66%    13.12MB  0.55%  mutation.(*Overlay).putContext
    2.55MB  0.11% 91.77%    15.21MB  0.64%  bundle.(*Bundle).ReverseImpactConcept
    2.50MB  0.11% 91.87%   112.16MB  4.74%  mutation.(*planState).renameFragment
       2MB  0.08% 91.96%    65.05MB  2.75%  mutation.yamlPlainSafe
    1.50MB  0.06% 92.02%   758.10MB 32.04%  mutation.relationTargetPatchesContext.func1
    1.50MB  0.06% 92.09%   383.91MB 16.22%  mutation.rewriteMarkdownDestinationsContext
    1.50MB  0.06% 92.15%   123.02MB  5.20%  yaml.v3.(*parser).scalar
    0.50MB  0.02% 92.17%   631.50MB 26.69%  mutation.(*presentation).resolvedScalarPatch
    0.50MB  0.02% 92.19%   378.41MB 15.99%  mutation.collectMarkdownDestinationsContext

Профиль служит подтверждением измерений, а не жёстким целевым показателем производительности. Основную часть этой транзакции занимают синтаксический разбор и построение семантического графа. Сопутствующий отчёт сравнения исходного и итогового состояния изолирует изменения наложения на одинаковых примерах; данный отчёт планировщика охватывает полный итоговый путь выполнения. Измерения не обосновывают переход на цепочку родительских состояний или HAMT в рамках этапа изменений на основе синтаксических деревьев.