Programming Paradigms: Packages and resources that support various programming styles, Software Architecture and CS paradigms.
- Automata
- Control Flow
- Declarative Programming
- DSL
- Grammatical Evolution
- Interpreters
- Language Comparison
- Macro
- Metaprogramming
- Multi Threading
- Polymorphism
- Program Analysis
- Reactive Programming
- STATIC ANALYSIS
- Style Guidelines
- Automa.jl :: A julia code generator for regular expressions - this package can do text validation, parsing, and tokenizing based on state machine compiler.
- BitRegs.jl :: Julia package for bit and register operations.
- ChainMap.jl :: Combine chaining and mapping.
- 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).
- Eyeball.jl :: is an object and type viewer for Julia that exports one main tool to browse Julia objects and types.
- FemtoCleaner.jl :: It cleans your julia projects by upgrading deprecated syntax, removing version compatibility workarounds and anything else that has a unique upgrade path, and is designed to be as style-preserving as possible, but does not perform code formatting.
- IniFile.jl :: Reading and writing Windows-style INI files.
- InterVal.jl :: Intervals are inter-values, an interval is its values and their intra-values.
- JLD.jl :: HDF5 interface for the Julia language to save and load julia variables while preserving native types.
- JSON.jl :: JSON parsing and printing.
- LilKanren.jl :: A collection of Kanren implementations in Julia. miniKanren is an embedded Domain Specific Language for logic programming.
- MacroTools.jl :: A library providing helpful tools for writing macros, notably a very simple templating system with some functions (see utils.jl)
- Turing.jl :: Probabilistic programming in Julia.
- Programming Language Theory :: Mathematics, Compilers, Functional Programming, and other papers.
Implementations of numerical algorithms for computations in systems and control theory.
- ControlSystems.jl :: A Control Systems Toolbox for Julia.
- CommonSubexpressions.jl :: Naïve combined subexpression elimination in Julia.
- Hooking.jl :: Function entry hooking for julia and C functions.
- Iterators.jl :: Common functional iterator patterns.
- Blog post on Tricked out iterators in Julia.
- 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.
- Slicot.jl :: Julia wrapper for SLICOT Routines.
- StatefulIterators.jl :: A stream-like wrapper around iterable objects.
- control-flow :: Conditional loops and Control flow constructs.
- FunctionalUtils.jl :: Functional Julia – based on fogus/lemonad.
- Glob.jl :: Posix-compliant file name pattern matching.
- Lazy.jl :: Functional programming for Julia.
- diy-lisp-julia :: A julia version of diy-lisp.
- LispREPL.jl :: REPL for
Lisp.jl
. - LispSyntax.jl :: lisp-like language in julia.
- Monads.jl :: Monadic expressions and sequences for Julia.
- PatternDispatch.jl :: Method dispatch based on pattern matching for Julia.
- Pipe.jl :: Improved function piping in Julia.
- Reactive.jl :: A package for reactive programming in Julia.
- Rocket.jl :: A functional reactive programming extensions library for Julia.
- ModelingToolkit.jl :: A toolkit for modeling and creating DSLs for Scientific Computing in Julia.
- 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.
- ASTInterpreter.jl :: Gallium's AST interpreter as a separate package to simplify development.
- JuliaInterpreter.jl :: Interpreter for Julia code.
- Basic Language Comparison :: Basic Comparison of Various Computing Languages, eg. Python, Julia, Matlab, IDL, R, Java, Scala, C, Fortran.
- ForceImport.jl :: Macro that force imports conflicting methods in Julia modules
- FromFile.jl :: This package exports a macro @from, which can be used to import objects from files, so you will never have to write
include
again. - 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.
- LoopVectorization.jl :: Macro(s) for vectorizing loops.
- MacroUtils.jl :: Collection of Julia macros.
- MetaMerge.jl :: Merge functions with identical names from distinct modules.
- RegexVar.jl :: A macro to fill variables straight from the string.
- Reexport.jl :: Julia macro for re-exporting one module from another.
- TimeIt.jl :: Timeit macro for Julia.
- Unroll.jl :: A julia macro for unrolling conditional
for
loops. - UTime.jl :: Universal Time using local system timezone.
- KissThreading.jl :: Simple patterns supporting working with threads in Julia.
- OCCA.jl :: Julia interface into OCCA2 by @tcew, an extensible multi-threading programming API written in C++.
- TiledIteration.jl :: Julia package to facilitate writing mulithreaded, multidimensional, cache-efficient code.
- 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.
- SyntaxTree.jl :: Toolset for modifying Julia AST and characteristic values.
- 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.
Libs for memory management (malloc), bounds checking, literals and other base program analysis options.
- ASTInterpreter2.jl :: Re-write of ASTInterpreter for
julia 0.6+
. - 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 callingjl_gc_collect
; however, the package has broader uses. - dataflow.jl :: Introduction to dataflow analysis using julia.
- ExpressionPatterns.jl :: Match, Destructure and Dispatch on expressions.
- 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.
- PAPI.jl :: Julia bindings to the Performance Application Programming Interface (PAPI).
- StatProfilerHTML.jl :: Show Julia profiling data in an explorable HTML page.
- julia-pattern-dispatch :: Support for method dispatch in Julia based on pattern matching.
- BinaryTraits.jl :: easy-to-use trait library with formal interface specification support.
- WhereTraits.jl :: This package exports one powerful macro @traits with which you can extend Julia's where syntax.
- The Design Impact of Multiple Dispatch presented by StefanKarpinski at Strange Loop on 19-Sep-2013.
- What are the advantages of multiple dispatch in Julia?
- Spock.jl :: An interface to Apache Spark for the Julia language.
Static Program Analysis
- Lint.jl :: A lint tool to hunt for imperfections and dodgy structures that could be improved for Julia code.
- Quantity.jl :: Numbers with units.
- StackTraces.jl :: Intuitive, useful stack traces for Julia.
- TimerOutputs.jl :: Formatted output of timed sections in julia.
- Official Julia style guide.
- Style.jl :: Style guidelines for Julia programming.