The lib-helper Reference Manual

Next: , Previous: , Up: (dir)   [Contents][Index]

The lib-helper Reference Manual

This is the lib-helper Reference Manual, version 1.10.1, generated automatically by Declt version 4.0 beta 2 "William Riker" on Thu Sep 15 03:54:36 2022 GMT+0.

Table of Contents


1 Introduction

LIB-HELPER

Motive

If you have looked at your screen bewildered, trying to remember a function or an object name in Common-Lisp standard library, then this package may help you. There are more than 970 of those functions and objects (i.e. symbols) and I don't think everybody can browse through them easily when they are listed in CL package altogether.

In addition, there are thousands of third party libraries. How can one use a number of them together without constantly checking their source code, help and readme files all the time? There are different ways to organise knowledge and reach it and categorising them is one of them, if not the most efficient.

Some other languages may be seen as having the advantage of organising their standard library hierarchically, or at least with one level of grouping.

Having such a central group of packages to organise others (packages) might give us an easy way to come up with a collection of de-facto standard library composed of popular libraries.

In addition, this system gives you packages corresponding to classes and their related symbols and specialised methods under that package. This is similar to what you get with member & encapsulation based OOP-style code completion in other languages.

Description

This is an organisation of popular functionalities in a central, easy-to-browse set of packages. This library by itself doesn't add any utility function to common-lisp, instead it just reorganises the work of others in an easier to reach structure.

The taxonomy selection is mainly based on groups from clhs sections, cl-cookbook and some other common programming languages' standard libraries.

Some symbols may be exported from multiple packages, when I think that there's strong overlap and that one might look for the same symbol in different packages.

The goal of this library is to create a hierarchy of packages with the sole purpose of organising existing packages and symbols independently, thus without imposing anything on them. That's why in summary all it does is import symbols from others and re-export them from suitable places in the hierarchy.

For this purpose, lib-helper creates its package hierarchy with names under LIB.* (note that these packages include CL standard symbols too).

Since CL itself puts all its standard library in a flat list, it can also benefit from such grouping. That's why I kept a pure CL hierarchy of packages under the names STD.*

Usage

A screen recording of example usage: https://youtu.be/NygQTvbkMjY

