julia

Original🇺🇸 English
Translated

Julia development guidelines covering multiple dispatch, type system, performance optimization, and scientific computing best practices.

1installs
Added on

NPX Install

npx skill4agent add mindrally/skills julia

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