Skip to content

tecosaur/About.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

About.jl

Sometimes you want to know more about what you’re working with, whether it be a function, type, value, or something else entirely.

This package is a utility to help answer that question, it exports a single function about, which can be applied to any Julia object.

This makes heavy use of the new AnnotatedString type provided in Julia 1.11. While it can be used with Julia 1.9 and 1.10, the package load time is dramatically worse.

Examples

These examples should give an impression of what about does in practice, though without some of the 🌈pizazz✨ you’ll see if you try it yourself.

julia> about(About)
Module About [69d22d85-9f48-4c46-bbbe-7ad8341ff72a]
  Version 0.1.0 loaded from ~/.julia/dev/About

Directly depends on 4 packages (+9 indirectly):
• PrecompileTools (+5)  • InteractiveUtils (+3)  • StyledStrings  • JuliaSyntaxHighlighting (+1)

Exports 2 names:
• About  • about
julia> about(ℯ)
Irrational{:ℯ} (<: AbstractIrrational <: Real <: Number <: Any), occupies 0B.
singleton
julia> about(Float64(ℯ))
Float64 (<: AbstractFloat <: Real <: Number <: Any), occupies 8B.

 0100000000000101101111110000101010001011000101000101011101101001
 ╨└────┬────┘└────────────────────────┬─────────────────────────┘
 +    2^1   ×                1.359140914229522545
 = 2.7182818284590451
julia> about('')
Char (<: AbstractChar <: Any), occupies 4B.

     ┌2─┐   ┌2─┐┌──1──┐┌A─┐
 11100010 10001000 10011010 00000000
 └─0xe2─┘ └─0x88─┘ └─0x9a─┘ └─0x00─┘
 = U+221A

 Unicode '√', category: Symbol, math (Sm)
julia> about(Dict{Symbol, Int})
Concrete DataType defined in Base, 64B
  Dict{Symbol, Int64} <: AbstractDict{Symbol, Int64} <: Any

Struct with 8 fields:
• slots    *Memory{UInt8}
• keys     *Memory{Symbol}
• vals     *Memory{Int64}
• ndel      Int64
• count     Int64
• age       UInt64
• idxfloor  Int64
• maxprobe  Int64

 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    *       *       *       8B      8B      8B      8B      8B

 * = Pointer (8B)
julia> about(sum, Set{Int})
sum (generic function with 10 methods)
 Defined in Base(8) extended in Base.MPFR(1) and Base.GMP(1).

 Matched 1 method :: Int64
  sum(a; kw...) @ Base reduce.jl:561

 Method effects
  ✗ consistent     might not return or terminate consistently
  ✔ effect free    guaranteed to be free from externally semantically visible side effects
  ✗ no throw       may throw an exception
  ✗ terminates     might not always terminate
  ✔ no task state  guaranteed not to access task state (allowing migration between tasks)
  ~ inaccessible memory only  may access or modify mutable memory iff pointed to by its call arguments
  ✗ no undefined behaviour  may execute undefined behaviour
  ✔ non-overlayed  may call methods from an overlayed method table