A typical usage might be with slime/sly loaded (or using your IDE's completion drop-down), start typing "(lib." on repl and hit tab to get a list of packages starting with name lib., then shortlist and find what you're looking for. Though I'm having trouble running this scenario smoothly.

Or type "(lib:" and see the list of items in that group in a dropdown.

Libraries are arranged in a hierarchy. Child level packages are created as symbols starting with a dot in the parent level. This way, after choosing the completion for a child level, one can change the dot to a colon to check the lower level's symbols, and keep going down the hierarchy until they reach a target. The way it works is:

Assume some symbols at a level is at:

lib.lvl1.lvl2:<symbols>

Then a dropdown at lib.lvl1: would give:

lib.lvl1:
         .lvl2
         *any other symbol in lvl1*

choosing lib.lvl1:.lvl2, then editing the line to get lib.lvl1.lvl2: will give the list of *symbols* that we're looking for.

e.g. try to get to lib.str.comp:*

After finding what you were looking for, you can either use the symbol from the package you found, or use it directly from its original package. The primary purpose of this library is to let you find things, not to alter your coding convention (although using the package names of this library might improve readability - although this claim is not tested yet).

Speaking of finding, check the (lib:find-syms) function description below, it is quite powerful.

Classes as packages

With 2021-08-12 commit, we now have this interesting feature. If a package has a class defined in it, then there will be a corresponding package with that class name, and all the methods specialised to that class + slot accessors will be symbols under that package. This way, you can see all relevant methods in one place, instead of trying to guess or using clos functions to find the specialisations. A class symbol pointing to the sub package will be starting with double-dots ".." instead of single as is the case for sub packages.

e.g.

(lib.cont.lil.interface:

tab completion above will list lots of classes defined in interface package, all starting with .., so:

(lib.cont.lil.interface:..

will filter only the classes under interface. Then, choose the class <any>, for example:

(lib.cont.lil.interface..<any>:

and you'll see symbols specialised for that class.

Try to find your more favorite system / class as example.

Lazy system loading

Third party systems are not listed as system dependencies in .asd file, but instead dynamically loaded as requested. For example, alexandria is not a dependency, but their symbols are in the lib-defs.lisp, and they are interned with symbol names ending with a ~.

When you want to use, e.g. alexandria:cswitch, you should first find and call:

(lib.lang.flow:cswitch~)

Which will load the corresponding system, alexandria, then intern all the symbols of alexandria to their target packages in the hierarchy. Then you can call the previous command (or any other from the same system) without ~ at the end.

Btw, system loading is done by asdf, thus you should already have the corresponding system downloaded and asdf-reachable.

Name non-shadowing

If a symbol is exported from multiple systems/packages, then they are added to the symbols package list (in lib-defs.lisp) and for each package a symbol.N is created (except the first one is the symbol name).

Utilities

(lib:apropos-lib sub-str), (std:apropos-lib sub-str)

Look for symbols containing sub-str in the lib hierarchy and print the matching branches.

(lib:find-syms phrase), (std:find-syms phrase)

Given a number of words in the phrase (first word for the symbol, others for description and package path, find the closest matches within the lib hierarchy.

phrase can be either one string with multiple words, or a list of expressions (cl-ppcre re expressions).

Match will be listed for:

(first phrase) contained in symbol name AND
(every (rest phrase)) contained in path or symbol description.

e.g.

(lib:find-syms "interface lil")

will list more results then:

(lib:find-syms "interface lil pure")

The way we extract the description of any symbol is: "symbol-path-in-hierarchy : any description in any symbol namespace"

This means lib-helper will search for function description, variable description, class or struct or macro description all the same, and concat them to the description. This gives us a powerful way to do search (or I call it a better apropos). For example to find any symbol with the word "structure" in its descriptions:

(lib:find-syms '(".*" "structure"))
or
(lib:find-syms ".* structure")

(lib:packages), (std:packages)

See the list of packages, printed with some grouping.

(lib:get-package-names), (std:get-package-names)

Get the list of package names under lib. or std.

(lib:delete-this-system), (std:delete-this-system)

Deletes all the LIB.* and STD.* packages and does an asdf:clear-system :lib-helper. If you change lib-defs.lisp or std-defs.lisp and want to update your current lisp image, just do a:

(lib:delete-this-system)
(asdf:load-system :lib-helper)

Implementations tested

Working for: sbcl2.1, clisp 2.49, lispworks 7.1

Contributing

The complete hierarchy is contained in a tree in either lib-defs.lisp (std + 3rd party) or std-defs.lisp (ansi symbols only). If you want to change / add libs, modifying these lists will be enough.

TODO

Improvement ideas

If you have ideas, I'll be more than happy to collaborate as time allows. One thing worth pursuing might be hierarchical packages (as is seen in some implementations).

History

[2021-12-21]

Major code restructuring. Looking at the lib-helper.asd should make it possible to understand the complete project, or at least help with it. Classes improved & separated, with additional contextual separations.

Also tests are added.

[2021-08-12]

Classes as packages.

[2021-08-09]

For some packages, I had included only the symbols of a package if they originated from that package. Now the decision is to include all external symbols of a package instead. e.g. uiop:define-package's :use-reexport, or a package manually exporting its imported symbols.

[2021-08-07]

Added find-symbols and apropos-lib. This is becoming quite useful!

[2021-08-01]

Add cl-containers. This library proves to be quite difficult to categorise, although it is organised quite well itself.

[2021-06-27]

Turn the base code into a package.

References

  1. http://www.lispworks.com/documentation/lw50/CLHS/Front/X_AllSym.htm
  2. http://www.lispworks.com/documentation/lw50/CLHS/Front/Contents.htm

License

Copyright (c) [2021] [Albus M Piroglu]

Licensed under the MIT License.


2 Systems

The main system appears first, followed by any subsystem dependency.


Previous: , Up: Systems   [Contents][Index]

2.1 lib-helper

Reorganise existing symbols in standard and third party libs to common hierarchical packages.

Maintainer

Albus M Piroglu <mattapiroglu@gmail.com>

Author

Albus M Piroglu <mattapiroglu@gmail.com>

License

MIT

Long Description

# LIB-HELPER

## Motive
If you have looked at your screen bewildered, trying to remember a
function or an object name in Common-Lisp standard library, then this package
may help you. There are more than 970 of those functions and objects (i.e. symbols) and
I don’t think everybody can browse through them easily when they are listed
in CL package altogether.

In addition, there are thousands of third party libraries. How can one use
a number of them together without constantly checking their source code, help and
readme files all the time? There are different ways to organise knowledge and reach
it and categorising them is one of them, if not the most efficient.

Some other languages may be seen as having the advantage of organising their
standard library hierarchically, or at least with one level of grouping.

Having such a central group of packages to organise others (packages) might give us an
easy way to come up with a collection of de-facto standard library composed of
popular libraries.

In addition, this system gives you packages corresponding to classes and their related symbols and specialised methods under that package. This is similar to what you get with member & encapsulation based OOP-style code completion in other languages.

## Description
This is an organisation of popular functionalities in a central, easy-to-browse
set of packages. This library by itself doesn’t add any utility function to common-lisp,
instead it just reorganises the work of others in an easier to reach structure.

The taxonomy selection is mainly based on groups from clhs sections, cl-cookbook and some other common programming languages’ standard libraries.

Some symbols may be exported from multiple packages, when I think that
there’s strong overlap and that one might look for the same symbol in
different packages.

The goal of this library is to create a hierarchy of packages with the sole purpose of organising existing packages and symbols independently, thus without imposing anything on them. That’s why in summary all it does is import symbols from others and re-export them from suitable places in the hierarchy.

For this purpose, lib-helper creates its package hierarchy with names under LIB.* (note that these packages include CL standard symbols too).

Since CL itself puts all its standard library in a flat list, it can also benefit from such grouping. That’s why I kept a pure CL hierarchy of packages under the names STD.*

## Usage

A screen recording of example usage: https://youtu.be/NygQTvbkMjY

A typical usage might be with slime/sly loaded (or using your IDE’s completion drop-down), start typing "(lib." on repl and hit tab to get a list of packages starting with name lib., then shortlist and find what you’re looking for. Though I’m having trouble running this scenario smoothly.

Or type "(lib:" and see the list of items in that group in a dropdown.

Libraries are arranged in a hierarchy. Child level packages are created as symbols starting with a dot in the parent level. This way, after choosing the completion for a child level, one can change the dot to a colon to check the lower level’s symbols, and keep going down the hierarchy until they reach a target. The way it works is:

Assume some symbols at a level is at:

lib.lvl1.lvl2:<symbols>

Then a dropdown at lib.lvl1: would give:

lib.lvl1:
.lvl2
*any other symbol in lvl1*

choosing lib.lvl1:.lvl2, then editing the line to get lib.lvl1.lvl2: will give the list of \*symbols\* that we’re looking for.

e.g. try to get to lib.str.comp:*

After finding what you were looking for, you can either use the symbol from the package you found, or use it directly from its original package. The primary purpose of this library is to let you find things, not to alter your coding convention (although using the package names of this library might improve readability - although this claim is not tested yet).

Speaking of finding, check the (lib:find-syms) function description below, it is quite powerful.

#### Classes as packages
With 2021-08-12 commit, we now have this interesting feature. If a package has a class defined in it, then there will be a corresponding package with that class name, and all the methods specialised to that class + slot accessors will be symbols under that package. This way, you can see all relevant methods in one place, instead of trying to guess or using clos functions to find the specialisations. A class symbol pointing to the sub package will be starting with double-dots ".." instead of single as is the case for sub packages.

e.g.

(lib.cont.lil.interface:

tab completion above will list lots of classes defined in interface package, all starting with .., so:

(lib.cont.lil.interface:..

will filter only the classes under interface. Then, choose the class \<any>, for example:

(lib.cont.lil.interface..<any>:

and you’ll see symbols specialised for that class.

Try to find your more favorite system / class as example.

#### Lazy system loading
Third party systems are not listed as system dependencies in .asd file, but instead dynamically loaded as requested. For example, alexandria is not a dependency, but their symbols are in the lib-defs.lisp, and they are interned with symbol names ending with a ~.

When you want to use, e.g. alexandria:cswitch, you should first find and call:

“‘
(lib.lang.flow:cswitch~)
“‘

Which will load the corresponding system, alexandria, then intern all the symbols of alexandria to their target packages in the hierarchy. Then you can call the previous command (or any other from the same system) without ~ at the end.

Btw, system loading is done by asdf, thus you should already have the corresponding system downloaded and asdf-reachable.

#### Name non-shadowing
If a symbol is exported from multiple systems/packages, then they are added to the symbols package list (in lib-defs.lisp) and for each package a symbol.N is created (except the first one is the symbol name).

### Utilities

#### (lib:apropos-lib sub-str), (std:apropos-lib sub-str)
Look for symbols containing sub-str in the lib hierarchy and
print the matching branches.

#### (lib:find-syms phrase), (std:find-syms phrase)
Given a number of words in the phrase (first word for the symbol, others for
description and package path, find the closest matches within the lib hierarchy.

phrase can be either one string with multiple words, or a list of expressions (cl-ppcre re expressions).

Match will be listed for:

(first phrase) contained in symbol name AND
(every (rest phrase)) contained in path or symbol description.

e.g.

(lib:find-syms "interface lil")

will list more results then:

(lib:find-syms "interface lil pure")

The way we extract the description of any symbol is:
"symbol-path-in-hierarchy : any description in any symbol namespace"

This means lib-helper will search for function description, variable description, class or struct or macro description all the same, and concat them to the description. This gives us a powerful way to do search (or I call it a better apropos). For example to find any symbol with the word "structure" in its descriptions:

(lib:find-syms ’(".*" "structure"))
or
(lib:find-syms ".* structure")

#### (lib:packages), (std:packages)
See the list of packages, printed with some grouping.

#### (lib:get-package-names), (std:get-package-names)
Get the list of package names under lib. or std.

#### (lib:delete-this-system), (std:delete-this-system)
Deletes all the LIB.* and STD.* packages and does an asdf:clear-system :lib-helper.
If you change lib-defs.lisp or std-defs.lisp and want to update your current lisp image, just do a:

(lib:delete-this-system)
(asdf:load-system :lib-helper)

## Implementations tested
Working for: sbcl2.1, clisp 2.49, lispworks 7.1

## Contributing
The complete hierarchy is contained in a tree in either lib-defs.lisp (std + 3rd party) or std-defs.lisp (ansi symbols only). If you want to change / add libs, modifying these lists will be enough.

## TODO

- [ ] CLHS categorisation: Using the full symbol index page (1), for each symbol, find the sections that mention this symbol in sections pages (2), and form the library packages corresponding to the sections.
- Add(ing) well known asdf libraries to the lib.* categories (~~asdf-uiop~~, ~~alexandria~~, ~~ppcre~~, ~~iterate~~, containers, ~~closer-mop~~, bordeaux-threads, ~~lil~~, lparallel, osicat, cl-opengl, etc.).
- [ ] Add cl-containers. Since I already created some container branches, I should merge cl-containers into them. But then to reduce confusion, I can add ".clc" to the end of each category to separate the cl-containers bits. This way someone looking for hash-tables can use lib.cont.hash:, or lib.cont.hash.clc: .

- [ ]
#### [2021-08-01]
While working on cl-containers, I started realising a problem in design. This library is trying to categorise libraries into hierarchical packages, sometimes using library author’s package structure, sometimes using domain-categorised sections. Both ideas would be expected to converge but the difficulty of different authors standardising such a category is an unsolved problem. I think I’ll come up with some guidelines.

Here, the list of criteria while managing the hierarchy is roughly:

1. Keep the tree balanced, with number of subbranches around 3-5
2. Keep the number of symbols low, possibly < 30? Or instead minimise number of non-coherent symbols, where coherent symbols are syntactically similar (such as car, caar, cdr, cadr; or select-item, select-node, select-somethingelse).
3. DONE: ~~Generic methods can be cloned to different branches where each branch represents a class that implements those methods. This is helpful to organise object oriented design. We will end up having packages that correspond to classes with methods and members.~~
4. Mostly DONE: I can get symbols of a system with some hierarchy that contains class and struct separation and their methods: ** make this automatic - working on (generate-system-symbols) now.

- [ ] import module as / using namespace new_name !!!
I just realised that I can add these functions (I feel like there are already good alternatives, starting with uiop/defpackage import-reexport facility) to easily use a library branch within a package. But the improvement here is, we’ll import-reexport a whole tree of packages to a new base branch. So we can do this:

(in-package my-dev-package)
(import-package-as "LIB.CONT.SEQ.ACCESS" "SEQ")
(seq:extremum ’(1 2 3 4) #’<)

(import-package "LIB.CONT.LIL.PURE") ; to import immediate syms and packages
(queue:\<fifo-queue> ...)
(collection:conj ...)

## Improvement ideas
If you have ideas, I’ll be more than
happy to collaborate as time allows. One thing worth pursuing might be
hierarchical packages (as is seen in some implementations).

## History
### [2021-12-21]
Major code restructuring. Looking at the lib-helper.asd should make it possible to understand the complete project, or at least help with it. Classes improved & separated, with additional contextual separations.

Also tests are added.

### [2021-08-12]
Classes as packages.

### [2021-08-09]
For some packages, I had included only the symbols of a package if they originated from that package. Now the decision is to include all external symbols of a package instead. e.g. uiop:define-package’s :use-reexport, or a package manually exporting its imported symbols.

### [2021-08-07]
Added find-symbols and apropos-lib. This is becoming quite useful!

### [2021-08-01]
Add cl-containers. This library proves to be quite difficult to categorise, although it is organised quite well itself.

### [2021-06-27]
Turn the base code into a package.

## References
1. http://www.lispworks.com/documentation/lw50/CLHS/Front/X_AllSym.htm
2. http://www.lispworks.com/documentation/lw50/CLHS/Front/Contents.htm

# License

Copyright (c) [2021] [Albus M Piroglu]

Licensed under the MIT License.

Version

1.10.1

Dependencies
  • cl-ppcre (system).
  • closer-mop (system).
  • alexandria (system).
  • iterate (system).
  • cl-containers (system).
Source

lib-helper.asd.

Child Components

3 Modules

Modules are listed depth-first from the system components tree.


Next: , Previous: , Up: Modules   [Contents][Index]

3.1 lib-helper/generics

Generics are where the defgeneric forms for multiple types reside. Then the
specialisations, i.e. defmethods are defined for each related type, under types module.

Dependency

package.lisp (file).

Source

lib-helper.asd.

Parent Component

lib-helper (system).

Child Component

convert.lisp (file).


3.2 lib-helper/types

Classes, structs, deftypes and their methods.

Dependency

generics (module).

Source

lib-helper.asd.

Parent Component

lib-helper (system).

Child Components

Next: , Previous: , Up: Modules   [Contents][Index]

3.3 lib-helper/std-lib

Dependency

packages-common.lisp (file).

Source

lib-helper.asd.

Parent Component

lib-helper (system).

Child Components

Previous: , Up: Modules   [Contents][Index]

3.4 lib-helper/libs

Dependency

packages-common.lisp (file).

Source

lib-helper.asd.

Parent Component

lib-helper (system).

Child Components

4 Files

Files are sorted by type and then listed depth-first from the systems components trees.


Previous: , Up: Files   [Contents][Index]

4.1 Lisp


Next: , Previous: , Up: Lisp   [Contents][Index]

4.1.1 lib-helper/lib-helper.asd

Source

lib-helper.asd.

Parent Component

lib-helper (system).

ASDF Systems

lib-helper.

Packages

lib-helper-asd.

Internals

4.1.2 lib-helper/package.lisp

Source

lib-helper.asd.

Parent Component

lib-helper (system).

Packages

lib~.


4.1.3 lib-helper/generics/convert.lisp

Generic function for conversion between types

Source

lib-helper.asd.

Parent Component

generics (module).

Internals

convert (generic function).


4.1.4 lib-helper/types/system.lisp

Defines load behaviour for systems.

Source

lib-helper.asd.

Parent Component

types (module).

Public Interface
Internals

4.1.5 lib-helper/types/methods.lisp

Find generic functions and their methods for organising classes.

Source

lib-helper.asd.

Parent Component

types (module).

Public Interface
Internals

4.1.6 lib-helper/types/origin-package.lisp

The package where a symbol originated from

Dependency

system.lisp (file).

Source

lib-helper.asd.

Parent Component

types (module).

Public Interface

print-object (method).

Internals

4.1.7 lib-helper/types/lib-hierarchy.lisp

Types and functions pertaining the lib-hierarchy

Source

lib-helper.asd.

Parent Component

types (module).

Public Interface
Internals

4.1.8 lib-helper/types/lib-symbol.lisp

A symbol that can exist in multiple source packages, mapped
to multiple symbols under one lib-hierarchy-branch

Source

lib-helper.asd.

Parent Component

types (module).

Public Interface

print-object (method).

Internals

4.1.9 lib-helper/types/converters.lisp

Converter methods definitions.

Dependency

lib-hierarchy.lisp (file).

Source

lib-helper.asd.

Parent Component

types (module).

Internals

4.1.10 lib-helper/known-libs.lisp

A collection of know systems and their load-at-startup status.

Dependency

package.lisp (file).

Source

lib-helper.asd.

Parent Component

lib-helper (system).

Public Interface
Internals

*lib-package-test* (special variable).


4.1.11 lib-helper/utils.lisp

Dependency

package.lisp (file).

Source

lib-helper.asd.

Parent Component

lib-helper (system).

Internals

mkstr (function).


4.1.12 lib-helper/packages-common.lisp

Shared functionality between packages-*.lisp below

Dependencies
Source

lib-helper.asd.

Parent Component

lib-helper (system).

Public Interface
Internals

delete-hierarchy (function).


4.1.13 lib-helper/system-helpers.lisp

Helper functions to generate hierarchies for systems

Dependencies
Source

lib-helper.asd.

Parent Component

lib-helper (system).

Internals

4.1.14 lib-helper/std-lib/std-defs.lisp

Source

lib-helper.asd.

Parent Component

std-lib (module).

Public Interface

*std-package-tree* (special variable).


4.1.15 lib-helper/std-lib/packages-std.lisp

Dependency

std-defs.lisp (file).

Source

lib-helper.asd.

Parent Component

std-lib (module).

Packages

std.

Public Interface

4.1.16 lib-helper/libs/lib-defs.lisp

Source

lib-helper.asd.

Parent Component

libs (module).

Public Interface

*lib-package-tree* (special variable).


4.1.17 lib-helper/libs/packages-lib.lisp

Dependency

lib-defs.lisp (file).

Source

lib-helper.asd.

Parent Component

libs (module).

Packages

lib.

Public Interface

5 Packages

Packages are listed by definition order.


Next: , Previous: , Up: Packages   [Contents][Index]

5.1 lib

Source

packages-lib.lisp.

Use List

common-lisp.

Public Interface

Next: , Previous: , Up: Packages   [Contents][Index]

5.2 std

Source

packages-std.lisp.

Use List

common-lisp.

Public Interface

Next: , Previous: , Up: Packages   [Contents][Index]

5.3 lib~

Source

package.lisp.

Use List

common-lisp.

Public Interface
Internals

Previous: , Up: Packages   [Contents][Index]

5.4 lib-helper-asd

Source

lib-helper.asd.

Use List
  • asdf/interface.
  • common-lisp.
Internals

6 Definitions

Definitions are sorted by export status, category, package, and then by lexicographic order.


Next: , Previous: , Up: Definitions   [Contents][Index]

6.1 Public Interface


6.1.1 Special variables

Special Variable: *hierarchies*

list of lib-hierarchies

Package

lib~.

Source

known-libs.lisp.

Special Variable: *lib-package-tree*

Names of each package in the hierarchy and their symbols.
Each package is a list, with:
first item: package name
second item: package description
third : a list of:
(symbol-name-to-export (original-package-name system-name) (opn2 sysname2) ..)

Package

lib~.

Source

lib-defs.lisp.

Special Variable: *std-package-tree*

Names of each package in the hierarchy and their symbols. Each package is a list, with:
first item: package name
second item: package description
third : a list of:
(symbol-name-to-export
original-package-name)

Package

lib~.

Source

std-defs.lisp.

Special Variable: *system-table*

A hash table of {key:string val:system}, with meanings:
key: system-name,
val: system object

Package

lib~.

Source

known-libs.lisp.


6.1.2 Ordinary functions

Function: add-to-package-lists (hierarchy)

Add the hierarchy to the *hierarchies*

Package

lib~.

Source

known-libs.lisp.

Function: apropos-lib (sub-str &optional print-results)
Package

lib.

Source

packages-lib.lisp.

Function: apropos-lib (sub-str &optional print-results)
Package

std.

Source

packages-std.lisp.

Function: apropos-lib (sub-str package-tree &optional print-results)

Look for symbols containing sub-str in the lib hierarchy and
print the matching branches.

print-results: if t (default), print the results instead of returning a list.

Package

lib~.

Source

packages-common.lisp.

Function: delete-system-aux ()
Package

lib~.

Source

packages-common.lisp.

Function: delete-this-hierarchy ()

Delete all packages and symbols defined by hierarchy lib:

Package

lib.

Source

packages-lib.lisp.

Function: delete-this-hierarchy ()

Delete all packages and symbols defined by hierarchy std:

Package

std.

Source

packages-std.lisp.

Function: delete-this-system ()

Delete all packages defined by system lib-helper, and remove it from asdf buffer.

Package

lib.

Source

packages-lib.lisp.

Function: delete-this-system ()

Delete all packages defined by system lib-helper, and remove it from asdf buffer.

Package

std.

Source

packages-std.lisp.

Function: find-syms (phrase &optional print-results)

Find closest matches within std or lib hierarchy.

INPUTS:
phrase:
a number of words as one string (first word for the symbol, others for
description and package path)
OR
re-patterns as a list of strings in the phrase,

print-results: if t (default), print the results instead of returning a list.

OUTPUT: nil or list of results

Note: re-patterns use cl-ppcre.

EXAMPLES:
(find-syms "prin")
find symbols with prin in symbol name

(find-syms "prin io")
Different to previous example, this will do a further filtering by finding symbols that have prin in symbol name, and io in either the package-path name or its documentation.

(find-syms ’("prin" ".*\bio\b.*"))
Further limiting to previous, filter ones with only complete word io. But one might prefer a shorter and almost equally effective:
(find-syms "prin std.io")
if they are trying to limit with path name.

Package

lib.

Source

packages-lib.lisp.

Function: find-syms (phrase &optional print-results)

Find closest matches within std or lib hierarchy.

INPUTS:
phrase:
a number of words as one string (first word for the symbol, others for
description and package path)
OR
re-patterns as a list of strings in the phrase,

print-results: if t (default), print the results instead of returning a list.

OUTPUT: nil or list of results

Note: re-patterns use cl-ppcre.

EXAMPLES:
(find-syms "prin")
find symbols with prin in symbol name

(find-syms "prin io")
Different to previous example, this will do a further filtering by finding symbols that have prin in symbol name, and io in either the package-path name or its documentation.

(find-syms ’("prin" ".*\bio\b.*"))
Further limiting to previous, filter ones with only complete word io. But one might prefer a shorter and almost equally effective:
(find-syms "prin std.io")
if they are trying to limit with path name.

Package

std.

Source

packages-std.lisp.

Function: find-syms (phrase package-tree &optional print-results)

Find closest matches within std or lib hierarchy.

INPUTS:
phrase:
a number of words as one string (first word for the symbol, others for
description and package path)
OR
re-patterns as a list of strings in the phrase,

print-results: if t (default), print the results instead of returning a list.

OUTPUT: nil or list of results

Note: re-patterns use cl-ppcre.

EXAMPLES:
(find-syms "prin")
find symbols with prin in symbol name

(find-syms "prin io")
Different to previous example, this will do a further filtering by finding symbols that have prin in symbol name, and io in either the package-path name or its documentation.

(find-syms ’("prin" ".*\bio\b.*"))
Further limiting to previous, filter ones with only complete word io. But one might prefer a shorter and almost equally effective:
(find-syms "prin std.io")
if they are trying to limit with path name.

Package

lib~.

Source

packages-common.lisp.

Function: get-package-names ()
Package

lib.

Source

packages-lib.lisp.

Function: get-package-names ()
Package

std.

Source

packages-std.lisp.

Function: get-package-names-aux (hierarchy)

Return a list of package names in the package-tree.

Package

lib~.

Source

packages-common.lisp.

Function: packages (&key stream)
Package

lib.

Source

packages-lib.lisp.

Function: packages (&key stream)
Package

std.

Source

packages-std.lisp.

Function: packages-aux (package-tree &key stream)

Print package names in first hierachical categorization.

Package

lib~.

Source

packages-common.lisp.

Function: setup-packages (package-tree)

Creates and defines packages in package-tree.

Package

lib~.

Source

lib-hierarchy.lisp.

Function: symbol-count ()
Package

lib.

Source

packages-lib.lisp.

Function: symbol-count ()
Package

std.

Source

packages-std.lisp.

Function: symbol-count (package-tree)

Return the count of unique symbols within the tree.

Package

lib~.

Source

packages-common.lisp.


6.1.3 Standalone methods

Method: initialize-instance :after ((obj system) &key)
Source

system.lisp.

Method: print-object ((obj lib-hierarchy-branch) stream)
Source

lib-hierarchy.lisp.

Method: print-object ((obj lib-symbol) stream)
Source

lib-symbol.lisp.

Method: print-object ((obj gf-tree) stream)
Source

methods.lisp.

Method: print-object ((obj origin-package) stream)
Source

origin-package.lisp.

Method: print-object ((obj method-detail) stream)
Source

methods.lisp.

Method: print-object ((obj system) stream)
Source

system.lisp.

Method: print-object ((obj lib-hierarchy) stream)
Source

lib-hierarchy.lisp.


6.2 Internals


Next: , Previous: , Up: Internals   [Contents][Index]

6.2.1 Special variables

Special Variable: *lib-package-test*

Dev helper for testing internal functions.

Package

lib~.

Source

known-libs.lisp.

Special Variable: *skipped-classes-in-check*
Package

lib~.

Source

system-helpers.lisp.

Special Variable: +doc-sys+

Doc system functions and corresponding types for documentation lookup in multiple namespaces of a symbol.

Package

lib~.

Source

lib-symbol.lisp.

Special Variable: <gf-tree>

An empty object to be passed to generic functions as an interface.

Package

lib~.

Source

methods.lisp.

Special Variable: <lib-hierarchy-branch>

An empty object to be passed to generic functions as an interface.

Package

lib~.

Source

lib-hierarchy.lisp.

Special Variable: <lib-hierarchy>

An empty object to be passed to generic functions as an interface. Idea partially from lil library.

Package

lib~.

Source

lib-hierarchy.lisp.

Special Variable: <lib-symbol>

An empty object to be passed to generic functions as an interface.

Package

lib~.

Source

lib-symbol.lisp.

Special Variable: <list>

An empty object to be passed to generic functions as an interface.

Package

lib~.

Source

lib-hierarchy.lisp.

Special Variable: <method-detail>

An empty object to be passed to generic functions as an interface.

Package

lib~.

Source

methods.lisp.

Special Variable: <symbol>

An empty object to be passed to generic functions as an interface.

Package

lib~.

Source

methods.lisp.


6.2.2 Macros

Macro: with-system ((sys-var sys-name) &body body)
Package

lib~.

Source

system.lisp.


Next: , Previous: , Up: Internals   [Contents][Index]

6.2.3 Ordinary functions

Function: activate-system (orig-pkg pkg-tree)

asdf:load the system and for every symbol of it
import-export them in the tree.

This function is not called during lib-helper load, but is attached to the library branches for on-demand use.

Package

lib~.

Source

system.lisp.

Function: add-sub-packages (h-branch parent-pkg)

Find package names that are sub-packages of h-branch, and make them
symbols of .package-name, i.e. a dot prepended, and intern in the parent package.

e.g.
a package path1.path2 can have symbols interned for it such as: path1.path2:.path2.1
path1.path2:.path2.2
path1.path2:.path2.3

Package

lib~.

Source

lib-hierarchy.lisp.

Function: all-elements-are-lib-symbols (lst)
Package

lib~.

Source

lib-symbol.lisp.

Function: all-elements-are-method-details (lst)
Package

lib~.

Source

methods.lisp.

Function: all-elements-are-origin-packages (lst)
Package

lib~.

Source

lib-symbol.lisp.

Function: all-elements-are-symbols (lst)
Package

lib~.

Source

lib-symbol.lisp.

Function: asdf-system-loaded (sys-name)
Package

lib~.

Source

system.lisp.

Function: define-sub-package-syms (p)

Define all symbols of the existing target branch package p, including the listed symbols & symbols for each .sub-package

INPUTS:
p: lib-hierarchy-branch

OUTPUTS: nil

Package

lib~.

Source

lib-hierarchy.lisp.

Function: delete-hierarchy (hierarchy)
Package

lib~.

Source

packages-common.lisp.

Function: filter-external-syms (names pkg)
Package

lib~.

Source

system-helpers.lisp.

Function: find-lib-aux (search-closure package-tree &optional print-results)

Search in package-tree for symbols meeting search-closure predicate.
print-results: if t, print results, don’t return, otherwise return a list of results.

Package

lib~.

Source

lib-symbol.lisp.

Function: format-package-tree-syms (tree stream)
Package

lib~.

Source

system-helpers.lisp.

Function: generate-system-symbols (sys-name prefix packages &optional stream)

function maturity: 1
Generate a package tree corresponding to the system. Then the result can be
manually pasted into the lib-defs.lisp

Also creates sections for classes and their implemented methods.

sys-name: string, name of the asdf system
prefix : the package-tree section prefix for packages of the system to be imported from. e.g. for containers package to be under lib.cont pass "LIB.CONT".
packages: list of packages to import from and to ("package-from" "package-to".
A system may define many packages, but the
the user should manually choose a subset that the symbols will be imported from, and pass them here.

e.g. given call: (generate-system-symbols "lil" "LIB.CONT" "("LIL/PURE/HASH-TABLE" "LIL/INTERFACE/ORDER")
this function returns:

("LIB.CONT.LIL/PURE/HASH-TABLE" "Package: LIL/PURE/HASH-TABLE"
(("<HASH-TABLE>" ("lil" "LIL/PURE/HASH-TABLE"))
("HASHMAP-INTERFACE" ("lil" "LIL/PURE/HASH-TABLE"))
("BUCKETMAP-INTERFACE" ("lil" "LIL/PURE/HASH-TABLE"))
...
))
("LIB.CONT.LIL.INTERFACE.ORDER" "Package: LIL/INTERFACE/ORDER"
(("<ORDER>" ("lil" "LIL/INTERFACE/ORDER"))
("<ORDER-FROM-LESSP>" ("lil" "LIL/INTERFACE/ORDER"))
("<LESSP>" ("lil" "LIL/INTERFACE/ORDER"))
...
))

Package

lib~.

Source

system-helpers.lisp.

Function: get-class-methods (class &optional generic-functions)
Package

lib~.

Source

system-helpers.lisp.

Function: get-class-methods-unique-names (class &optional generic-functions)
Package

lib~.

Source

system-helpers.lisp.

Function: get-generic-functions ()

Return all generic functions defined in the current lisp image as list of gf-tree.

Package

lib~.

Source

system-helpers.lisp.

Function: get-package-external-symbols (package)

Return the symbols that are exported from the package, i.e. external.

Package

lib~.

Source

system-helpers.lisp.

Function: get-parent-name (pkg-name)

Given lib.lvl1.lvl2 shaped package name, return lib.lvl1; or lib.lvl1.lvl2..class1, return lib.lvl1.lvl2

Package

lib~.

Source

lib-hierarchy.lisp.

Function: get-struct-externals (struct-name package-name)

Given a struct name, check for each struct name and return the package-external ones as a list.

Package

lib~.

Source

system-helpers.lisp.

Function: get-sub-packages (pkg-name package-tree)

pkg-name: string
Returns a list of paths that are sub packages of pkg-name.

Package

lib~.

Source

lib-hierarchy.lisp.

Function: get-sym-desc (sym)

Given a symbol, return its corresponding description. If there are descriptions in more than one namespace (function, variable, class, etc.), combine the results.

Package

lib~.

Source

lib-symbol.lisp.

Function: get-symbol-node (sym sys-name package-name)
Package

lib~.

Source

system-helpers.lisp.

Function: get-target-sym-name (sym-name index &key loaded)

Name of the symbol to create depends on how many systems / packages are exporting the symbol. If more than one, than the first one is the sym-name, and subsequent ones are appended a dot + number starting from 1. If the system is not loaded, then a tilde will be appended to the name.
index: 0 based, which index system is the symbol imported from in a symbol list of (sym-name (sys0 pkg0) (sys1 pkg1) ..)

e.g. from a list of: ("CAR" (NIL "CL") ("my-system" "MY-PACKAGE"))
we want the symbol for my-system, thus call
(get-target-sym-name "CAR" 1 :loaded nil)
to get "CAR.1~"

Package

lib~.

Source

lib-symbol.lisp.

Function: import-and-get-symbols (lib-sym to-pkg)

For one target symbol, return a list of symbols which are either from a system-package, or a list of sym-nameN{~}* where ~ is optional. See Lazy interning in the top comment of *lib-package-tree* for details.

Package

lib~.

Source

lib-symbol.lisp.

Function: intern-later (sym-name orig-pkg to-pkg pkg-tree)

Create a symbol with a ~ at the end, bound to a function to do:
load the associated system (via asdf - not quicklisp, so everything is offline),
create the expected symbol without the ~ this time, pointing to the actual object of concern and delete the symbol with the ~ at the end.

Package

lib~.

Source

lib-symbol.lisp.

Function: intern-now (sym-name sym to-pkg)

Either shadowing-import or create a symbol and link to sym.

Package

lib~.

Source

lib-symbol.lisp.

Function: lazy-intern (lib-sym sym-cnt to-pkg)

See Lazy interning in the
top comment of *lib-package-tree* for details.

Intern a symbol, and return that symbol name (package relative).

Package

lib~.

Source

lib-symbol.lisp.

Function: lib-symbolp (obj)
Package

lib~.

Source

lib-symbol.lisp.

Function: make-origin-package (system-and-package)
Package

lib~.

Source

origin-package.lisp.

Function: match-with-symbol (phrase-regexes lib-symbol)

Return true if first expression in phrase-regexes matches the symbol name AND all the rest in phrase-regexes match the symbol’s full-description (which includes hierarchy path along with all symbol-namespace descriptions, i.e. function description + variable description + class + method-combination etc.).

Package

lib~.

Source

lib-symbol.lisp.

Function: maybe-load (system)

asdf load the system if necessary.

Package

lib~.

Source

system.lisp.

Function: maybe-load-system-at-startup (orig-pkg)

asdf load the system if necessary. orig-pkg: is of type origin-package

Package

lib~.

Source

system.lisp.

Function: method-detailp (obj)
Package

lib~.

Source

methods.lisp.

Function: mkstr (&rest args)

Useful utility from PGraham.

Package

lib~.

Source

utils.lisp.

Function: origin-packagep (obj)
Package

lib~.

Source

origin-package.lisp.

Function: prepare-libs ()
Package

lib-helper-asd.

Source

lib-helper.asd.

Function: prepare-std-libs ()
Package

lib-helper-asd.

Source

lib-helper.asd.

Function: rename-import-syms (orig-pkg branch from-pkg)

For the symbols in branch that belong to orig-pkg,
unintern the symbols corresponding to that package, which will be named as a-symbol{.N}~, and shadowing-import every the a-symbol name from from-pkg to to-pkg in branch.

orig-pkg: is of type origin-package
branch: a lib-hierarchy-branch
from-pkg: a common-lisp package designator

Package

lib~.

Source

lib-symbol.lisp.

Function: set-full-desc (s)

s: lib-symbol

Package

lib~.

Source

lib-symbol.lisp.

Function: should-load-at-startup (system)

Return t if sys-name should be loaded. This depends on load-at-startup and (already) loaded values.

Package

lib~.

Source

system.lisp.


Next: , Previous: , Up: Internals   [Contents][Index]

6.2.4 Generic functions

Generic Reader: branches (object)
Package

lib~.

Methods
Reader Method: branches ((lib-hierarchy lib-hierarchy))

automatically generated reader method

Source

lib-hierarchy.lisp.

Target Slot

branches.

Generic Writer: (setf branches) (object)
Package

lib~.

Methods
Writer Method: (setf branches) ((lib-hierarchy lib-hierarchy))

automatically generated writer method

Source

lib-hierarchy.lisp.

Target Slot

branches.

Generic Reader: containing-system (object)
Generic Writer: (setf containing-system) (object)
Package

lib~.

Methods
Reader Method: containing-system ((origin-package origin-package))
Writer Method: (setf containing-system) ((origin-package origin-package))

The system that contains this package

Source

origin-package.lisp.

Target Slot

system.

Generic Function: convert (destination origin obj &key parent &allow-other-keys)

Convert obj from type origin to type destination.

Package

lib~.

Source

convert.lisp.

Methods
Method: convert ((destination gf-tree) (origin symbol) g &key &allow-other-keys)

Conversion: symbol -> gf-tree

Source

converters.lisp.

Method: convert ((destination lib-symbol) (origin list) obj &key parent &allow-other-keys)

Conversion: list -> lib-symbol

Source

converters.lisp.

Method: convert ((destination lib-hierarchy-branch) (origin list) obj &key parent &allow-other-keys)

Conversion: list -> lib-hierarchy-branch

Source

converters.lisp.

Method: convert ((destination lib-hierarchy) (origin list) obj &key &allow-other-keys)

Conversion: list -> lib-hierarchy

Source

converters.lisp.

Generic Reader: full-desc (object)
Generic Writer: (setf full-desc) (object)
Package

lib~.

Methods
Reader Method: full-desc ((lib-symbol lib-symbol))
Writer Method: (setf full-desc) ((lib-symbol lib-symbol))

Hierarchy path + all namespace descriptions of the symbol combined.

Source

lib-symbol.lisp.

Target Slot

full-desc.

Generic Reader: get-name (object)
Package

lib~.

Methods
Reader Method: get-name ((lib-hierarchy lib-hierarchy))

automatically generated reader method

Source

lib-hierarchy.lisp.

Target Slot

name.

Generic Writer: (setf get-name) (object)
Package

lib~.

Methods
Writer Method: (setf get-name) ((lib-hierarchy lib-hierarchy))

automatically generated writer method

Source

lib-hierarchy.lisp.

Target Slot

name.

Generic Reader: gf (object)
Generic Writer: (setf gf) (object)
Package

lib~.

Methods
Reader Method: gf ((gf-tree gf-tree))
Writer Method: (setf gf) ((gf-tree gf-tree))

The generic function object

Source

methods.lisp.

Target Slot

gf.

Generic Reader: gmethods (object)
Generic Writer: (setf gmethods) (object)
Package

lib~.

Methods
Reader Method: gmethods ((gf-tree gf-tree))
Writer Method: (setf gmethods) ((gf-tree gf-tree))

Methods and lambda lists of the gm.

Source

methods.lisp.

Target Slot

gmethods.

Generic Reader: lib-symbols (object)
Package

lib~.

Methods
Reader Method: lib-symbols ((lib-hierarchy-branch lib-hierarchy-branch))

automatically generated reader method

Source

lib-hierarchy.lisp.

Target Slot

lib-symbols.

Generic Writer: (setf lib-symbols) (object)
Package

lib~.

Methods
Writer Method: (setf lib-symbols) ((lib-hierarchy-branch lib-hierarchy-branch))

automatically generated writer method

Source

lib-hierarchy.lisp.

Target Slot

lib-symbols.

Generic Function: make-system (sys &key import-symbols-at-startup &allow-other-keys)

import-symbols-at-startup:
(t: if system already loaded in the lisp image and
you want to import/export its symbols,

nil: if you don’t want to import the system’s symbols yet, regardless of whether system is loaded. Each exported symbol of the system will have a function with same name + ~ and when called will asdf:load-system the system and make all symbols of the system available.

Package

lib~.

Source

system.lisp.

Methods
Method: make-system ((sys string) &key import-symbols-at-startup)

Given a system name and a keyword for import-symbols-at-startup, make an instance of system.

Method: make-system ((sys list) &key)

Given a list of (system-name import-symbols-at-startup), make an instance of system.

Generic Reader: method-obj (object)
Generic Writer: (setf method-obj) (object)
Package

lib~.

Methods
Reader Method: method-obj ((method-detail method-detail))
Writer Method: (setf method-obj) ((method-detail method-detail))

The method object.

Source

methods.lisp.

Target Slot

method-obj.

Generic Reader: origin-packages (object)
Package

lib~.

Methods
Reader Method: origin-packages ((lib-symbol lib-symbol))

automatically generated reader method

Source

lib-symbol.lisp.

Target Slot

origin-packages.

Generic Writer: (setf origin-packages) (object)
Package

lib~.

Methods
Writer Method: (setf origin-packages) ((lib-symbol lib-symbol))

automatically generated writer method

Source

lib-symbol.lisp.

Target Slot

origin-packages.

Generic Reader: parent (object)
Package

lib~.

Methods
Reader Method: parent ((lib-symbol lib-symbol))

automatically generated reader method

Source

lib-symbol.lisp.

Target Slot

parent.

Reader Method: parent ((lib-hierarchy-branch lib-hierarchy-branch))

A link to the package-tree of this branch (this will be either std-tree or lib-tree).

Source

lib-hierarchy.lisp.

Target Slot

parent.

Generic Writer: (setf parent) (object)
Package

lib~.

Methods
Writer Method: (setf parent) ((lib-symbol lib-symbol))

automatically generated writer method

Source

lib-symbol.lisp.

Target Slot

parent.

Writer Method: (setf parent) ((lib-hierarchy-branch lib-hierarchy-branch))

A link to the package-tree of this branch (this will be either std-tree or lib-tree).

Source

lib-hierarchy.lisp.

Target Slot

parent.

Generic Reader: path (object)
Generic Writer: (setf path) (object)
Package

lib~.

Methods
Reader Method: path ((lib-hierarchy-branch lib-hierarchy-branch))
Writer Method: (setf path) ((lib-hierarchy-branch lib-hierarchy-branch))

Path name for the branch. This corresponds to a package, or
rather a package is created that corresponds to every branch.

Source

lib-hierarchy.lisp.

Target Slot

path.

Generic Reader: path-desc (object)
Generic Writer: (setf path-desc) (object)
Package

lib~.

Methods
Reader Method: path-desc ((lib-hierarchy-branch lib-hierarchy-branch))
Writer Method: (setf path-desc) ((lib-hierarchy-branch lib-hierarchy-branch))

Description of the path or package.

Source

lib-hierarchy.lisp.

Target Slot

path-desc.

Generic Reader: pkg-name (object)
Package

lib~.

Methods
Reader Method: pkg-name ((origin-package origin-package))

automatically generated reader method

Source

origin-package.lisp.

Target Slot

pkg-name.

Generic Writer: (setf pkg-name) (object)
Package

lib~.

Methods
Writer Method: (setf pkg-name) ((origin-package origin-package))

automatically generated writer method

Source

origin-package.lisp.

Target Slot

pkg-name.

Generic Reader: specializers (object)
Generic Writer: (setf specializers) (object)
Package

lib~.

Methods
Reader Method: specializers ((method-detail method-detail))
Writer Method: (setf specializers) ((method-detail method-detail))

Method lambda list.

Source

methods.lisp.

Target Slot

specializers.

Generic Reader: sym-name (object)
Generic Writer: (setf sym-name) (object)
Package

lib~.

Methods
Reader Method: sym-name ((lib-symbol lib-symbol))
Writer Method: (setf sym-name) ((lib-symbol lib-symbol))

The symbol name of the source symbol

Source

lib-symbol.lisp.

Target Slot

sym-name.

Generic Reader: syms (object)
Generic Writer: (setf syms) (object)
Package

lib~.

Methods
Reader Method: syms ((lib-symbol lib-symbol))
Writer Method: (setf syms) ((lib-symbol lib-symbol))

The actual symbols, corresponding to sym-name, one for each origin-packages.
First one is named the same as sym-name, subsequent ones appended an increasing number, from 1. If lazy-interned, then appended ~ or {.n}~

Source

lib-symbol.lisp.

Target Slot

syms.

Generic Reader: system-import-symbols-at-startup (object)
Package

lib~.

Methods
Reader Method: system-import-symbols-at-startup ((system system))

automatically generated reader method

Source

system.lisp.

Target Slot

import-symbols-at-startup.

Generic Writer: (setf system-import-symbols-at-startup) (object)
Package

lib~.

Methods
Writer Method: (setf system-import-symbols-at-startup) ((system system))

automatically generated writer method

Source

system.lisp.

Target Slot

import-symbols-at-startup.

Generic Function: system-loaded (object)
Package

lib~.

Methods
Method: system-loaded ((obj (eql nil)))
Source

system.lisp.

Reader Method: system-loaded ((system system))

automatically generated reader method

Source

system.lisp.

Target Slot

loaded.

Generic Writer: (setf system-loaded) (object)
Package

lib~.

Methods
Writer Method: (setf system-loaded) ((system system))

automatically generated writer method

Source

system.lisp.

Target Slot

loaded.

Generic Function: system-name (object)
Package

lib~.

Methods
Method: system-name ((obj (eql nil)))
Source

system.lisp.

Reader Method: system-name ((system system))

automatically generated reader method

Source

system.lisp.

Target Slot

name.

Generic Writer: (setf system-name) (object)
Package

lib~.

Methods
Writer Method: (setf system-name) ((system system))

automatically generated writer method

Source

system.lisp.

Target Slot

name.


Next: , Previous: , Up: Internals   [Contents][Index]

6.2.5 Classes

Class: gf-tree

A tree for a generic function including its methods and their lambda lists.

Package

lib~.

Source

methods.lisp.

Direct methods
Direct slots
Slot: gf

The generic function object

Initargs

:gf

Readers

gf.

Writers

(setf gf).

Slot: gmethods

Methods and lambda lists of the gm.

Type

lib~::list-of-method-details

Initargs

:gmethods

Readers

gmethods.

Writers

(setf gmethods).

Class: lib-hierarchy

A library hierarchy (a.k.a. package-tree) is defined with this type. It is essentially a list.

Package

lib~.

Source

lib-hierarchy.lisp.

Direct methods
Direct slots
Slot: branches
Type

list

Initargs

:branches

Readers

branches.

Writers

(setf branches).

Slot: name
Initargs

:name

Readers

get-name.

Writers

(setf get-name).

Class: lib-hierarchy-branch

A branch of a lib-hierarchy / package tree.
A branch is e.g.:
("LIB.CONT.LIST.CREATE" "List creation"
(("CIRCULAR-LIST" ("alexandria" "ALEXANDRIA")) ; symbols list start here ("CONS" (NIL "CL"))
("COPY-LIST" (NIL "CL"))
...

Package

lib~.

Source

lib-hierarchy.lisp.

Direct methods
Direct slots
Slot: path

Path name for the branch. This corresponds to a package, or
rather a package is created that corresponds to every branch.

Type

string

Initargs

:path

Readers

path.

Writers

(setf path).

Slot: parent

A link to the package-tree of this branch (this will be either std-tree or lib-tree).

Type

lib~::lib-hierarchy

Initargs

:parent

Readers

parent.

Writers

(setf parent).

Slot: path-desc

Description of the path or package.

Type

string

Initargs

:path-desc

Readers

path-desc.

Writers

(setf path-desc).

Slot: lib-symbols
Type

lib~::list-of-lib-symbols

Initargs

:lib-symbols

Readers

lib-symbols.

Writers

(setf lib-symbols).

Class: lib-symbol

When there are multiple sys-pkg, multiple symbols will be created in the branch, first one with the symbol’s name, subsequent ones having a {.N}~, N in (1,2..). Also there’s a lazy interning process. If a system is not loaded, then its symbols will not be imported, but rather a symbol of the same name + ~ appended, and tied to a closure that’ll load the system then import all symbols from the system to their branches.

Package

lib~.

Source

lib-symbol.lisp.

Direct methods
Direct slots
Slot: sym-name

The symbol name of the source symbol

Type

string

Initargs

:sym-name

Readers

sym-name.

Writers

(setf sym-name).

Slot: origin-packages
Type

lib~::list-of-origin-packages

Initargs

:origin-packages

Readers

origin-packages.

Writers

(setf origin-packages).

Slot: parent
Type

lib~::lib-hierarchy-branch

Initargs

:parent

Readers

parent.

Writers

(setf parent).

Slot: full-desc

Hierarchy path + all namespace descriptions of the symbol combined.

Type

string

Initargs

:full-desc

Readers

full-desc.

Writers

(setf full-desc).

Slot: syms

The actual symbols, corresponding to sym-name, one for each origin-packages.
First one is named the same as sym-name, subsequent ones appended an increasing number, from 1. If lazy-interned, then appended ~ or {.n}~

Type

lib~::list-of-symbols

Readers

syms.

Writers

(setf syms).

Class: method-detail

Details of a method.

Package

lib~.

Source

methods.lisp.

Direct methods
Direct slots
Slot: method-obj

The method object.

Type

method

Initargs

:method-obj

Readers

method-obj.

Writers

(setf method-obj).

Slot: specializers

Method lambda list.

Type

list

Initargs

:specializers

Readers

specializers.

Writers

(setf specializers).

Class: origin-package

Defines where a package comes from. Used by new symbols interned in the hierarchy so that we can point to the actual place.

Package

lib~.

Source

origin-package.lisp.

Direct methods
Direct slots
Slot: pkg-name
Initargs

:pkg-name

Readers

pkg-name.

Writers

(setf pkg-name).

Slot: system

The system that contains this package

Initargs

:system

Readers

containing-system.

Writers

(setf containing-system).

Class: system

Objects of this class defines an asdf system and how it will be regarded during and after lib-helper load.

Package

lib~.

Source

system.lisp.

Direct methods
Direct slots
Slot: name
Initargs

:name

Readers

system-name.

Writers

(setf system-name).

Slot: import-symbols-at-startup
Initargs

:import-symbols-at-startup

Readers

system-import-symbols-at-startup.

Writers

(setf system-import-symbols-at-startup).

Slot: loaded
Readers

system-loaded.

Writers

(setf system-loaded).


Previous: , Up: Internals   [Contents][Index]

6.2.6 Types

Type: list-of-lib-symbols ()
Package

lib~.

Source

lib-symbol.lisp.

Type: list-of-method-details ()
Package

lib~.

Source

methods.lisp.

Type: list-of-origin-packages ()
Package

lib~.

Source

lib-symbol.lisp.

Type: list-of-symbols ()
Package

lib~.

Source

lib-symbol.lisp.


Appendix A Indexes


Next: , Previous: , Up: Indexes   [Contents][Index]

A.1 Concepts


Next: , Previous: , Up: Indexes   [Contents][Index]

A.2 Functions

Jump to:   (  
A   B   C   D   F   G   I   L   M   O   P   R   S   W  
Index Entry  Section

(
(setf branches): Private generic functions
(setf branches): Private generic functions
(setf containing-system): Private generic functions
(setf containing-system): Private generic functions
(setf full-desc): Private generic functions
(setf full-desc): Private generic functions
(setf get-name): Private generic functions
(setf get-name): Private generic functions
(setf gf): Private generic functions
(setf gf): Private generic functions
(setf gmethods): Private generic functions
(setf gmethods): Private generic functions
(setf lib-symbols): Private generic functions
(setf lib-symbols): Private generic functions
(setf method-obj): Private generic functions
(setf method-obj): Private generic functions
(setf origin-packages): Private generic functions
(setf origin-packages): Private generic functions
(setf parent): Private generic functions
(setf parent): Private generic functions
(setf parent): Private generic functions
(setf path): Private generic functions
(setf path): Private generic functions
(setf path-desc): Private generic functions
(setf path-desc): Private generic functions
(setf pkg-name): Private generic functions
(setf pkg-name): Private generic functions
(setf specializers): Private generic functions
(setf specializers): Private generic functions
(setf sym-name): Private generic functions
(setf sym-name): Private generic functions
(setf syms): Private generic functions
(setf syms): Private generic functions
(setf system-import-symbols-at-startup): Private generic functions
(setf system-import-symbols-at-startup): Private generic functions
(setf system-loaded): Private generic functions
(setf system-loaded): Private generic functions
(setf system-name): Private generic functions
(setf system-name): Private generic functions

A
activate-system: Private ordinary functions
add-sub-packages: Private ordinary functions
add-to-package-lists: Public ordinary functions
all-elements-are-lib-symbols: Private ordinary functions
all-elements-are-method-details: Private ordinary functions
all-elements-are-origin-packages: Private ordinary functions
all-elements-are-symbols: Private ordinary functions
apropos-lib: Public ordinary functions
apropos-lib: Public ordinary functions
apropos-lib: Public ordinary functions
asdf-system-loaded: Private ordinary functions

B
branches: Private generic functions
branches: Private generic functions

C
containing-system: Private generic functions
containing-system: Private generic functions
convert: Private generic functions
convert: Private generic functions
convert: Private generic functions
convert: Private generic functions
convert: Private generic functions

D
define-sub-package-syms: Private ordinary functions
delete-hierarchy: Private ordinary functions
delete-system-aux: Public ordinary functions
delete-this-hierarchy: Public ordinary functions
delete-this-hierarchy: Public ordinary functions
delete-this-system: Public ordinary functions
delete-this-system: Public ordinary functions

F
filter-external-syms: Private ordinary functions
find-lib-aux: Private ordinary functions
find-syms: Public ordinary functions
find-syms: Public ordinary functions
find-syms: Public ordinary functions
format-package-tree-syms: Private ordinary functions
full-desc: Private generic functions
full-desc: Private generic functions
Function, activate-system: Private ordinary functions
Function, add-sub-packages: Private ordinary functions
Function, add-to-package-lists: Public ordinary functions
Function, all-elements-are-lib-symbols: Private ordinary functions
Function, all-elements-are-method-details: Private ordinary functions
Function, all-elements-are-origin-packages: Private ordinary functions
Function, all-elements-are-symbols: Private ordinary functions
Function, apropos-lib: Public ordinary functions
Function, apropos-lib: Public ordinary functions
Function, apropos-lib: Public ordinary functions
Function, asdf-system-loaded: Private ordinary functions
Function, define-sub-package-syms: Private ordinary functions
Function, delete-hierarchy: Private ordinary functions
Function, delete-system-aux: Public ordinary functions
Function, delete-this-hierarchy: Public ordinary functions
Function, delete-this-hierarchy: Public ordinary functions
Function, delete-this-system: Public ordinary functions
Function, delete-this-system: Public ordinary functions
Function, filter-external-syms: Private ordinary functions
Function, find-lib-aux: Private ordinary functions
Function, find-syms: Public ordinary functions
Function, find-syms: Public ordinary functions
Function, find-syms: Public ordinary functions
Function, format-package-tree-syms: Private ordinary functions
Function, generate-system-symbols: Private ordinary functions
Function, get-class-methods: Private ordinary functions
Function, get-class-methods-unique-names: Private ordinary functions
Function, get-generic-functions: Private ordinary functions
Function, get-package-external-symbols: Private ordinary functions
Function, get-package-names: Public ordinary functions
Function, get-package-names: Public ordinary functions
Function, get-package-names-aux: Public ordinary functions
Function, get-parent-name: Private ordinary functions
Function, get-struct-externals: Private ordinary functions
Function, get-sub-packages: Private ordinary functions
Function, get-sym-desc: Private ordinary functions
Function, get-symbol-node: Private ordinary functions
Function, get-target-sym-name: Private ordinary functions
Function, import-and-get-symbols: Private ordinary functions
Function, intern-later: Private ordinary functions
Function, intern-now: Private ordinary functions
Function, lazy-intern: Private ordinary functions
Function, lib-symbolp: Private ordinary functions
Function, make-origin-package: Private ordinary functions
Function, match-with-symbol: Private ordinary functions
Function, maybe-load: Private ordinary functions
Function, maybe-load-system-at-startup: Private ordinary functions
Function, method-detailp: Private ordinary functions
Function, mkstr: Private ordinary functions
Function, origin-packagep: Private ordinary functions
Function, packages: Public ordinary functions
Function, packages: Public ordinary functions
Function, packages-aux: Public ordinary functions
Function, prepare-libs: Private ordinary functions
Function, prepare-std-libs: Private ordinary functions
Function, rename-import-syms: Private ordinary functions
Function, set-full-desc: Private ordinary functions
Function, setup-packages: Public ordinary functions
Function, should-load-at-startup: Private ordinary functions
Function, symbol-count: Public ordinary functions
Function, symbol-count: Public ordinary functions
Function, symbol-count: Public ordinary functions

G
generate-system-symbols: Private ordinary functions
Generic Function, (setf branches): Private generic functions
Generic Function, (setf containing-system): Private generic functions
Generic Function, (setf full-desc): Private generic functions
Generic Function, (setf get-name): Private generic functions
Generic Function, (setf gf): Private generic functions
Generic Function, (setf gmethods): Private generic functions
Generic Function, (setf lib-symbols): Private generic functions
Generic Function, (setf method-obj): Private generic functions
Generic Function, (setf origin-packages): Private generic functions
Generic Function, (setf parent): Private generic functions
Generic Function, (setf path): Private generic functions
Generic Function, (setf path-desc): Private generic functions
Generic Function, (setf pkg-name): Private generic functions
Generic Function, (setf specializers): Private generic functions
Generic Function, (setf sym-name): Private generic functions
Generic Function, (setf syms): Private generic functions
Generic Function, (setf system-import-symbols-at-startup): Private generic functions
Generic Function, (setf system-loaded): Private generic functions
Generic Function, (setf system-name): Private generic functions
Generic Function, branches: Private generic functions
Generic Function, containing-system: Private generic functions
Generic Function, convert: Private generic functions
Generic Function, full-desc: Private generic functions
Generic Function, get-name: Private generic functions
Generic Function, gf: Private generic functions
Generic Function, gmethods: Private generic functions
Generic Function, lib-symbols: Private generic functions
Generic Function, make-system: Private generic functions
Generic Function, method-obj: Private generic functions
Generic Function, origin-packages: Private generic functions
Generic Function, parent: Private generic functions
Generic Function, path: Private generic functions
Generic Function, path-desc: Private generic functions
Generic Function, pkg-name: Private generic functions
Generic Function, specializers: Private generic functions
Generic Function, sym-name: Private generic functions
Generic Function, syms: Private generic functions
Generic Function, system-import-symbols-at-startup: Private generic functions
Generic Function, system-loaded: Private generic functions
Generic Function, system-name: Private generic functions
get-class-methods: Private ordinary functions
get-class-methods-unique-names: Private ordinary functions
get-generic-functions: Private ordinary functions
get-name: Private generic functions
get-name: Private generic functions
get-package-external-symbols: Private ordinary functions
get-package-names: Public ordinary functions
get-package-names: Public ordinary functions
get-package-names-aux: Public ordinary functions
get-parent-name: Private ordinary functions
get-struct-externals: Private ordinary functions
get-sub-packages: Private ordinary functions
get-sym-desc: Private ordinary functions
get-symbol-node: Private ordinary functions
get-target-sym-name: Private ordinary functions
gf: Private generic functions
gf: Private generic functions
gmethods: Private generic functions
gmethods: Private generic functions

I
import-and-get-symbols: Private ordinary functions
initialize-instance: Public standalone methods
intern-later: Private ordinary functions
intern-now: Private ordinary functions

L
lazy-intern: Private ordinary functions
lib-symbolp: Private ordinary functions
lib-symbols: Private generic functions
lib-symbols: Private generic functions

M
Macro, with-system: Private macros
make-origin-package: Private ordinary functions
make-system: Private generic functions
make-system: Private generic functions
make-system: Private generic functions
match-with-symbol: Private ordinary functions
maybe-load: Private ordinary functions
maybe-load-system-at-startup: Private ordinary functions
Method, (setf branches): Private generic functions
Method, (setf containing-system): Private generic functions
Method, (setf full-desc): Private generic functions
Method, (setf get-name): Private generic functions
Method, (setf gf): Private generic functions
Method, (setf gmethods): Private generic functions
Method, (setf lib-symbols): Private generic functions
Method, (setf method-obj): Private generic functions
Method, (setf origin-packages): Private generic functions
Method, (setf parent): Private generic functions
Method, (setf parent): Private generic functions
Method, (setf path): Private generic functions
Method, (setf path-desc): Private generic functions
Method, (setf pkg-name): Private generic functions
Method, (setf specializers): Private generic functions
Method, (setf sym-name): Private generic functions
Method, (setf syms): Private generic functions
Method, (setf system-import-symbols-at-startup): Private generic functions
Method, (setf system-loaded): Private generic functions
Method, (setf system-name): Private generic functions
Method, branches: Private generic functions
Method, containing-system: Private generic functions
Method, convert: Private generic functions
Method, convert: Private generic functions
Method, convert: Private generic functions
Method, convert: Private generic functions
Method, full-desc: Private generic functions
Method, get-name: Private generic functions
Method, gf: Private generic functions
Method, gmethods: Private generic functions
Method, initialize-instance: Public standalone methods
Method, lib-symbols: Private generic functions
Method, make-system: Private generic functions
Method, make-system: Private generic functions
Method, method-obj: Private generic functions
Method, origin-packages: Private generic functions
Method, parent: Private generic functions
Method, parent: Private generic functions
Method, path: Private generic functions
Method, path-desc: Private generic functions
Method, pkg-name: Private generic functions
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, print-object: Public standalone methods
Method, specializers: Private generic functions
Method, sym-name: Private generic functions
Method, syms: Private generic functions
Method, system-import-symbols-at-startup: Private generic functions
Method, system-loaded: Private generic functions
Method, system-loaded: Private generic functions
Method, system-name: Private generic functions
Method, system-name: Private generic functions
method-detailp: Private ordinary functions
method-obj: Private generic functions
method-obj: Private generic functions
mkstr: Private ordinary functions

O
origin-packagep: Private ordinary functions
origin-packages: Private generic functions
origin-packages: Private generic functions

P
packages: Public ordinary functions
packages: Public ordinary functions
packages-aux: Public ordinary functions
parent: Private generic functions
parent: Private generic functions
parent: Private generic functions
path: Private generic functions
path: Private generic functions
path-desc: Private generic functions
path-desc: Private generic functions
pkg-name: Private generic functions
pkg-name: Private generic functions
prepare-libs: Private ordinary functions
prepare-std-libs: Private ordinary functions
print-object: Public standalone methods
print-object: Public standalone methods
print-object: Public standalone methods
print-object: Public standalone methods
print-object: Public standalone methods
print-object: Public standalone methods
print-object: Public standalone methods

R
rename-import-syms: Private ordinary functions

S
set-full-desc: Private ordinary functions
setup-packages: Public ordinary functions
should-load-at-startup: Private ordinary functions
specializers: Private generic functions
specializers: Private generic functions
sym-name: Private generic functions
sym-name: Private generic functions
symbol-count: Public ordinary functions
symbol-count: Public ordinary functions
symbol-count: Public ordinary functions
syms: Private generic functions
syms: Private generic functions
system-import-symbols-at-startup: Private generic functions
system-import-symbols-at-startup: Private generic functions
system-loaded: Private generic functions
system-loaded: Private generic functions
system-loaded: Private generic functions
system-name: Private generic functions
system-name: Private generic functions
system-name: Private generic functions

W
with-system: Private macros

Jump to:   (  
A   B   C   D   F   G   I   L   M   O   P   R   S   W  

Next: , Previous: , Up: Indexes   [Contents][Index]

A.3 Variables

Jump to:   *   +   <  
B   F   G   I   L   M   N   O   P   S  
Index Entry  Section

*
*hierarchies*: Public special variables
*lib-package-test*: Private special variables
*lib-package-tree*: Public special variables
*skipped-classes-in-check*: Private special variables
*std-package-tree*: Public special variables
*system-table*: Public special variables

+
+doc-sys+: Private special variables

<
<gf-tree>: Private special variables
<lib-hierarchy-branch>: Private special variables
<lib-hierarchy>: Private special variables
<lib-symbol>: Private special variables
<list>: Private special variables
<method-detail>: Private special variables
<symbol>: Private special variables

B
branches: Private classes

F
full-desc: Private classes

G
gf: Private classes
gmethods: Private classes

I
import-symbols-at-startup: Private classes

L
lib-symbols: Private classes
loaded: Private classes

M
method-obj: Private classes

N
name: Private classes
name: Private classes

O
origin-packages: Private classes

P
parent: Private classes
parent: Private classes
path: Private classes
path-desc: Private classes
pkg-name: Private classes

S
Slot, branches: Private classes
Slot, full-desc: Private classes
Slot, gf: Private classes
Slot, gmethods: Private classes
Slot, import-symbols-at-startup: Private classes
Slot, lib-symbols: Private classes
Slot, loaded: Private classes
Slot, method-obj: Private classes
Slot, name: Private classes
Slot, name: Private classes
Slot, origin-packages: Private classes
Slot, parent: Private classes
Slot, parent: Private classes
Slot, path: Private classes
Slot, path-desc: Private classes
Slot, pkg-name: Private classes
Slot, specializers: Private classes
Slot, sym-name: Private classes
Slot, syms: Private classes
Slot, system: Private classes
Special Variable, *hierarchies*: Public special variables
Special Variable, *lib-package-test*: Private special variables
Special Variable, *lib-package-tree*: Public special variables
Special Variable, *skipped-classes-in-check*: Private special variables
Special Variable, *std-package-tree*: Public special variables
Special Variable, *system-table*: Public special variables
Special Variable, +doc-sys+: Private special variables
Special Variable, <gf-tree>: Private special variables
Special Variable, <lib-hierarchy-branch>: Private special variables
Special Variable, <lib-hierarchy>: Private special variables
Special Variable, <lib-symbol>: Private special variables
Special Variable, <list>: Private special variables
Special Variable, <method-detail>: Private special variables
Special Variable, <symbol>: Private special variables
specializers: Private classes
sym-name: Private classes
syms: Private classes
system: Private classes

Jump to:   *   +   <  
B   F   G   I   L   M   N   O   P   S  

Previous: , Up: Indexes   [Contents][Index]

A.4 Data types

Jump to:   C   F   G   K   L   M   O   P   S   T   U  
Index Entry  Section

C
Class, gf-tree: Private classes
Class, lib-hierarchy: Private classes
Class, lib-hierarchy-branch: Private classes
Class, lib-symbol: Private classes
Class, method-detail: Private classes
Class, origin-package: Private classes
Class, system: Private classes
convert.lisp: The lib-helper/generics/convert․lisp file
converters.lisp: The lib-helper/types/converters․lisp file

F
File, convert.lisp: The lib-helper/generics/convert․lisp file
File, converters.lisp: The lib-helper/types/converters․lisp file
File, known-libs.lisp: The lib-helper/known-libs․lisp file
File, lib-defs.lisp: The lib-helper/libs/lib-defs․lisp file
File, lib-helper.asd: The lib-helper/lib-helper․asd file
File, lib-hierarchy.lisp: The lib-helper/types/lib-hierarchy․lisp file
File, lib-symbol.lisp: The lib-helper/types/lib-symbol․lisp file
File, methods.lisp: The lib-helper/types/methods․lisp file
File, origin-package.lisp: The lib-helper/types/origin-package․lisp file
File, package.lisp: The lib-helper/package․lisp file
File, packages-common.lisp: The lib-helper/packages-common․lisp file
File, packages-lib.lisp: The lib-helper/libs/packages-lib․lisp file
File, packages-std.lisp: The lib-helper/std-lib/packages-std․lisp file
File, std-defs.lisp: The lib-helper/std-lib/std-defs․lisp file
File, system-helpers.lisp: The lib-helper/system-helpers․lisp file
File, system.lisp: The lib-helper/types/system․lisp file
File, utils.lisp: The lib-helper/utils․lisp file

G
generics: The lib-helper/generics module
gf-tree: Private classes

K
known-libs.lisp: The lib-helper/known-libs․lisp file

L
lib: The lib package
lib-defs.lisp: The lib-helper/libs/lib-defs․lisp file
lib-helper: The lib-helper system
lib-helper-asd: The lib-helper-asd package
lib-helper.asd: The lib-helper/lib-helper․asd file
lib-hierarchy: Private classes
lib-hierarchy-branch: Private classes
lib-hierarchy.lisp: The lib-helper/types/lib-hierarchy․lisp file
lib-symbol: Private classes
lib-symbol.lisp: The lib-helper/types/lib-symbol․lisp file
libs: The lib-helper/libs module
lib~: The lib~ package
list-of-lib-symbols: Private types
list-of-method-details: Private types
list-of-origin-packages: Private types
list-of-symbols: Private types

M
method-detail: Private classes
methods.lisp: The lib-helper/types/methods․lisp file
Module, generics: The lib-helper/generics module
Module, libs: The lib-helper/libs module
Module, std-lib: The lib-helper/std-lib module
Module, types: The lib-helper/types module

O
origin-package: Private classes
origin-package.lisp: The lib-helper/types/origin-package․lisp file

P
Package, lib: The lib package
Package, lib-helper-asd: The lib-helper-asd package
Package, lib~: The lib~ package
Package, std: The std package
package.lisp: The lib-helper/package․lisp file
packages-common.lisp: The lib-helper/packages-common․lisp file
packages-lib.lisp: The lib-helper/libs/packages-lib․lisp file
packages-std.lisp: The lib-helper/std-lib/packages-std․lisp file

S
std: The std package
std-defs.lisp: The lib-helper/std-lib/std-defs․lisp file
std-lib: The lib-helper/std-lib module
system: Private classes
System, lib-helper: The lib-helper system
system-helpers.lisp: The lib-helper/system-helpers․lisp file
system.lisp: The lib-helper/types/system․lisp file

T
Type, list-of-lib-symbols: Private types
Type, list-of-method-details: Private types
Type, list-of-origin-packages: Private types
Type, list-of-symbols: Private types
types: The lib-helper/types module

U
utils.lisp: The lib-helper/utils․lisp file

Jump to:   C   F   G   K   L   M   O   P   S   T   U