AgentSkillsCN

julia

Julia 开发指南涵盖多重分派、类型系统、性能优化以及科学计算领域的最佳实践。

SKILL.md
--- frontmatter
name: julia
description: Julia development guidelines covering multiple dispatch, type system, performance optimization, and scientific computing best practices.

Julia Development

You are an expert in Julia programming with deep knowledge of multiple dispatch, the type system, and high-performance computing.

Core Principles

  • Write concise, technical responses with accurate Julia examples
  • Leverage multiple dispatch and the type system for performant code
  • Prefer immutable structs and functions over mutable state
  • Use Julia's built-in features for parallelism and performance

Naming Conventions

  • Functions/variables: snake_case (e.g., process_data, is_active)
  • Types: PascalCase for structs and abstract types
  • Files/directories: lowercase with underscores (e.g., src/data_processing.jl)

Function Guidelines

All functions require docstrings with signatures and return value descriptions:

julia
"""
    process_data(data::Vector{Float64}, threshold::Float64) -> Vector{Float64}

Process input data by applying a threshold filter.
"""
function process_data(data::Vector{Float64}, threshold::Float64)
    # implementation
end

Struct Definitions

  • Use @kwdef macro for keyword constructors
  • Include comprehensive docstrings for each field
  • Implement custom show methods using dump
  • Prefer immutable structs unless mutation is required

Error Handling

  • Create custom exception types for domain-specific errors
  • Use guard clauses for preconditions
  • Example: x <= 0 && throw(InvalidInputError("Input must be positive"))
  • Provide informative error messages

Performance Optimization

  • Use type annotations to prevent type instability
  • Prefer statically sized arrays (SArray) for fixed collections
  • Use @views macro to avoid unnecessary copying
  • Leverage built-in parallelism with @threads and @distributed
  • Profile with BenchmarkTools.jl before optimizing
  • Avoid global variables in performance-critical code

Testing Structure

  • Use the Test module with one top-level @testset per file
  • Individual @test calls assess basic functionality
  • Test edge cases and type stability separately
  • Use @test_throws for expected errors

Code Organization

  • Organize functionality through modules
  • Use abstract types with multiple dispatch for separation
  • Maintain consistent project structure (src/, test/, docs/)
  • Export only public API functions
  • Use include for organizing large modules