Contents

πŸ”– Julia programming paradigms

See also

  • 🏚️ means the package may not support current versions of Julia.
  • πŸ—οΈ means the package may be a WIP.

Automata

Links:

Packages:

  • Automa.jl :: A julia code generator for regular expressions - this package can do text validation, parsing, and tokenizing based on state machine compiler.
  • CodeTracking.jl :: An extension of Julia’s InteractiveUtils library that provides an interface for obtaining strings and expressions of method definitions, method signatures, etc.. designed to work with Revise.jl (for versions v1.1.0 and higher).
  • MacroTools.jl :: A library providing helpful tools for writing macros, notably a very simple templating system with some functions
WIP or may not work
  • 🏚️ CellularAutomata.jl :: Cellular Automata package.
  • 🏚️ FiniteStateMachine.jl :: A simple Julia implementation of finite state machines.
  • 🏚️ InterVal.jl :: Intervals are inter-values, an interval is its values and their intra-values.
  • 🏚️ LilKanren.jl :: A collection of Kanren implementations in Julia. miniKanren is an embedded Domain Specific Language for logic programming.

Control Flow

πŸ“– Control Flow

Julia manual’s control-flow

Implementations of numerical algorithms for computations in systems and control theory.

  • CommonSubexpressions.jl :: NaΓ―ve combined subexpression elimination in Julia.
  • ControlSystems.jl :: A Control Systems Toolbox for Julia.
  • IterTools.jl :: Common functional iterator patterns.
  • LinearControl.jl :: Julia package for analysis and design of control strategies for linear systems.
  • ProtoBuf.jl :: A Julia implementation for protocol buffers, a language-neutral, platform-neutral, extensible way of serializing structured data for use in communications protocols, data storage, and more.
WIP or may not work

Functional Programming

See πŸ“– Declarative Programming and πŸ“– Functional Programming.

  • Chain.jl :: A Julia package for piping a value through a series of transformation expressions using a convenient syntax.
  • Glob.jl :: Posix-compliant file name pattern matching.
  • Lazy.jl :: Functional programming for Julia with lazily-evaluated lists and a large library of functions for working with them.
  • LispREPL.jl :: REPL for Lisp.jl.
  • LispSyntax.jl :: lisp-like language in julia.
  • Monads.jl :: Monadic expressions and sequences for Julia. hSee the doc.
  • Pipe.jl :: Improved function piping in Julia.
WIP or may not work

Reactive Programming

πŸ“– Reactive Programming

  • Pluto.jl :: Simple reactive notebooks for Julia.
  • Reactive.jl :: A package for reactive programming in Julia.
  • Rocket.jl :: A functional reactive programming extensions library for Julia.

Domain-specific language

πŸ“– DSL

  • Catalyst.jl :: Chemical reaction network and systems biology interface.

Grammatical Evolution

WIP or may not work
  • 🏚️ Evolution.jl :: Evolutionary Computation in Julia.
  • 🏚️ GrammaticalEvolution :: An evolutionary technique that is similar to Genetic Programming (GP). However, unlike GP, it doesn’t suffer the same problems with fixing damaged trees. Instead, it uses a grammar that is combined with a genome of integers. The genome is used to select which branch to follow for or-rules.

Interpreters

πŸ“– Interpreters

WIP or may not work
  • 🏚️ ASTInterpreter.jl :: Gallium’s AST interpreter as a separate package to simplify development.

Macro and Metaprogramming

Packages:

  • FromFile.jl :: providing a macro @from importing objects from files without having to include repeatedly.
  • LoopVectorization.jl :: Macro(s) for vectorizing loops.
  • Reexport.jl :: Julia macro for re-exporting one module from another.
  • SyntaxTree.jl :: Toolset for modifying Julia AST and characteristic values.
