Skip to content

force inline methods with benchmarks data#677

Merged
SuperFola merged 1 commit intodevfrom
issue/676
Apr 13, 2026
Merged

force inline methods with benchmarks data#677
SuperFola merged 1 commit intodevfrom
issue/676

Conversation

@SuperFola
Copy link
Copy Markdown
Member

@SuperFola SuperFola commented Apr 12, 2026

Description

Closes #676

Checklist

  • I have read the Contributor guide
  • My code follows the style guidelines of this project
  • I have commented my code, particularly in hard-to-understand areas
  • I have updated the documentation if needed (on https://github.com/ArkScript-lang/website, content/docs/)
  • I have added tests that prove my fix/feature is working
  • New and existing tests pass locally with my changes
  • AI wasn't involved in order to develop this feature

@SuperFola SuperFola linked an issue Apr 12, 2026 that may be closed by this pull request
@SuperFola SuperFola marked this pull request as ready for review April 12, 2026 17:45
@github-actions
Copy link
Copy Markdown

Static analysis report

Lizard report

Listing only functions with cyclomatic complexity >= 15 or NLOC >= 100 or parameters >= 6.

Report about files you didn't modify in this PR
Filename Start line:end line Function name Parameters NLOC CCN
src/arkreactor/VM/VM.cpp 450:2156 Ark::VM::unsafeRun 2 1435 281
src/arkreactor/Compiler/Macros/Processor.cpp 259:634 Ark::internal::MacroProcessor::evaluate 3 344 115
src/arkreactor/Compiler/BytecodeReader.cpp 385:596 Ark::BytecodeReader::display 4 171 92
src/arkreactor/Error/Diagnostics.cpp 45:192 Ark::Diagnostics::makeContext 4 109 44
src/arkscript/main.cpp 24:383 main 2 310 43
src/arkscript/JsonCompiler.cpp 27:276 JsonCompiler::_compile 1 214 38
src/arkreactor/Compiler/NameResolution/NameResolutionPass.cpp 162:267 Ark::internal::NameResolutionPass::visitKeyword 3 85 35
src/arkreactor/Builtins/Slice.cpp 21:93 Ark::internal::Builtins::slice 1 63 34
src/arkreactor/Compiler/AST/Parser.cpp 841:932 Ark::internal::Parser::string 1 88 32
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 355:434 Ark::internal::ASTLowerer::compileListInstruction 3 64 32
src/arkreactor/Compiler/AST/Node.cpp 179:285 Ark::internal::Node::repr 0 90 30
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 845:991 Ark::internal::ASTLowerer::handleFunctionCall 3 114 30
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 212:317 Ark::internal::ASTLowerer::compileExpression 5 88 29
src/arkreactor/Compiler/Macros/Processor.cpp 107:191 Ark::internal::MacroProcessor::processNode 3 63 28
src/arkreactor/Compiler/AST/Node.cpp 287:368 Ark::internal::Node::debugPrint 1 70 26
src/arkreactor/Compiler/BytecodeReader.cpp 612:713 Ark::BytecodeReader::printInstruction 7 98 25
src/arkreactor/TypeChecker.cpp 149:236 Ark::types::generateError 6 75 25
src/arkreactor/TypeChecker.cpp 32:147 Ark::types::displayContract 6 102 24
src/arkreactor/Compiler/AST/Parser.cpp 289:417 Ark::internal::Parser::import_ 1 98 23
src/arkreactor/Compiler/NameResolution/NameResolutionPass.cpp 56:160 Ark::internal::NameResolutionPass::visit 2 83 23
include/utf8.hpp 138:184 utf8::isValid 1 44 21
src/arkreactor/VM/Value/Value.cpp 77:145 Ark::Value::toString 2 54 21
src/arkreactor/VM/VM.cpp 2310:2404 Ark::VM::backtrace 3 81 20
src/arkreactor/Compiler/AST/Optimizer.cpp 35:85 Ark::internal::Optimizer::countAndPruneDeadCode 1 42 20
src/arkreactor/Compiler/NameResolution/StaticScope.cpp 68:109 Ark::internal::NamespaceScope::get 3 32 19
src/arkscript/Formatter.cpp 501:560 Formatter::formatCall 2 51 19
src/arkreactor/Builtins/String.cpp 46:112 fmt::formatter::parse 1 59 18
src/arkreactor/Compiler/AST/Optimizer.cpp 87:144 Ark::internal::Optimizer::pruneUnusedGlobalVariables 1 50 18
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 791:843 Ark::internal::ASTLowerer::handleOperator 3 42 18
src/arkscript/Formatter.cpp 186:248 Formatter::format 3 59 18
src/arkreactor/Compiler/Macros/Executors/Function.cpp 16:89 Ark::internal::FunctionExecutor::applyMacro 2 56 17
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 107:129 Ark::internal::ASTLowerer::nodeProducesOutput 1 18 17
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 589:637 Ark::internal::ASTLowerer::compileLetMutSet 4 40 17
include/Ark/Compiler/AST/Predicates.hpp 132:156 Ark::internal::IsSymbol::operator ( ) 1 24 16
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 506:587 Ark::internal::ASTLowerer::compileFunction 3 59 16
src/arkscript/Formatter.cpp 298:339 Formatter::formatFunction 2 35 16
src/arkreactor/VM/VM.cpp 2168:2225 Ark::VM::throwArityError 4 47 15
src/arkreactor/Compiler/Macros/Executors/Function.cpp 99:156 Ark::internal::FunctionExecutor::unify 5 50 15
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 22:260 Ark::internal::IROptimizer::IROptimizer 1 219 14
src/arkreactor/Error/Diagnostics.cpp 194:211 Ark::Diagnostics::helper 7 17 2

CppCheck report

Filename Line Type Description
include/Ark/VM/VM.inl 258 style Variable 'maybe_value_ptr' can be declared as pointer to const
Report files about files you didn't modify in this PR
Filename Line Type Description
src/arkreactor/Builtins/Bytecode.cpp 23 style Parameter 'vm' can be declared as pointer to const
src/arkreactor/Builtins/IO.cpp 165 style Consider using std::transform algorithm instead of a raw loop.
src/arkreactor/Compiler/BytecodeReader.cpp 20 performance Variable 'm_arg_kinds' is assigned in constructor body. Consider performing initialization in initialization list.
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 249 style Consider using std::transform algorithm instead of a raw loop.
src/arkreactor/Compiler/IntermediateRepresentation/IROptimizer.cpp 256 style Consider using std::transform algorithm instead of a raw loop.
src/arkreactor/Compiler/Lowerer/ASTLowerer.cpp 612 style Consider using std::count_if algorithm instead of a raw loop.
src/arkreactor/Compiler/NameResolution/ScopeResolver.cpp 134 style Consider using std::find_if algorithm instead of a raw loop.
src/arkreactor/VM/VM.cpp 0 information Too many #ifdef configurations - cppcheck only checks 12 of 13 configurations. Use --force to check all configurations.
src/arkreactor/VM/VM.cpp 281 error Iterators of different containers 'm_execution_contexts.emplace_back(std::make_unique())' and 'm_execution_contexts.front()' are used together.
include/Ark/VM/Value/Future.hpp 50 style Unused private function: 'Future::deleteSelfViaVM'
src/arkreactor/VM/Value/Future.cpp 23 performance Variable 'm_value' is assigned in constructor body. Consider performing initialization in initialization list.

@github-actions
Copy link
Copy Markdown

Super Instructions report

Some Super Instructions are under the usage threshold (16).

Super Instruction Uses in compiled code
INCREMENT_BY_INDEX 15
INCREMENT 15
STORE_FROM 14
LT_CONST_JUMP_IF_FALSE 8
NEQ_SYM_JUMP_IF_FALSE 4
SET_VAL_TAIL 4
STORE_HEAD 2
MUL_BY 2
GT_SYM_JUMP_IF_FALSE 2
CHECK_TYPE_OF 2
NEQ_CONST_JUMP_IF_TRUE 2
SET_VAL_TAIL_BY_INDEX 1
SET_VAL_HEAD_BY_INDEX 1
MUL_SET_VAL 1
SET_VAL_HEAD 1
STORE_TAIL 1
Super Instructions over the threshold
Super Instruction Uses in compiled code
CALL_SYMBOL 4348
LOAD_CONST_LOAD_CONST 2530
LOAD_CONST_STORE 2391
LOAD_CONST_SET_VAL 663
CALL_BUILTIN 654
INCREMENT_STORE 521
AT_SYM_SYM 514
GET_FIELD_FROM_SYMBOL_INDEX 486
CALL_BUILTIN_WITHOUT_RETURN_ADDRESS 453
STORE_LIST 363
APPEND_IN_PLACE_SYM 327
LT_LEN_SYM_JUMP_IF_FALSE 297
CALL_SYMBOL_BY_INDEX 291
GET_FIELD_FROM_SYMBOL 281
LT_SYM_JUMP_IF_FALSE 148
EQ_SYM_INDEX_JUMP_IF_TRUE 140
STORE_FROM_INDEX 107
SET_VAL_FROM_INDEX 103
SET_VAL_FROM 94
FUSED_MATH 86
AT_SYM_INDEX_SYM_INDEX 82
STORE_LEN 80
LT_CONST_JUMP_IF_TRUE 75
CALL_CURRENT_PAGE 73
DECREMENT_BY_INDEX 61
EQ_CONST_JUMP_IF_TRUE 48
DECREMENT_STORE 45
GT_CONST_JUMP_IF_TRUE 45
AT_SYM_INDEX_CONST 43
GT_CONST_JUMP_IF_FALSE 39
MUL_BY_INDEX 38
STORE_HEAD_BY_INDEX 35
STORE_TAIL_BY_INDEX 34
CHECK_TYPE_OF_BY_INDEX 27
APPEND_IN_PLACE_SYM_INDEX 22
DECREMENT 18

@coveralls
Copy link
Copy Markdown

coveralls commented Apr 12, 2026

Coverage Report for CI Build 24363245552

Coverage increased (+0.1%) to 94.045%

Details

  • Coverage increased (+0.1%) from the base build.
  • Patch coverage: 31 of 31 lines across 2 files are fully covered (100%).
  • 2 coverage regressions across 1 file.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

2 previously-covered lines in 1 file lost coverage.

File Lines Losing Coverage Coverage
src/arkreactor/VM/ScopeView.cpp 2 87.1%

Coverage Stats

Coverage Status
Relevant Lines: 10495
Covered Lines: 9870
Line Coverage: 94.04%
Coverage Strength: 659551.84 hits per line

💛 - Coveralls

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Apr 12, 2026

Merging this PR will improve performance by 12.59%

⚡ 9 improved benchmarks
✅ 9 untouched benchmarks

Performance Changes

Benchmark BASE HEAD Efficiency
quicksort 1.2 ms 1.1 ms +2.74%
binary_trees 4.9 s 4.8 s +2.11%
for_sum 926.5 ms 822.9 ms +12.59%
n_queens 110.4 ms 100.6 ms +9.71%
fibonacci 31.6 ms 31 ms +1.95%
create_list 6.5 ms 6.4 ms +1.57%
ackermann 358.4 ms 344.1 ms +4.15%
create_list_with_ref 6.2 ms 6.1 ms +1.64%
create_closure 5 ms 4.9 ms +2.6%

Comparing issue/676 (40c655c) with dev (a3329d3)

Open in CodSpeed

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 12, 2026

Fuzzing report

/usr/local/bin/afl-whatsup status check tool for afl-fuzz by Michal Zalewski

Summary stats

    Fuzzers alive : 0
   Dead or remote : 1 (included in stats)
   Total run time : 5 minutes, 0 seconds
      Total execs : 47 thousands
 Cumulative speed : 157 execs/sec
    Pending items : 134 faves, 1268 total
 Coverage reached : 9.44%
    Crashes saved : 0
      Hangs saved : 0

Cycles without finds : 0
Time without finds : 0

[+] Captured 47203 tuples (map size 305447, highest value 255, total values 470413844) in '/dev/null'.
[+] A coverage of 47203 edges were achieved out of 305472 existing (15.45%) with 1276 input files.

@SuperFola
Copy link
Copy Markdown
Member Author

It seems that inlining VM::call is too much and slows everything. The other instruction helpers, however, are better when inlined.

@SuperFola
Copy link
Copy Markdown
Member Author

ScopeView::pushBack needs to be inlined as well it seems

@SuperFola SuperFola changed the title wip force inline methods with benchmarks data Apr 13, 2026
@SuperFola SuperFola merged commit 72ae914 into dev Apr 13, 2026
36 checks passed
@SuperFola SuperFola deleted the issue/676 branch April 13, 2026 20:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Force inline some VM methods made the lang slower

2 participants