1 | other things to check out: |
---|
2 | virtualenv (python) (see EOF) |
---|
3 | (single-path) alt repo script: http://paste.call-cc.org/?id=fc11a30f00b18360f1957c9ffca8797a811ed8b3 |
---|
4 | |
---|
5 | warnings: |
---|
6 | eval.scm needs data-structures, a new dependency. |
---|
7 | |
---|
8 | notes: |
---|
9 | - .setup-info file list contains redundant full path to each file (for whatever reason). |
---|
10 | Therefore, you cannot simply copy an extension into a repository; chicken-status will |
---|
11 | list the wrong installed files, and chicken-uninstall will uninstall the wrong files. |
---|
12 | |
---|
13 | - Possibly we should allow chicken-status to sort eggs by repo, preserving all eggs instead |
---|
14 | of discarding later ones in the path. |
---|
15 | |
---|
16 | |
---|
17 | - Host/target extensions may not be handled properly. Examples: |
---|
18 | - chicken-status prints entire repo-path interspersed by ; when cross-chicken. Target extensions |
---|
19 | appear to be hardcoded to C_TARGET_LIB_HOME/chicken/6 only; repository-pathspec should only |
---|
20 | affect host extensions. I believe this is handled correctly. |
---|
21 | |
---|
22 | - Private repository should perhaps be the "dpath" default repository, inserted when there is |
---|
23 | an empty element, instead of overriding the entire pathspec. |
---|
24 | |
---|
25 | - Changing LOAD to follow repository path may change behavior when repository is set to (say) foo/, |
---|
26 | but the loaded extension is not in foo; currently, it will try . as a last resort. |
---|
27 | - Specifically, ##sys#find-extension automatically adds "." to end of search path, or |
---|
28 | to beginning of search path if -setup-mode is set. |
---|
29 | - Example: may be implicit in -ignore-repository option in batch-driver.scm, which sets |
---|
30 | repository-path to #f -- although not currently working, it may be intended to search "." |
---|
31 | only and would need to be set to (".") instead. |
---|
32 | - If env var is unset, pathspec may need to default to (list dpath ".") to simulate current behavior. |
---|
33 | - If env var is set, it will probably break the CWD last resort behavior, as I don't want to |
---|
34 | default to searching CWD. |
---|
35 | - Setting pathspec to include "." at end is not exactly equivalent to current behavior. |
---|
36 | For example, neither modules.db nor types.db are currently searched for in CWD, but they |
---|
37 | would be if "." was set in pathspec. Also, extension-information never searches CWD. |
---|
38 | However, resolve-include-filename does search CWD before trying other include paths (which include |
---|
39 | the repo only when when using -extend, and -inline-global). |
---|
40 | |
---|
41 | |
---|
42 | |
---|
43 | - modules.db creation requires that modules be imported, since import files can define arbitrary modules |
---|
44 | not necessarily named correctly. This is quite rare; see prometheus which defines srfi-8, etc. |
---|
45 | We cannot rely on .import.scm name to check module path / shadowing. |
---|
46 | Problem: we can't track which repo a module was imported from. Possible solution: modify module record |
---|
47 | to contain the repository path from which it was imported (if any). Once all import files are loaded |
---|
48 | in path order, write out per-path modules.db. |
---|
49 | - Note: modules.db is only (currently) used for module import suggestion when the compiler cannot find a module. |
---|
50 | It is currently impossible to track back a module to its .import.scm (i.e. library name) except by |
---|
51 | assuming its name is equivalent to its library name. In fact, modules.db contains spurious entries |
---|
52 | like (receive syntax srfi-8) when prometheus is installed, even though srfi-8 is an internal artifact, |
---|
53 | and (use srfi-8) makes no sense outside of prometheus' context. |
---|
54 | - Also, these "internal" modules can already shadow each other if their names conflict and their eggs |
---|
55 | are installed in the same repository. |
---|
56 | - Therefore, it could be argued that only the module named like the import file should be placed in modules.db. |
---|
57 | It's possible the current behavior of traversing the module table exists just because it's easy. |
---|
58 | - Or we could just assume "import name == module name" and use this to determine which main modules are |
---|
59 | shadowed, while still writing the whole table to individual modules.db. Unfortunately we would have no |
---|
60 | idea where to put the "internal" modules as they have no filename analog; we might even get confused if |
---|
61 | an internal module name conflicts with a main module name. |
---|
62 | " |
---|
63 | 02:57:11 < zbigniew> hmm; it seems that the behavior of modules.db may not even be right currently, with respect to import files that register multiple modules |
---|
64 | 02:59:41 < zbigniew> given that modules.db is used to make possible import suggestions like "suggesting: (import colorize)" |
---|
65 | 03:01:00 < zbigniew> it generally makes little sense to suggest importing a module that is buried inside a differently-named import file -- as this will almost always fail! |
---|
66 | 03:02:43 < zbigniew> as an interesting example, if you were to compile the simple file: |
---|
67 | 03:02:46 < zbigniew> (module foo () (import scheme) (receive)) |
---|
68 | 03:02:55 < zbigniew> and prometheus is installed, you will get: |
---|
69 | 03:03:10 < zbigniew> Warning: reference to possibly unbound identifier `receive' |
---|
70 | 03:03:10 < zbigniew> Warning: suggesting one of: |
---|
71 | 03:03:10 < zbigniew> Warning: (import srfi-8) |
---|
72 | 03:03:10 < zbigniew> Warning: (import chicken) |
---|
73 | 03:03:48 < zbigniew> |
---|
74 | 03:05:43 < zbigniew> which is essentially nonsense; so I wonder if slavishly adhering to the current behavior is even necessary, if it entails intrusive changes. |
---|
75 | " |
---|
76 | |
---|
77 | |
---|
78 | |
---|
79 | * virtualenv / pip |
---|
80 | |
---|
81 | setuptools (and pip) have multiple paths but are a bit schizophrenic because the functionality was added over a long time |
---|
82 | Native python has only sys.path (afaik) module lookup, without any versioning or dependencies. |
---|
83 | |
---|
84 | - multiple installed versions are supported via runtime manipulation of the path |
---|
85 | - installs get their own dedicated and versioned directory and old versions are not necessarily deleted after upgrade |
---|
86 | - active install is specified, I *believe*, by .pth file in every site-packages/ dir |
---|
87 | - scripts are (always?) stub trampolines to an entry point in the main code, which resides in the code proper |
---|
88 | - setuptools creates the stub scripts for you, given instructions in the setup.py file |
---|
89 | - scripts are installed apart from main code, unversioned, in a dedicated bin directory. Bin dir overridable by user in config file. |
---|
90 | - you can have multiple script versions installed, but you have to manually `cp script script-ver` after every version install; |
---|
91 | the stub code itself refers to the egg version, so the correct code library version will still be called |
---|
92 | - pkg_resources API is used to indirectly locate files included with the egg. Primarily this allows resources |
---|
93 | to be transparently contained within a zip file. In Chicken we could use a similar technique with a special resources egg. |
---|
94 | - (UNTESTED) pkg_resources always refers to resources in a versioned code dir, I think, so you should have one full copy of |
---|
95 | all resources with each installed version. |
---|
96 | - (UNKNOWN) Can you write to a resource directory at runtime, or how else do you find the path to variable files? |
---|
97 | And if you did write to a resource dir, I assume your changes are wiped out (or inaccessible) when you upgrade the egg, due to versioning. |
---|