Great work Andrea! Factor needs a package management system eventually. Programmers have this strange infatuation with packages and unless the language offers it, it's just not taken seriously. Maybe because people are customed to the language core being almost closed and the bar uber high for contributions so people feel they need to release their own packages to contribute.
I think Factor's community is more open than that and John and Doug are amazingly responsive on the bug tracker. So if you have any worthwhile code to contribute, just make a pull request and it will be merged quickly. Then you'll get code maintenance for free in case the language changes and your test suite is setup to run nightly which catches bugs. So I tried to get your package manager to work, but something goes wrong: USE: packages.example "example-project" activate Added "packages.projects" vocabulary to search path More than one file found for vocabulary: example-project Type :help for debugging help. Maybe the code is in flux? Anyway, here are some random thoughts about your implementation: * You can't have one voacb root per package. If you run "threads." in the listener, you'll see that there is one thread for each of the three roots. They monitor that directory tree and reloads vocabs that change automatically. See http://docs.factorcode.org/content/article-vocabs.refresh.html So yes, there are performance problems. * So for example, to install your monoid package, I run: $ git clone https://github.com/andreaferretti/factor-monoid $ cp -r factor-monoid/monoid /opt/factor64/lib/factor/extra (Thats where my resources:extra is) And in the listener: IN: scratchpad USE: monoid IN: scratchpad 3 3 |+| . 6 No need to restart Factor or any other setup to get it going. Suppose then you released a new version of monoid, I would copy it to /opt/factor64/lib/factor/extra and then simply run: IN: scratchpad refresh-all Loading resource:extra/monoid/monoid.factor Factor would then recompile your monoid vocab and not only that, all vocabs I have loaded that uses monoid would automatically be recompiled too. Uninstallation is a sore point though and that's where I think a package managerwould really shine. * Maybe we can repurpouse resource:extra as the package installation url? In a way it already is. Or we could add a specific resource:packages root. * I like that the configuration is Factor code, but I think you went to syntax happy. :) A simple assoc would suffice: { { project "example-project" } { url "https://github.com/andreaferretti/factor-example.git" } { version "0.1.0" } { dependencies { "https://github.com/andreaferretti/factor-packages.git" "https://github.com/andreaferretti/factor-options.git" } } } Also the standard convention is to have metadata inside the vocabulary's own directory. So why not have it in say monoid/monoid-pkg.factor? It would be symmetrical with the -docs.factor and -tests.factor suffixes. * You might also want to look into Factor's application deployment system: http://docs.factorcode.org/content/article-tools.deploy.html because deployment has many similarities with making packages. Also see the summary.txt, authors.txt, deploy.factor and tags.txt files. Possibly they could all be merged into one vocabname-meta.factor file? * I realised you've spent a lot of thought thinking about how dependencies and especially transitive dependencies should work. Personally, I think it's way, way, to soon to think about that and a package manager that just handled the packaging and not any deps would still be really useful. * Feel free to ignore all my points above. :) It's ofcourse better if a package manager is created than that bikeshedding prevents it from ever happening. -- mvh/best regards Björn Lindqvist ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk _______________________________________________ Factor-talk mailing list Factor-talk@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/factor-talk