Programming Paradigms
- Wikipedia: Programming Paradigms
- Basic Language Comparison : Basic Comparison of Various Computing Languages, eg. Python, Julia, Matlab, IDL, R, Java, Scala, C, Fortran.
- Programming Language Theory
Automata¶
- BioJulia/Automa.jl : A julia code generator for regular expressions - this package can do text validation, parsing, and tokenizing based on state machine compiler.
- timholy/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).
Control Flow¶
- jemofthewest/LinearControl.jl : Julia package for analysis and design of control strategies for linear systems.
- JuliaCollections/IterTools.jl : Common functional iterator patterns.
- JuliaControl/ControlSystems.jl : A Control Systems Toolbox for Julia.
- JuliaIO/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.
- rdeits/CommonSubexpressions.jl : Naïve combined subexpression elimination in Julia.
Reversible programming¶
- GiggleLiu/NiLang.jl : a reversible domain-specific language (DSL). Every state change can be undone.
Functional Programming¶
- jkrumbiegel/Chain.jl : A Julia package for piping a value through a series of transformation expressions using a convenient syntax.
- MikeInnes/Lazy.jl : Functional programming for Julia with lazily-evaluated lists and a large library of functions for working with them.
- oxinabox/Pipe.jl : Improved function piping in Julia.
- pao/Monads.jl : Monadic expressions and sequences for Julia. hSee the doc.
- swadey/LispSyntax.jl : lisp-like language in julia. LispREPL.jl : REPL for
LispSyntax.jl
. - vtjnash/Glob.jl : POSIX-compliant file name pattern matching.
Pattern matching¶
-
jolin-io/SimpleMatch.jl : a simple Julia pattern matching package providing only the
@match
macro. - JuliaServices/Match.jl : Advanced Pattern Matching for Julia.
- thautwarm/MLStyle.jl : Julia functional programming infrastructures and metaprogramming facilities.
Reactive Programming¶
Wikipedia: Reactive Programming
- biaslab/Rocket.jl : A functional reactive programming extensions library for Julia.
- fonsp/Pluto.jl : Reactive notebooks for Julia.
- JuliaGizmos/Reactive.jl : A package for reactive programming in Julia.
Design by contract¶
- ghaetinger/DesignByContract.jl : an interface for Design By Contract programming in Julia. See also Eiffel, which first introduced Design By Contract programming.
Interpreters¶
- JuliaDebug/JuliaInterpreter.jl : Interpreter for Julia code.
Macro and Metaprogramming¶
- chakravala/ForceImport.jl : Macro that force imports conflicting methods in Julia modules.
- chakravala/SyntaxTree.jl : Toolset for modifying Julia AST and characteristic values.
- FluxML/MacroTools.jl : A library providing helpful tools for writing macros, notably a very simple templating system with some functions.
- StephenVavasis/Unroll.jl : A julia macro for unrolling conditional
for
loops.
Automatic Programming¶
Wikipedia: Automatic Programming
--
- FluxML/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.
- JuliaLabs/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.
- timholy/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¶
- JuliaCollections/LRUCache.jl : An implementation of a Least Recently Used (LRU) Cache.
- kimikage/ProfileSVG.jl : Write flame graphs to SVG format and explore them interactively in Jupyter, Pluto, etc.
- timholy/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. - timholy/ProfileView.jl : Visualization of Julia profiling data
- tkluck/StatProfilerHTML.jl : Show Julia profiling data in an explorable HTML page.
- zenna/Lens.jl : A simple Julia library to inspect the runtime behaviour of your programs, with minimal interference to the program itself.
Polymorphism amd multiple dispatch¶
- Wikipedia: Polymorphism and Holy Traits pattern.
- The Design Impact of Multiple Dispatch presented by StefanKarpinski at Strange Loop on 19-Sep-2013.
- JuliaCon 2019: The Unreasonable Effectiveness of Multiple Dispatch by Stefan Karpinski
- jolin-io/WhereTraits.jl : This package exports one powerful macro @traits with which you can extend Julia's where syntax.
- mauro3/SimpleTraits.jl : Simple Traits for Julia.
- tk3369/BinaryTraits.jl : easy-to-use trait library with formal interface specification support.
- ztangent/ValSplit.jl : Compile away dynamic dispatch on Val-typed arguments via value-splitting.
Object-oriented programming (OOP)¶
- Suzhou-Tongyuan/ObjectOriented.jl : Conventional object-oriented programming in Julia without breaking Julia's core design ideas. We recommend you to read How to Translate OOP into Idiomatic Julia before using this package.
Fuzzy Logic¶
- lucaferranti/FuzzyLogic.jl : Julia package for fuzzy inference. Julia Con 2023 video