Skip to content
Back to skills

Cljr Performance

ASecurity

Optimize Cljr compiler and runtime performance. Use when optimizing emitter output, runtime collections, REPL evaluation, or leveraging .NET 10/C# 14 features. Covers Span<T>, FrozenDictionary, AggressiveInlining, benchmarking, and allocation reduction strategies.

  • 666 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added February 8, 2026
developmentgoc#bashapiperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill cljr-performance --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cljr Performance?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cljr Performance
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-cljr-performance/badge)](https://www.skillsdirectory.com/skills/majiayu000-cljr-performance)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cljr-performance
description: Optimize Cljr compiler and runtime performance. Use when optimizing emitter output, runtime collections, REPL evaluation, or leveraging .NET 10/C# 14 features. Covers Span<T>, FrozenDictionary, AggressiveInlining, benchmarking, and allocation reduction strategies.
---

# Cljr Performance Optimization

This skill guides performance optimization for the Cljr Clojure-to-.NET compiler, targeting .NET 10 with C# 14 preview features.

## When to use this skill

- Optimizing emitter-generated C# code
- Improving runtime collection performance
- Reducing memory allocations
- Leveraging .NET 10 / C# 14 performance features
- Writing or analyzing benchmarks
- Optimizing REPL evaluation performance

## Project Performance Profile

### Target Framework
- **Runtime**: .NET 10 (LTS)
- **Language**: C# 14 preview (Runtime, CLI, REPL) / C# 12 (Compiler, SourceGenerator)

### Existing Optimizations

| Optimization | Status | Location |
|--------------|--------|----------|
| `Span<T>` / `ReadOnlySpan<T>` | ✓ | PersistentVector |
| `FrozenDictionary` | ✓ | Protocol, MethodImplCache |
| `[AggressiveInlining]` | ✓ | Hot paths throughout |
| Symbol/Keyword interning | ✓ | Symbol.cs, Keyword.cs |
| HAMT with SIMD PopCount | ✓ | PersistentHashMap |
| 32-way trie | ✓ | PersistentVector |
| Transient collections | ✓ | Vector, HashMap batch ops |
| Method dispatch caching | ✓ | MultiFn, Protocol |
| BenchmarkDotNet suite | ✓ | tests/Cljr.Benchmarks/ |

### Opportunities for Further Optimization

| Optimization | Status | Potential Use |
|--------------|--------|---------------|
| `stackalloc` | ✗ | Small temp arrays in hot paths |
| `ArrayPool<T>` | ✗ | Reusable buffer arrays |
| `SearchValues<T>` | ✗ | Character/byte searching |
| `CompositeFormat` | ✗ | String formatting |
| C# 14 implicit span conversions | ✗ | Cleaner span APIs |
| AVX10.2 intrinsics | ✗ | SIMD operations |

## Performance Optimization Workflow

### Step 1: Measure First

**Never optimize without benchmarks.** Run existing benchmarks:

```bash
cd tests/Cljr.Benchmarks
dotnet run -c Release -- --filter "*"
```

Or specific benchmarks:

```bash
dotnet run -c Release -- --filter "VectorBenchmarks"
dotnet run -c Release -- --filter "*Conj*"
```

### Step 2: Identify Hot Paths

Use profiling or benchmark results to identify:
- High-frequency operations
- Allocation-heavy code paths
- Cache miss patterns

### Step 3: Apply Optimizations

See reference files for specific patterns:
- [.NET 10 / C# 14 Features](dotnet10-csharp14.md)
- [Emitter Patterns](emitter-patterns.md)
- [Benchmarking Guide](benchmarking.md)

### Step 4: Verify Improvement

Re-run benchmarks and compare:

```bash
dotnet run -c Release -- --filter "YourBenchmark" --runtimes net10.0
```

## Quick Reference: Key Optimizations

### AggressiveInlining

For small, frequently-called methods:

```csharp
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public T GetValue() => _value;
```

### Span<T> for Zero-Copy

```csharp
// Instead of creating arrays
public ReadOnlySpan<object?> ArrayFor(int i) => _tail.AsSpan();

// Span-based construction (already in PersistentVector)
public static PersistentVector Create(ReadOnlySpan<object?> items)
```

### FrozenDictionary for Read-Heavy Lookups

```csharp
using System.Collections.Frozen;

// Mutable during construction
private readonly ConcurrentDictionary<Type, Cache> _impls = new();
// Frozen for fast reads
private volatile FrozenDictionary<Type, Cache>? _frozen;

public void Freeze() => _frozen = _impls.ToFrozenDictionary();
```

### Symbol/Keyword Interning

Already implemented - ensures reference equality:

```csharp
// Good: reference equality after interning
if (ReferenceEquals(sym1, sym2)) { ... }

// Avoid: value equality is slower
if (sym1.Equals(sym2)) { ... }
```

### Transients for Batch Operations

```csharp
// Slow: O(n²) allocations
var vec = PersistentVector.Empty;
foreach (var item in items)
    vec = vec.Conj(item);

// Fast: O(n) with transient
var transient = PersistentVector.Empty.AsTransient();
foreach (var item in items)
    transient.ConjBang(item);
return transient.Persistent();
```

## Key Files

| Area | Files |
|------|-------|
| Runtime Collections | `src/Cljr.Runtime/Collections/PersistentVector.cs`, `PersistentHashMap.cs` |
| Protocol Dispatch | `src/Cljr.Runtime/Protocol.cs`, `MultiFn.cs` |
| Symbol Interning | `src/Cljr.Runtime/Symbol.cs`, `Keyword.cs` |
| Emitter | `src/Cljr.Compiler/Emitter/CSharpEmitter.cs` |
| Benchmarks | `tests/Cljr.Benchmarks/CollectionBenchmarks.cs` |

## References

- [.NET 10 / C# 14 Features](dotnet10-csharp14.md) - Latest platform features
- [Emitter Patterns](emitter-patterns.md) - Optimized C# code generation
- [Benchmarking Guide](benchmarking.md) - How to measure and compare

## External Resources

- [What's new in .NET 10](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/overview)
- [What's new in C# 14](https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-14)
- [.NET 10 Runtime Improvements](https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-10/runtime)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.