WIP or may not work
  • 🏚️ ForceImport.jl :: Macro that force imports conflicting methods in Julia modules
  • 🏚️ ImportMacros.jl :: Provides three macros: @import and @using which loads a module and binds it to an alias, and @from which loads an object from a module and binds it to an alias.
  • 🏚️ MetaMerge.jl :: Merge functions with identical names from distinct modules.
  • 🏚️ NotInferenceDontLookHere.jl :: Package to help with Inference development. This is not inference. However, it does help you with developing inference by loading a separate copy of inference into this package and hooking up Revise. This allows you to easily test changes to inference in isolation.
  • 🏚️ RegexVar.jl :: A macro to fill variables straight from the string.
  • 🏚️ TimeIt.jl :: Timeit macro for Julia.
  • 🏚️ Unroll.jl :: A julia macro for unrolling conditional for loops.
  • 🏚️ UTime.jl :: Universal Time using local system timezone.

Automatic Programming

πŸ“– Automatic Programming

  • Cassette.jl :: a Julia package that provides a mechanism for dynamically injecting code transformation passes into Julia’s just-in-time (JIT) compilation cycle, enabling post hoc analysis, optimization, and modification of “Cassette-unaware” Julia programs.
  • IRTools.jl :: Intermediate Representation toolkit to provide a simple and flexible IR format, expressive enough to work with both lowered and typed Julia code, as well as external IRs. It can be used with Julia metaprogramming tools such as Cassette.
  • Revise.jl :: Automatically update function definitions in a running Julia session. It will help you keep your sessions running longer, reducing the need to restart Julia whenever you make changes to code.

Program Analysis

Libs for memory management (malloc), bounds checking, literals and other base program analysis options.

πŸ“– Program Analysis and Julia profiling.

  • CallGraphs.jl :: A package for analyzing source-code callgraphs, particularly of Julia’s src/ directory. The main motivation for this package was to aid in finding all functions that might trigger garbage collection by directly or indirectly calling jl_gc_collect; however, the package has broader uses.
  • Lens.jl :: A simple Julia library to inspect the runtime behaviour of your programs, with minimal interference to the program itself.
  • LRUCache.jl :: An implementation of a Least Recently Used (LRU) Cache.
  • ProfileSVG.jl :: Write flame graphs to SVG format and explore them interactively in Jupyter, Pluto, etc.
  • ProfileView.jl :: Visualization of Julia profiling data
  • StatProfilerHTML.jl :: Show Julia profiling data in an explorable HTML page.
WIP or may not work
  • 🏚️ ASTInterpreter2.jl :: Re-write of ASTInterpreter for julia 0.6+.
  • 🏚️ dataflow.jl :: Introduction to dataflow analysis using julia.
  • 🏚️ ExpressionPatterns.jl :: Match, Destructure and Dispatch on expressions.
  • 🏚️ PAPI.jl :: Julia bindings to the Performance Application Programming Interface (PAPI).

Polymorphism (in Julia, Multiple Dispatch)

πŸ“– Polymorphism

  • BinaryTraits.jl :: easy-to-use trait library with formal interface specification support.
  • SimpleTraits.jl :: Simple Traits for Julia.
  • WhereTraits.jl :: This package exports one powerful macro @traits with which you can extend Julia’s where syntax.
WIP or may not work

Resources

Static analysis

Static Program Analysis

  • Lint.jl :: A lint tool to hunt for imperfections and dodgy structures that could be improved for Julia code.
WIP or may not work
  • 🏚️ Quantity.jl :: Numbers with units.
  • 🏚️ StackTraces.jl :: Intuitive, useful stack traces for Julia. StackTraces functionality has been merged into the Julia standard library as of v0.5.

Turnaround Time

πŸ“– Turnaround Time

Style Guidelines

WIP or may not work
  • 🏚️ Style.jl :: Style guidelines for Julia programming.

  1. Julia.jl is under COPYRIGHT Β© 2012-Now SVAKSHA, dual-licensed for the data (ODbL-v1.0+) and the software (AGPLv3+), respectively. ↩︎