Commit f8302939 authored by Francois-Rene Rideau's avatar Francois-Rene Rideau
Browse files

More draft slides

parent 64ca5215
......@@ -55,16 +55,18 @@ sub-bullet under a major header.
** COMMENT Two slides here, for context
*** "build system": compile source files
*** *build system*: compile source files
**** a bit like =make= for C or =ant= for Java
*** "in image": also load software
*** *in image*: also load software
**** totally unlike either =make= or =ant=
**** maintain long-lived system state
*** "declarative": describe system dependencies
*** *declarative*: describe system dependencies
**** not imperative instructions on how to build
*** specialized: oriented toward Lisp software
*** *specialized*: oriented toward Lisp software
**** not for arbitrary tasks with dependencies
*** a key piece of CL community plumbing
*** *extensible*: can learn new classes of files
**** not for arbitrary tasks with dependencies
*** a key piece of CL *community* plumbing
** /Evolving/ ASDF
*** Fixing up ASDF
......@@ -150,6 +152,78 @@ sub-bullet under a major header.
+ Please don't skimp on the high-order numbers or ASDF won't detect incompatibilities
+ Say what library versions it depends on
* Fixing ASDF
** What was wrong with ASDF
*** pathname limitations
*** difficult configuration
*** dependency bugs
*** fasl mess
*** portability
*** missing extension hooks
** Pathname Limitations
*** #p"foo/bar" can never be portable. "foo/bar" can be.
*** (:file "foo") ==> #p"foo.lisp"
*** (:file "") ==> before: #p"" ASDF2: #p""
*** (:file "foo-V1.2") ==> before: #p"foo-V1.2" ASDF2: #p"foo-V1.2.lisp"
*** (:file "foo/bar") ==> before: non portable ASDF2: #p"foo/bar.lisp"
***** (:file "foo-bar" :pathname #.(merge-pathnames (make-pathname :name "bar" :directory '(:relative "foo") :type "lisp" :defaults \*load-truename\*) \*load-truename\*))
*** (:static-file "README") ==> #p"README"
*** (:file "README" :pathname #p"README") ==> before: #p"README.lisp" ASDF2: #p"README"
** Pathname fixes
*** CL pathname FAIL: underspecified semantics means not portably usable
**** Solution: provide a portable *abstraction*
***** parse strings into "relative pathnames with optionally specified type"
*** ASDF FAIL: it was hard to get it actually right
**** Solution: make it hard for the user to get it wrong
*** ASDF FAIL: it was hard to know you were wrong
**** Solution: better fail early for everyone than pass as working for some
*** ASDF2 is much better, but still trips users
**** Solution: keep improving code, error cases, documentation.
** Configuration Difficulties
** Output locations
** Dependency Bugs
** Portability
** Missing Extension Hooks
*** POIU (Parallel extension) needed to redefine some classes and methods
*** ITA needed some extensions for printing compilation progress.
* Hot-patching ASDF
** COMMENT 4 slides here
......@@ -326,21 +400,103 @@ sub-bullet under a major header.
*** =
** COMMENT Pathname Limitations
** Unupgradability of ASDF
*** #p"foo/bar" can never be portable. "foo/bar" can be.
**** To upgrade ASDF...
**** (:file "foo") ==> #p"foo.lisp"
***** ASDF1: deep configuration before startup, in every implementation, every program
**** (:file "") ==> before: #p"" ASDF2: #p""
***** ASDF2: just install ASDF, no configuration unless non-standard location
**** (:file "foo-V1.2") ==> before: #p"foo-V1.2" ASDF2: #p"foo-V1.2.lisp"
**** you may rely on a feature...
**** (:file "foo/bar") ==> before: non portable ASDF2: #p"foo/bar.lisp"
***** ASDF1: only if all supported implementations have upgraded
***** (:file "foo-bar" :pathname #.(merge-pathnames (make-pathname :name "bar" :directory '(:relative "foo") :type "lisp" :defaults \*load-truename\*) \*load-truename\*))
***** ASDF2: anytime, ship recent ASDF if a feature isn't universally installed
**** it brings value for an implementation to upgrade...
***** ASDF1: only after everybody else agreed to upgrade
***** ASDF2: anytime, or the implementation will lag behind
**** After a given implementation upgrades...
***** ASDF1: more disuniformity in features available in installed base
***** ASDF2: more uniformity in features available in installed base
** First, fix upgrade incentives
*** Dynamics of coordination
**** In a stable process, each iteration provides more coordination than it requires
*** Allowing for divergence creates an incentive towards convergence
** General Lessons Learned (Summary)
**** ASDF is an ``in-image'' build system managing systems that are compiled and loaded
in the current {\CL} image
**** CL makes dynamic data upgrade extraordinarily easy.
**** CL support for hot upgrade of code may exist but is anything but seamless
**** the general problem with {\CL} is that its semantics are defined in terms
of irreversible side-effects to global data structures in the current image
**** Anything that can be provided as an extension
should be provided as an extension and left out of the core
**** We can't simply be ``transparent'' with respect to semantic discrepancies
between underlying implementations; we must abstract those discrepancies away.
**** have the person who knows write the configuration, not the person who doesn't
**** good data structures and algorithms matter
**** thou shalt tailor thy datastructures to the target problem
**** Without the test suite, we'd be nowhere.
** Upgrading ASDF
*** Mostly easy: upgrading data, with =update-instance-for-redefined-class=
**** "pull" model: everything sees the new schema. No "push" stages.
*** Hard: changing a function's signature
**** CLOS won't even let you do it.
*** Rebinding (=fmakunbound=) vs Shadowing (=unintern= in all packages)
**** No "rebind to transitional version that wraps the new version, then shadow"
*** Harder: modified functions are in the continuation of =compile-file= or =load=
**** can't update continuation frames; they have no first-class names to be rebound.
**** Worse if multithreaded: no atomicity
** What is still wrong with ASDF
*** no side-effect isolation
**** see XCVB
*** configuration still harder than ideal
**** we tried to accommodate every previous extension variant
**** instead, we should have authoritatively standardized good defaults?
*** dependency bugs remain
**** Some actually wanted by some people. Others
*** FASLs still not separate enough
**** (:static-file "README") ==> #p"README"
**** bit us with ASDF 2.006
**** (:file "README" :pathname #p"README") ==> before: #p"README.lisp" ASDF2: #p"README"
*** hard to extend
*** ASDF2 is still not universally available
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment