>>48
Not sure what you want to know about CL, but it has:
- value and function namespaces (separate), so Lisp-1 vs Lisp-2, or to put it simpler, a symbol has both a value and a functional value
- many other namespaces also exist, such as symbols may define types, classes, structures, ... ; A good implementation will allow you to view all this interactively, but you can also inspect all of these programatically and likely portably for most cases. Defining some extra namespace on a symbol can be done rather easily and is a typical 'pattern' the CL programmer uses (it may be too simple to be called a pattern) - it's like defining some documented interface to access some namespace, then just using some hashtable behind the scenes to associate symbols to values.
- symbols belong to packages, but a symbol can also be uninterned (such as gensyms, but you can also make your own) if it belongs to no package. Symbol comparison is a pointer comparison (
eq), and symbols in the same package are
equal on virtue of the interning process and how the reader works.
- packages themselves can be modified at runtime, the same with symbols and various things you can access about a symbol, they're just objects in their own right
- there's also the whole lexical and dynamic scope, which can be controlled very exactly using declares (but also has reasonable defaults)
- fancier forms of handling the build-process is not described in the standard, you have your
compile and
compile-file functions which let you compile either functions or larger units of code (there's a lot of other functions, macros and special forms allowing very tight control of evaluation, compilation, read-time and compilation units). Typically you implement the build process via
systems such as
ASDF which build on top of CL, but may also integrate with the implementation or environment (mostly keeping portability, but some unportable stuff is to be accepted as yoy might also want to be dealing with a bit of system-specific stuff when compiling large projects)
- Executable files and other binary modules are not defined in the standard, but some implementations support either compiling/linking
FASLs (Lisp's object files, post-compilation) into executables, while others support dumping the in-memory image after some sanitizations to an executable (after specifying an entrypoint function)
- multimethods? CLOS supports them and allows great flexibility in their ordering, execution, wrapping, etc. CLOS is implemented metacircularily in MOP, which is much wider than CLOS and allows defining OO systems in general. It's a really wonderful idea and you should read AMOP to understand it better.
tl;dr: symbols, packages, scope, systems, compile/read/run-time, executables/object-files, CLOS/MOP are all separate. You have fine control over all of them, but there's also known conventions about handling them and most CL programmers use them when writing larger projects. MOP, systems (more complicated building/compilation of files), executables are not defined in the standard, but MOP is in most implementations, systems are also supported by most implementations and system support may even be defined portably(not that it is in most cases, I suggest looking at
ASDF, but it's hardly the only one, there's also another which allow parallel building, and some older ones which you might use out of habit)), and executable/module-generation is completly implementation specific.
tl;tl;dr: systems and packages are most certainly not one and the same, even if in some languages they are mixed. While it's possible to do what you do in C with
#include, in CL you tend to have compilation units for larger projects with specific build orders. Some people allergic to systems may choose to just concatenate all files, but that's a bit silly, however if you want an example, look at:
http://www.cs.utexas.edu/~mfkb/km/
If you want an example of how to write larger projects, just look at any serious library, they'll all follow the pattern of a package file, a system file and specific files for the actual code (sometimes with more fancier dependences between them).